forked from lei.chen/myxce
use nix build & meson & zlog
This commit is contained in:
parent
0123623742
commit
346768a144
60 changed files with 13739 additions and 0 deletions
78
src/include/objmgr.h
Normal file
78
src/include/objmgr.h
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
#if !defined(__OBJMGR_H__)
|
||||
|
||||
#define __OBJMGR_H__
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "htab.h"
|
||||
#include "mylock.h"
|
||||
#include "zarray.h"
|
||||
|
||||
#define OBJ_MAGIC (0x4a424f58)
|
||||
|
||||
#define OBJREF_NOP (0) /* ref obj without lock, \
|
||||
* just keep object alive */
|
||||
#define OBJREF_READ (1) /* ref obj with read lock */
|
||||
#define OBJREF_UPDATE (2) /* ref obj with write lock */
|
||||
|
||||
typedef void* (*obj_create_fn_t)(void*, void*,
|
||||
va_list);
|
||||
typedef void (*obj_fini_fn_t)(void*);
|
||||
typedef void (*objtype_fini_fn_t)(void*);
|
||||
|
||||
typedef struct {
|
||||
char* type; /* name of type */
|
||||
mylock_t lock;
|
||||
obj_create_fn_t fn_create; /* function to initialize object */
|
||||
obj_fini_fn_t fn_fini; /* function to finalize obj */
|
||||
objtype_fini_fn_t fn_type_fini; /* function to finalize typeinfo */
|
||||
void* typedata; /* extra information for type */
|
||||
} objtype_t;
|
||||
|
||||
typedef struct {
|
||||
uint32_t magic;
|
||||
uint32_t nref;
|
||||
my_rwlock_t rwlock;
|
||||
mylock_t lock;
|
||||
objtype_t* type;
|
||||
int32_t exdata;
|
||||
uint32_t nread : 28;
|
||||
uint32_t nwrite : 4;
|
||||
} myobj_t;
|
||||
|
||||
typedef struct {
|
||||
mylock_t lock;
|
||||
htab_t names;
|
||||
zarray_t types;
|
||||
} objmgr_t;
|
||||
|
||||
#define MYOBJ_TO_OBJ(type, myobj) \
|
||||
((type)(((char*)myobj) + sizeof(myobj_t)))
|
||||
|
||||
#define TO_MYOBJ(obj) \
|
||||
((myobj_t*)(((char*)obj) - sizeof(myobj_t)))
|
||||
|
||||
#define DEREF_OBJ(obj) \
|
||||
if ((obj) != NULL) { \
|
||||
obj_deref(obj); \
|
||||
(obj) = NULL; \
|
||||
}
|
||||
|
||||
extern int objmgr_init(objmgr_t*);
|
||||
extern void objmgr_fini(objmgr_t*);
|
||||
extern int objmgr_register(objmgr_t*, objtype_t*);
|
||||
extern int obj_init(objmgr_t*, objtype_t*, int32_t, myobj_t*);
|
||||
extern void* create_obj_by_typeid(objmgr_t*, int, ...);
|
||||
extern void* create_obj_by_typename(objmgr_t*, char*, ...);
|
||||
extern void* obj_ref(void*, int);
|
||||
extern void obj_deref(void*);
|
||||
extern int typeid_of_name(objmgr_t*, char*);
|
||||
extern objmgr_t* objmgr_get_default();
|
||||
extern int objmgr_set_default(objmgr_t*);
|
||||
extern myobj_t* obj_alloc(size_t);
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue