| #ifndef NETSNMP_FACTORY_H |
| #define NETSNMP_FACTORY_H |
| |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| typedef void * (netsnmp_factory_produce_f)(void); |
| typedef int (netsnmp_factory_produce_noalloc_f)(void *); |
| |
| typedef struct netsnmp_factory_s { |
| /* |
| * a string describing the product the factory creates |
| */ |
| const char *product; |
| |
| /* |
| * a function to create an object in newly allcoated memory |
| */ |
| netsnmp_factory_produce_f *produce; |
| |
| /* |
| * a function to create an object in previously allcoated memory |
| */ |
| netsnmp_factory_produce_noalloc_f *produce_noalloc; |
| |
| } netsnmp_factory; |
| |
| /* |
| * init factory registry |
| */ |
| void netsnmp_factory_init(void); |
| |
| /* |
| * register a factory type |
| */ |
| int netsnmp_factory_register(netsnmp_factory *f); |
| |
| /* |
| * get a factory |
| */ |
| netsnmp_factory* netsnmp_factory_get(const char* product); |
| |
| /* |
| * ask a factory to produce an object |
| */ |
| void * netsnmp_factory_produce(const char* product); |
| |
| /* |
| * ask a factory to produce an object in the provided memory |
| */ |
| int netsnmp_factory_produce_noalloc(const char *product, void *memory); |
| |
| /* |
| * factory return codes |
| */ |
| enum { |
| FACTORY_NOERROR = 0, |
| FACTORY_EXISTS, |
| FACTORY_NOTFOUND, |
| FACTORY_NOMEMORY, |
| FACTORY_GENERR, |
| FACTORY_MAXIMUM_ERROR |
| }; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| |
| #endif /* NETSNMP_FACTORY_H */ |