6#ifndef YARP_OS_SHAREDLIBRARYCLASSAPI_H
7#define YARP_OS_SHAREDLIBRARYCLASSAPI_H
19#define YARP_SHAREDLIBRARYCLASSAPI_PADDING (30 - 2 * (YARP_POINTER_SIZE / 4))
56#define YARP_SHARED_CLASS_FN extern "C" YARP_EXPORT
74#define YARP_DEFINE_SHARED_SUBCLASS(factoryname, classname, basename) \
75 YARP_SHARED_CLASS_FN void* factoryname##_create() \
77 classname* cn = new classname; \
78 basename* bn = dynamic_cast<basename*>(cn); \
81 return static_cast<void*>(bn); \
83 YARP_SHARED_CLASS_FN void factoryname##_destroy(void* obj) \
85 classname* cn = dynamic_cast<classname*>(static_cast<basename*>(obj)); \
89 YARP_SHARED_CLASS_FN int factoryname##_getVersion(char* ver, int len) \
93 YARP_SHARED_CLASS_FN int factoryname##_getAbi(char* abi, int len) \
97 YARP_SHARED_CLASS_FN int factoryname##_getClassName(char* name, int len) \
99 char cname[] = #classname; \
100 strncpy(name, cname, len); \
101 return strlen(cname) + 1; \
103 YARP_SHARED_CLASS_FN int factoryname##_getBaseClassName(char* name, int len) \
105 char cname[] = #basename; \
106 strncpy(name, cname, len); \
107 return strlen(cname) + 1; \
109 YARP_SHARED_CLASS_FN int factoryname(void* api, int len) \
111 struct yarp::os::SharedLibraryClassApi* sapi = (struct yarp::os::SharedLibraryClassApi*)api; \
112 if (len < (int)sizeof(yarp::os::SharedLibraryClassApi)) \
114 sapi->startCheck = yarp::os::createVocab32('Y', 'A', 'R', 'P'); \
115 sapi->structureSize = sizeof(yarp::os::SharedLibraryClassApi); \
116 sapi->systemVersion = 5; \
117 sapi->create = factoryname##_create; \
118 sapi->destroy = factoryname##_destroy; \
119 sapi->getVersion = factoryname##_getVersion; \
120 sapi->getAbi = factoryname##_getAbi; \
121 sapi->getClassName = factoryname##_getClassName; \
122 sapi->getBaseClassName = factoryname##_getBaseClassName; \
123 for (int i = 0; i < YARP_SHAREDLIBRARYCLASSAPI_PADDING; i++) { \
124 sapi->roomToGrow[i] = 0; \
126 sapi->endCheck = yarp::os::createVocab32('P', 'L', 'U', 'G'); \
127 return sapi->startCheck; \
140#define YARP_DEFAULT_FACTORY_NAME "yarp_default_factory"
141#define YARP_DEFINE_DEFAULT_SHARED_CLASS(classname) YARP_DEFINE_SHARED_SUBCLASS(yarp_default_factory, classname, classname)
142#define YARP_DEFINE_SHARED_CLASS(factoryname, classname) YARP_DEFINE_SHARED_SUBCLASS(factoryname, classname, classname)
#define YARP_SHAREDLIBRARYCLASSAPI_PADDING
A mini-server for performing network communication in the background.
An interface to the operating system, including Port based communication.
std::int32_t NetInt32
Definition of the NetInt32 type.
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.