A platform for high-performance distributed tool and library development written in C++. It can be deployed in two different cluster modes: standalone or distributed. API for v0.5.0, released on June 13, 2018.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Ptr.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * *
3  * Copyright 2018 Rice University *
4  * *
5  * Licensed under the Apache License, Version 2.0 (the "License"); *
6  * you may not use this file except in compliance with the License. *
7  * You may obtain a copy of the License at *
8  * *
9  * http://www.apache.org/licenses/LICENSE-2.0 *
10  * *
11  * Unless required by applicable law or agreed to in writing, software *
12  * distributed under the License is distributed on an "AS IS" BASIS, *
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
14  * See the License for the specific language governing permissions and *
15  * limitations under the License. *
16  * *
17  *****************************************************************************/
18 
19 #ifndef PTR_H
20 #define PTR_H
21 
22 namespace pdb {
23 
24 class PtrBase {};
25 
26 // this class wraps up a pointer, and provides implicity dereferencing...
27 // it is used during query processing, whenever we want to store a pointer
28 // to a data member. This will also be used when we have a C++ lambda or
29 // a method call that returns a reference; in this case, we store a pointer
30 // to the value so that we can avoid a copy
31 template <class BaseType>
32 class Ptr : public PtrBase {
33 
34 private:
35  BaseType* data;
36 
37 public:
38  Ptr() {
39  data = nullptr;
40  }
41 
42  Ptr(BaseType* fromMe) {
43  data = fromMe;
44  }
45 
46  Ptr(BaseType& fromMe) {
47  data = &fromMe;
48  }
49 
50  Ptr& operator=(BaseType* fromMe) {
51  data = fromMe;
52  return *this;
53  }
54 
55  Ptr& operator=(BaseType& fromMe) {
56  data = &fromMe;
57  return *this;
58  }
59 
60  ~Ptr() {}
61 
62  operator BaseType&() const {
63  return *data;
64  }
65 
66  operator BaseType*() const {
67  return data;
68  }
69 
70  static size_t getObjectSize() {
71  return sizeof(BaseType);
72  }
73 };
74 }
75 
76 #endif
Ptr()
Definition: Ptr.h:38
Ptr & operator=(BaseType &fromMe)
Definition: Ptr.h:55
Ptr(BaseType &fromMe)
Definition: Ptr.h:46
Ptr & operator=(BaseType *fromMe)
Definition: Ptr.h:50
~Ptr()
Definition: Ptr.h:60
Ptr(BaseType *fromMe)
Definition: Ptr.h:42
Definition: Ptr.h:32
static size_t getObjectSize()
Definition: Ptr.h:70
BaseType * data
Definition: Ptr.h:35