6 #ifndef YARP_OS_SHAREDLIBRARYCLASSAPI_H
7 #define YARP_OS_SHAREDLIBRARYCLASSAPI_H
19 #define YARP_SHAREDLIBRARYCLASSAPI_PADDING (30 - 2 * (YARP_POINTER_SIZE / 4))
58 #define YARP_SHARED_CLASS_FN extern "C" YARP_EXPORT
76 #define YARP_DEFINE_SHARED_SUBCLASS(factoryname, classname, basename) \
77 YARP_SHARED_CLASS_FN void* factoryname##_create() \
79 classname* cn = new classname; \
80 basename* bn = dynamic_cast<basename*>(cn); \
83 return static_cast<void*>(bn); \
85 YARP_SHARED_CLASS_FN void factoryname##_destroy(void* obj) \
87 classname* cn = dynamic_cast<classname*>(static_cast<basename*>(obj)); \
91 YARP_SHARED_CLASS_FN int factoryname##_getVersion(char* ver, int len) \
95 YARP_SHARED_CLASS_FN int factoryname##_getAbi(char* abi, int len) \
99 YARP_SHARED_CLASS_FN int factoryname##_getClassName(char* name, int len) \
101 char cname[] = #classname; \
102 strncpy(name, cname, len); \
103 return strlen(cname) + 1; \
105 YARP_SHARED_CLASS_FN int factoryname##_getBaseClassName(char* name, int len) \
107 char cname[] = #basename; \
108 strncpy(name, cname, len); \
109 return strlen(cname) + 1; \
111 YARP_SHARED_CLASS_FN int factoryname(void* api, int len) \
113 struct yarp::os::SharedLibraryClassApi* sapi = (struct yarp::os::SharedLibraryClassApi*)api; \
114 if (len < (int)sizeof(yarp::os::SharedLibraryClassApi)) \
116 sapi->startCheck = yarp::os::createVocab32('Y', 'A', 'R', 'P'); \
117 sapi->structureSize = sizeof(yarp::os::SharedLibraryClassApi); \
118 sapi->systemVersion = 5; \
119 sapi->create = factoryname##_create; \
120 sapi->destroy = factoryname##_destroy; \
121 sapi->getVersion = factoryname##_getVersion; \
122 sapi->getAbi = factoryname##_getAbi; \
123 sapi->getClassName = factoryname##_getClassName; \
124 sapi->getBaseClassName = factoryname##_getBaseClassName; \
125 for (int i = 0; i < YARP_SHAREDLIBRARYCLASSAPI_PADDING; i++) { \
126 sapi->roomToGrow[i] = 0; \
128 sapi->endCheck = yarp::os::createVocab32('P', 'L', 'U', 'G'); \
129 return sapi->startCheck; \
142 #define YARP_DEFAULT_FACTORY_NAME "yarp_default_factory"
143 #define YARP_DEFINE_DEFAULT_SHARED_CLASS(classname) YARP_DEFINE_SHARED_SUBCLASS(yarp_default_factory, classname, classname)
144 #define YARP_DEFINE_SHARED_CLASS(factoryname, classname) YARP_DEFINE_SHARED_SUBCLASS(factoryname, classname, classname)
#define YARP_SHAREDLIBRARYCLASSAPI_PADDING
std::int32_t NetInt32
Definition of the NetInt32 type.
The main, catch-all namespace for YARP.
Collection of hooks for creating/destroying a plugin.
int(* getVersion)(char *ver, int len)
NetInt32 roomToGrow[(30 - 2 *(8/4))]
void(* destroy)(void *obj)
int(* getClassName)(char *name, int len)
int(* getAbi)(char *abi, int len)
int(* getBaseClassName)(char *name, int len)
#define YARP_END_PACK
Ends 1 byte packing for structs/classes.
#define YARP_BEGIN_PACK
Starts 1 byte packing for structs/classes.