FARGOS/VISTA Object Management Environment Core  ..
FARGOS/VISTA Object Management Environment Core Table of Contents
OMEclass.h
Go to the documentation of this file.
1 #ifndef _OME_CLASS_H
2 #define _OME_CLASS_H "$Id: OMEclass.h 347 2020-05-21 04:13:52Z geoff $"
4 
6 #include <map>
7 
8 #include <OMEmethod.h>
9 #include <OMEtype.h>
11 
16 typedef OME_CORE_CALL void *(*CreateInstanceFP)(const class OMEclass *cInfo);
17 typedef OME_CORE_CALL void (*DeleteInstanceFP)(const class OMEclass *cInfo, void *data);
18 
19 OME_CORE_CALL void *OMEdefaultInstanceCreate(const class OMEclass *cInfo);
20 OME_CORE_CALL void OMEdefaultInstanceDelete(const class OMEclass *cInfo, void *data);
21 
22 
23 
24 class OMEclass {
25 private:
27  class OMEinheritEntry *inheritList;
28  std::map<uint32_t, OMEmethodP> methodTable; // defined methods
29  bool resolvedFlag; // all classes resolved
31  uint32_t instanceCount;
32  // inheritance graph after processing...
33  uint_fast16_t classInstanceTotal;
34  class OMEinheritGraphNode **classInstances;
35  uint8_t *searchOrderLists;
36  // storage creation and deletion routines
39  // Encode, decode functions...
40  mutable struct OMEinstanceVarDescr const *varDescRec;
42 
43  bool inheritsFrom(const OMEclass *aClass,
44  const OMEstring *baseClassName = nullptr,
45  const uint32_t *baseClassVerID = nullptr) const;
46 
47  void buildInheritanceGraph(uint_fast16_t *count, class OMEinheritGraphNode *l[]);
48 
49  uint8_t computeSearchOrder(uint8_t searchList[],
50  const int_fast16_t startLevel = -1,
51  const uint8_t currentCount = 0) const;
52 
53  int addMethodName(OMEstring &name, OMEmethodP methodRecord);
54 public:
56  uint32_t versionID;
57  uint32_t hashIndex;
58  uint32_t instanceSize;
60 
61  OMEclass(OMEnameSpaceGroup *nameSpace, const OMEstring &name,
62  const uint32_t verID, const uint32_t iSize,
63  const bool unique = 0,
65  const DeleteInstanceFP dsRoutine = OMEdefaultInstanceDelete);
66 
67  ~OMEclass();
68 
69  void setMetaObject(const OMEoid &obj) {
70  delete metaObject;
71  metaObject = new OMEoid(obj);
72  }
73 
74  void setMetaObject(const OMEtype &obj) {
75  delete metaObject;
76  if (obj.type == OME_OID) {
77  metaObject = new OMEoid(*obj.value.oid);
78  } else {
79  metaObject = nullptr;
80  }
81  }
82 
83  int addMethod(OMEmethodP);
84 
85  OME_FAST_CALL OMEmethodP findMethod(const OMEstring &methodName,
86  const uint32_t indx=0) const;
87 
89  const OMEstring &methodName, const uint32_t indx = 0) const;
90 
91  OME_FAST_CALL int listMethodInfo(OMEassoc &result) const;
92 
93  int setStorageDescription(const struct OMEinstanceVarDescr *desc);
94 
95  uint_fast16_t setStorageDescription(const OMEarray &oil2Data);
96 
97  int inheritFromClass(const OMEstring &nameSpace, const OMEstring &name,
98  const uint32_t verID = 0, const bool unique = false);
99 
100  int inheritFromClass(const char *nameSpace, const char *name,
101  const uint32_t verID = 0, const bool unique = false)
102  {
103  return (inheritFromClass(OMEstring(nameSpace), OMEstring(name),
104  verID, unique));
105  }
106 
107  bool resolved() const { return (resolvedFlag); }
108 
110 
111  uint_fast16_t inheritListTotal() const { return (classInstanceTotal); }
112 
113  OME_FAST_CALL OMEclass *getClassAtLevel(uint_fast16_t level) const;
114 
115  OME_FAST_CALL const unsigned char *getSearchOrder(uint8_t *count,
116  const int_fast16_t startLevel = -1) const NONNULL_CLASS_PARAMETERS(2);
117 
118  uint_fast32_t getNextInstanceID() {
119  uint32_t result;
120  result = atomicIncrement_uint32(&instanceCount, 1);
121  return (result);
122  }
123 
124  const OMEarray &getVariableDescriptions() const;
125 
126  const OMEstring &getNameSpaceName() const;
127 
128  bool doesInheritFrom(const OMEclass *aClass,
129  OMEstring *fromClassName = nullptr, uint32_t *fromClassVerID = nullptr) const;
130 
131  int resolveLinkages(OMEstring *missingClassName = nullptr,
132  uint32_t *missingClassVersionID = nullptr);
133 
134  void *createInstanceData();
135 
136  void deleteInstanceData(void *iData);
137 
138  OME_FAST_CALL OMEtype *extractInstanceData(const void *iData, bool annotate) const;
139 
140  OME_FAST_CALL int importInstanceData(void *iData, const OMEtype &data) const;
141 
142  template <typename STREAMTYPE> STREAMTYPE & dumpClassData(STREAMTYPE &o = std::cout) const;
143 }; // end class OMEclass
144 
146 
147 extern uint_fast16_t OMEconvertToStorageDescription(OMEarray &varDesc,
148  const struct OMEinstanceVarDescr *desc);
149 
150 extern uint_fast16_t OMEconvertToStorageDescription(OMEarray &varDesc, const OMEarray &data);
151 
155 #endif
156 /* vim: set expandtab shiftwidth=4 tabstop=4: */
OMEstring::substr
ssize_t substr(const OMEstring &sub, size_t startOffset=0) const
Definition: OMEstring.h:490
l
Ïúíþ ð Ø ˜ ˜ __text __TEXT € __apple_names __DWARF __apple_objc __DWARF __apple_namespac__DWARF H X __apple_types __DWARF l
Definition: tmp3.o.cpp:1
MAX_INHERIT_TOTAL
#define MAX_INHERIT_TOTAL
Definition: OMEclass.cpp:409
OME_FLOAT
@ OME_FLOAT
Definition: OMEmanifests.h:82
OME_DELETE_OBJECT
#define OME_DELETE_OBJECT(ptr)
Definition: OMEmanifests.h:159
OMEtype::initializeAsType
void initializeAsType(const enum OMEtypes_t t)
The fundamental tagged data type used through the FARGOS/VISTA infrastructure.
Definition: OMEtype.cpp:95
OMEclass::inheritListTotal
uint_fast16_t inheritListTotal() const
Definition: OMEclass.h:111
OMEprofileCounter< uint32_t >
OMEdefaultInstanceCreate
OME_CORE_CALL void * OMEdefaultInstanceCreate(const class OMEclass *cInfo)
OMEclassP
OMEclass * OMEclassP
Definition: OMEclass.h:145
OMEclass::listMethodInfo
OME_FAST_CALL int listMethodInfo(OMEassoc &result) const
Definition: OMEclass.cpp:333
OMEnameSpaceGroup
Mapping table to class implementations within a namespace.
Definition: OMEnamespace.h:18
OMEfunctions.h
OME utility functions.
OMEclass::classInstanceTotal
uint_fast16_t classInstanceTotal
Definition: OMEclass.h:33
OMEclass::permitInheritOfUniqueCopy
bool permitInheritOfUniqueCopy() const
Definition: OMEclass.h:109
OMEclass::classInstances
class OMEinheritGraphNode ** classInstances
Definition: OMEclass.h:34
OME_UINT16
@ OME_UINT16
Definition: OMEmanifests.h:98
OMEclass::~OMEclass
~OMEclass()
Definition: OMEclass.cpp:158
OMEconvertToStorageDescription
uint_fast16_t OMEconvertToStorageDescription(OMEarray &varDesc, const struct OMEinstanceVarDescr *desc)
OMEassoc
Implements associative array of OMEtype elements.
Definition: OMEassoc.h:112
OMEstring
Implements text and binary string storage.
Definition: OMEstring.h:305
OMEclass::instanceCount
uint32_t instanceCount
Definition: OMEclass.h:31
OMEclass::findMethodImplementation
OME_FAST_CALL OMEinvocationData * findMethodImplementation(const uint32_t signature, const OMEstring &methodName, const uint32_t indx=0) const
Definition: OMEclass.cpp:321
OMEclass::setStorageDescription
int setStorageDescription(const struct OMEinstanceVarDescr *desc)
Definition: OMEclass.cpp:224
OMEclass::setMetaObject
void setMetaObject(const OMEoid &obj)
Definition: OMEclass.h:69
OMEarray::indexExists
bool indexExists(const uint32_t i) const
Definition: OMEarray.h:202
OMEtype::value
union OMEtype::@26 value
OME_DELETE_OBJECT_VECTOR
#define OME_DELETE_OBJECT_VECTOR(ptr)
Definition: OMEmanifests.h:160
OMEmethod::findImplementationWithSignature
OME_FAST_CALL OMEinvocationData * findImplementationWithSignature(const uint32_t sig) const
Definition: OMEmethod.cpp:123
OMEtype
Fundamental ANY type for FARGOS/VISTA Object Management Environment.
Definition: OMEbaseType.h:250
OMEhash
OME_DLL_EXPORT uint32_t OMEhash(const unsigned char *data, const uint32_t len) NONNULL_PARAMETERS(1)
Fast 32-bit hash over a buffer.
Definition: OMEhash.cpp:13
OME_DOUBLE
@ OME_DOUBLE
Definition: OMEmanifests.h:83
OMEclass::createInstanceData
void * createInstanceData()
Allocate and initialize storage for instance variables.
Definition: OMEclass.cpp:113
OMEtype::oid
class OMEoid * oid
Definition: OMEbaseType.h:297
OMEmethod
Description of an OME method.
Definition: OMEmethod.h:82
OME_UINT32
@ OME_UINT32
Definition: OMEmanifests.h:96
OMEmethod.h
OMEclass::importInstanceData
OME_FAST_CALL int importInstanceData(void *iData, const OMEtype &data) const
Definition: OMEclass.cpp:691
OMEtype::s
class OMEstring * s
Definition: OMEbaseType.h:299
NONNULL_CLASS_PARAMETERS
#define NONNULL_CLASS_PARAMETERS(...)
Mark a function as never returning a null pointer.
Definition: compiler_hints.h:337
OMEmethod::methodName
OMEstring methodName
Definition: OMEmethod.h:86
OMEcore.h
OMEclass::buildInheritanceGraph
void buildInheritanceGraph(uint_fast16_t *count, class OMEinheritGraphNode *l[])
Definition: OMEclass.cpp:511
OMEtype::i
int32_t i
Definition: OMEbaseType.h:285
OMEinstanceVarDescr
Meta data record to describe an instance variable of a class.
Definition: OMEnamespace.h:76
OMEclass::findMethod
OME_FAST_CALL OMEmethodP findMethod(const OMEstring &methodName, const uint32_t indx=0) const
Definition: OMEclass.cpp:294
OMEclass
FARGOS/VISTA Object Management Environment class description.
Definition: OMEclass.h:24
OMEclass::deleteInstanceData
void deleteInstanceData(void *iData)
Delete instance variable storage.
Definition: OMEclass.cpp:128
OME_ERROR_NO_SUCH_CLASS
#define OME_ERROR_NO_SUCH_CLASS
Definition: OMEerror.h:15
OMEclass::resolveLinkages
int resolveLinkages(OMEstring *missingClassName=nullptr, uint32_t *missingClassVersionID=nullptr)
Attempt to resolve inheritance tree.
Definition: OMEclass.cpp:428
OMEdefaultInstanceCreate
void * OMEdefaultInstanceCreate(const OMEclass *cInfo)
Definition: OMEclass.cpp:79
DeleteInstanceFP
OME_CORE_CALL void(* DeleteInstanceFP)(const class OMEclass *cInfo, void *data)
Definition: OMEclass.h:17
OMEclass::instanceSize
uint32_t instanceSize
required storage in bytes
Definition: OMEclass.h:58
OMEfindClassDescription
OMEclass * OMEfindClassDescription(const OMEstring &className, const uint32_t verID, const OMEstring *nmSpace)
Definition: OMEnamespace.cpp:165
OMEclass::hashIndex
uint32_t hashIndex
OMEhash(className)
Definition: OMEclass.h:57
srcID
const char srcID[]
Definition: catSym.c:17
OMEclass::extractInstanceData
OME_FAST_CALL OMEtype * extractInstanceData(const void *iData, bool annotate) const
Definition: OMEclass.cpp:617
OMEclass::addMethod
int addMethod(OMEmethodP)
Add method implementation.
Definition: OMEclass.cpp:277
OMEclass.h
OME_EXPECT_TRUE
#define OME_EXPECT_TRUE(expr)
Annotation macro for conditional expression expected to be true.
Definition: compiler_hints.h:541
OMEclass::getSearchOrder
const OME_FAST_CALL unsigned char * getSearchOrder(uint8_t *count, const int_fast16_t startLevel=-1) const NONNULL_CLASS_PARAMETERS(2)
Get table of indexes that specify class search order.
Definition: OMEclass.cpp:501
OME_OID
@ OME_OID
Definition: OMEmanifests.h:84
OMEtype::f
float f
Definition: OMEbaseType.h:287
OMEtypes_t
OMEtypes_t
Definition: OMEmanifests.h:77
OMEclass::getNameSpaceName
const OMEstring & getNameSpaceName() const
Definition: OMEclass.cpp:249
OMEdefaultInstanceDelete
void OMEdefaultInstanceDelete(const OMEclass *cInfo, void *data)
Definition: OMEclass.cpp:99
OMEclass::nameSpaceInfo
class OMEnameSpaceGroup * nameSpaceInfo
Definition: OMEclass.h:26
OMEclass::searchOrderLists
uint8_t * searchOrderLists
Definition: OMEclass.h:35
OMEdefaultInstanceDelete
OME_CORE_CALL void OMEdefaultInstanceDelete(const class OMEclass *cInfo, void *data)
OME_ARRAY_SUBSCRIPT_t
#define OME_ARRAY_SUBSCRIPT_t(v)
Definition: OMEarray.h:293
OMEclass::storageCreateRoutine
CreateInstanceFP storageCreateRoutine
Definition: OMEclass.h:37
OMEtype.h
OME fundamental type implementation.
OMEclass::inheritList
class OMEinheritEntry * inheritList
Definition: OMEclass.h:27
CreateInstanceFP
OME_CORE_CALL void *(* CreateInstanceFP)(const class OMEclass *cInfo)
Definition: OMEclass.h:16
OMEclass::getVariableDescriptions
const OMEarray & getVariableDescriptions() const
Definition: OMEclass.cpp:238
OMEerror.h
OME error codes.
OMEclass::getClassAtLevel
OME_FAST_CALL OMEclass * getClassAtLevel(uint_fast16_t level) const
Definition: OMEclass.cpp:184
OMEtype::ui
uint32_t ui
Definition: OMEbaseType.h:286
OMEstring::length
size_t length() const
Definition: OMEstring.h:401
OMEclass::dumpClassData
STREAMTYPE & dumpClassData(STREAMTYPE &o=std::cout) const
Definition: OMEclass.cpp:598
OMEclass::inheritFromClass
int inheritFromClass(const char *nameSpace, const char *name, const uint32_t verID=0, const bool unique=false)
Definition: OMEclass.h:100
OME_ERROR_CIRCULAR_INHERITANCE
#define OME_ERROR_CIRCULAR_INHERITANCE
Definition: OMEerror.h:16
OMEmethod::listMethodInfo
OME_FAST_CALL uint_fast32_t listMethodInfo(OMEarray &result, const uint_fast32_t count=0) const
Definition: OMEmethod.cpp:166
OME_USED
const char srcID[] OME_USED
Definition: tick_time.cpp:24
OMEclass::resolved
bool resolved() const
Definition: OMEclass.h:107
OMEclass::versionID
uint32_t versionID
Definition: OMEclass.h:56
OMEclass::className
OMEstring className
Definition: OMEclass.h:55
OMEreferenceCount::addReadOnlyReference
void addReadOnlyReference()
Definition: OMErefCount.cpp:139
OMEclass::addMethodName
int addMethodName(OMEstring &name, OMEmethodP methodRecord)
Definition: OMEclass.cpp:254
atomic_values.h
Atomic operations.
OMEclass::resolvedFlag
bool resolvedFlag
Definition: OMEclass.h:29
OMEclass::setMetaObject
void setMetaObject(const OMEtype &obj)
Definition: OMEclass.h:74
OMEclass::computeSearchOrder
uint8_t computeSearchOrder(uint8_t searchList[], const int_fast16_t startLevel=-1, const uint8_t currentCount=0) const
Definition: OMEclass.cpp:556
OMEinvocationData
Record to describe the implementation of the method of an OME class.
Definition: OMEmethod.h:35
OMEclass::variableDescriptions
OMEarray variableDescriptions
Definition: OMEclass.h:41
OMEclass::getNextInstanceID
uint_fast32_t getNextInstanceID()
Definition: OMEclass.h:118
OMEinstanceVarDescr::varName
const char * varName
Definition: OMEnamespace.h:77
OMEmethod::addImplementation
void addImplementation(OMEinvocationData *impl)
Definition: OMEmethod.cpp:96
OME_UINT8
@ OME_UINT8
Definition: OMEmanifests.h:99
OME_FAST_CALL
#define OME_FAST_CALL
Definition: compiler_hints.h:468
OMEclass::inheritsFrom
bool inheritsFrom(const OMEclass *aClass, const OMEstring *baseClassName=nullptr, const uint32_t *baseClassVerID=nullptr) const
OMEclass::OMEclass
OMEclass(OMEnameSpaceGroup *nameSpace, const OMEstring &name, const uint32_t verID, const uint32_t iSize, const bool unique=0, const CreateInstanceFP csRoutine=OMEdefaultInstanceCreate, const DeleteInstanceFP dsRoutine=OMEdefaultInstanceDelete)
Definition: OMEclass.cpp:133
_STD
#define _STD
Definition: OMEmanifests.h:146
OMEdebugInfo.h
OME debug and profiling interfaces.
OMEclass::varDescRec
struct OMEinstanceVarDescr const * varDescRec
Definition: OMEclass.h:40
OMEarray
Implements sparse array of OMEtype elements.
Definition: OMEarray.h:75
OMEreferenceCount::dropReference
int_fast32_t dropReference()
Definition: OMErefCount.cpp:144
OMEnamespace.h
OMEoid
Public interface to an OME Object Identifier.
Definition: OMEoid.h:196
OMEtype::type
uint32_t type
Definition: OMEbaseType.h:304
OMEclass::storageDeleteRoutine
DeleteInstanceFP storageDeleteRoutine
Definition: OMEclass.h:38
OMEclass::doesInheritFrom
bool doesInheritFrom(const OMEclass *aClass, OMEstring *fromClassName=nullptr, uint32_t *fromClassVerID=nullptr) const
Definition: OMEclass.cpp:364
OMEclass::inheritFromClass
int inheritFromClass(const OMEstring &nameSpace, const OMEstring &name, const uint32_t verID=0, const bool unique=false)
Definition: OMEclass.cpp:349
OME_CORE_CALL
#define OME_CORE_CALL
Definition: compiler_hints.h:472
OME_ARRAY
@ OME_ARRAY
Definition: OMEmanifests.h:86
OME_ERROR_BAD_DATA
#define OME_ERROR_BAD_DATA
Definition: OMEerror.h:21
OMEtype
#define OMEtype
Definition: tmp.o.cpp:396
OMEclass::methodTable
std::map< uint32_t, OMEmethodP > methodTable
Definition: OMEclass.h:28
OMEconvertToStorageDescription
uint_fast16_t OMEconvertToStorageDescription(OMEarray &varDesc, const OMEinstanceVarDescr *desc)
Definition: OMEclass.cpp:188
OMEclass::forceInheritUnique
bool forceInheritUnique
Definition: OMEclass.h:30
OMEclass::metaObject
OMEoid * metaObject
Definition: OMEclass.h:59
OME_ASSOC
@ OME_ASSOC
Definition: OMEmanifests.h:87
OME_INT32
@ OME_INT32
Definition: OMEmanifests.h:79
OMEnameSpaceGroup::getNameSpace
const OMEstring & getNameSpace() const
Definition: OMEnamespace.h:30
Generated: Fri Jul 31 2020 18:19:14
Support Information