added NEW macro
This commit was SVN r440.
Этот коммит содержится в:
родитель
7fbc2cc7fc
Коммит
db71723f4a
@ -8,6 +8,7 @@
|
||||
#include <stdlib.h>
|
||||
#include "lam/types.h"
|
||||
#include "lam/atomic.h"
|
||||
#include "lam/mem/malloc.h"
|
||||
|
||||
/*
|
||||
*
|
||||
@ -28,16 +29,6 @@ typedef struct lam_class_info
|
||||
class_destroy_t cls_destroy;
|
||||
} lam_class_info_t;
|
||||
|
||||
#define OBJECT(obj) ((lam_object_t *)(obj))
|
||||
#define CREATE_OBJECT(obj, lam_obj_type, cls_ptr) \
|
||||
do { \
|
||||
obj = (lam_obj_type *)malloc(sizeof(lam_obj_type)); \
|
||||
if ( obj ) \
|
||||
{ \
|
||||
OBJECT(obj)->obj_class = cls_ptr; \
|
||||
OBJECT(obj)->obj_class->cls_init(OBJECT(obj)); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
*
|
||||
@ -71,6 +62,7 @@ extern lam_class_info_t lam_object_cls;
|
||||
} while (0)
|
||||
|
||||
#define SUPER_DESTROY(obj, super_cls) (super_cls)->cls_destroy(OBJECT(obj))
|
||||
#define OBJECT(obj) ((lam_object_t *)(obj))
|
||||
#define OBJ_RETAIN(obj) if ( obj ) lam_obj_retain(OBJECT(obj))
|
||||
#define OBJ_RELEASE(obj) if ( obj ) lam_obj_release(OBJECT(obj))
|
||||
|
||||
@ -83,6 +75,22 @@ typedef struct lam_object
|
||||
void lam_obj_init(lam_object_t *obj);
|
||||
void lam_obj_destroy(lam_object_t *obj);
|
||||
|
||||
|
||||
static inline lam_object_t* lam_create_object(size_t size, lam_class_info_t* class_info)
|
||||
{
|
||||
lam_object_t *obj = (lam_object_t*)LAM_MALLOC(size);
|
||||
if ( NULL != obj ) {
|
||||
obj->obj_class = class_info;
|
||||
obj->obj_class->cls_init(obj);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
#define NEW(obj_type, class_info) \
|
||||
((obj_type*)lam_create_object(sizeof(obj_type), class_info))
|
||||
#define CREATE_OBJECT(obj, obj_type, class_info) \
|
||||
(obj = (obj_type*)lam_create_object(sizeof(obj_type, class_info)))
|
||||
|
||||
/*
|
||||
* This function is used by inline functions later in this file, and
|
||||
* it must be defined by other header files later (eg., one of the
|
||||
|
@ -325,7 +325,7 @@ static int lam_free_lists_mem_pool_init(lam_free_lists_t *flist,
|
||||
STATIC_INIT(flist->fl_pool, &shmem_pool_cls);
|
||||
} else {
|
||||
/* process private memory allocation */
|
||||
CREATE_OBJECT(flist->fl_pool, lam_mem_pool_t, &mem_pool_cls);
|
||||
flist->fl_pool = NEW(lam_mem_pool_t, &mem_pool_cls);
|
||||
}
|
||||
|
||||
err = lam_mp_init_with(
|
||||
|
@ -23,7 +23,7 @@ void lam_mp_init(lam_mem_pool_t *pool)
|
||||
{
|
||||
SUPER_INIT(pool, mem_pool_cls.cls_parent);
|
||||
|
||||
CREATE_OBJECT(pool->mp_private_alloc, lam_allocator_t, &allocator_cls);
|
||||
pool->mp_private_alloc = NEW(lam_allocator_t, &allocator_cls);
|
||||
lam_mutex_init(&(pool->mp_lock));
|
||||
pool->mp_dev_alloc = NULL;
|
||||
}
|
||||
@ -32,7 +32,7 @@ void lam_mp_shared_init(lam_mem_pool_t *pool)
|
||||
{
|
||||
SUPER_INIT(pool, shmem_pool_cls.cls_parent);
|
||||
|
||||
CREATE_OBJECT(pool->mp_private_alloc, lam_allocator_t, &allocator_cls);
|
||||
pool->mp_private_alloc = NEW(lam_allocator_t, &allocator_cls);
|
||||
lam_mutex_init(&(pool->mp_lock));
|
||||
lam_alc_set_is_shared(pool->mp_private_alloc, 1);
|
||||
lam_alc_set_mem_prot(pool->mp_private_alloc, MMAP_SHARED_PROT);
|
||||
@ -282,7 +282,7 @@ void lam_fmp_init(lam_fixed_mpool_t *pool)
|
||||
{
|
||||
SUPER_INIT(pool, &lam_object_cls);
|
||||
|
||||
CREATE_OBJECT(pool->fmp_private_alloc, lam_allocator_t, &allocator_cls);
|
||||
pool->fmp_private_alloc = NEW(lam_allocator_t, &allocator_cls);
|
||||
lam_alc_set_is_shared(pool->fmp_private_alloc, 1);
|
||||
lam_alc_set_mem_prot(pool->fmp_private_alloc, MMAP_SHARED_PROT);
|
||||
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user