blob: faf82a2274793cf0ec13530c2ddfaa20bbadb40d [file] [log] [blame]
#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 */