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
AttAccessLambdaCreationFunctions.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 PDB_ATTACCESSLAMBDACREATIONFUNCTIONS_H
20 #define PDB_ATTACCESSLAMBDACREATIONFUNCTIONS_H
21 
22 #include <LambdaTree.h>
23 #include <AttAccessLambda.h>
24 #include <Handle.h>
25 #include <Ptr.h>
26 
27 namespace pdb {
28 
41 template <typename ReturnType, typename ClassType>
43  std::string attName,
44  std::string attType,
45  Handle<ClassType>& var,
46  ReturnType* member,
47  size_t offset) {
48  PDB_COUT << "makeLambdaUsingMember: input type code is " << var.getExactTypeInfoValue() << std::endl;
49  return LambdaTree<Ptr<ReturnType>>(std::make_shared<AttAccessLambda<ReturnType, ClassType>>(inputTypeName,
50  attName,
51  attType,
52  var,
53  offset));
54 }
55 
59 extern void* someRandomPointer;
60 
65 #define makeLambdaFromMember(VAR, MEMBER) \
66  (makeLambdaUsingMember( \
67  getTypeName<std::remove_reference<decltype(*VAR)>::type>(), \
68  std::string(#MEMBER), \
69  getTypeName<typename std::remove_reference<decltype(VAR->MEMBER)>::type>(), \
70  VAR, \
71  (decltype(VAR->MEMBER)*)someRandomPointer, \
72  ((char*)&(((std::remove_reference<decltype(*VAR)>::type*)someRandomPointer)->MEMBER)) - \
73  (char*)someRandomPointer))
74 
75 }
76 
77 #endif //PDB_ATTACCESSLAMBDACREATIONFUNCTIONS_H
void * someRandomPointer
#define PDB_COUT
Definition: PDBDebug.h:31
LambdaTree< Ptr< ReturnType > > makeLambdaUsingMember(std::string inputTypeName, std::string attName, std::string attType, Handle< ClassType > &var, ReturnType *member, size_t offset)