- improve the interface of rtti to pass meta_obj_t* as parameter of type function to easy to access private/data
- rename some macro with RTTI - add RTTI_MAGIC in object header - add new rtti api
This commit is contained in:
parent
c8c1749347
commit
f78ed03591
15 changed files with 252 additions and 114 deletions
|
|
@ -11,10 +11,11 @@ typedef struct {
|
|||
|
||||
static size_t my_array_datasize(va_list ap) { return sizeof(myArray_t); }
|
||||
|
||||
static int my_array_init(myArray_t* a, va_list ap)
|
||||
static int my_array_init(meta_obj_t* obj, va_list ap)
|
||||
{
|
||||
int count;
|
||||
int i;
|
||||
myArray_t* a = RTTI_OBJ_TO_DATA(myArray_t, obj);
|
||||
int count;
|
||||
int i;
|
||||
|
||||
count = va_arg(ap, int);
|
||||
if (count <= 0) {
|
||||
|
|
@ -34,42 +35,43 @@ static int my_array_init(myArray_t* a, va_list ap)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void my_array_destroy(myArray_t* a)
|
||||
static void my_array_destroy(meta_obj_t* obj)
|
||||
{
|
||||
myArray_t* a = RTTI_OBJ_TO_DATA(myArray_t, obj);
|
||||
if (a->data != NULL) {
|
||||
free(a->data);
|
||||
a->data = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static int my_array_make_iter(iterator_t* iter, var obj)
|
||||
static int my_array_make_iter(iterator_t* iter)
|
||||
{
|
||||
iter->data = (void*)(long)0;
|
||||
|
||||
return ITER_OK;
|
||||
return RTTI_ITER_OK;
|
||||
}
|
||||
|
||||
static int my_array_iter_next(iterator_t* iter, void** data)
|
||||
{
|
||||
myArray_t* a = iter->v;
|
||||
myArray_t* a = RTTI_OBJ_TO_DATA(myArray_t, iter->obj);
|
||||
int idx = (int)(long)iter->data;
|
||||
|
||||
if (idx >= a->count) {
|
||||
/* no data */
|
||||
return ITER_NO_DATA;
|
||||
return RTTI_ITER_NO_DATA;
|
||||
}
|
||||
|
||||
*data = (void*)(long)a->data[idx];
|
||||
iter->data = (void*)(long)(idx + 1);
|
||||
|
||||
return ITER_OK;
|
||||
return RTTI_ITER_OK;
|
||||
}
|
||||
|
||||
static int my_array_iter_reset(iterator_t* iter)
|
||||
{
|
||||
iter->data = (void*)(long)0;
|
||||
|
||||
return ITER_OK;
|
||||
return RTTI_ITER_OK;
|
||||
}
|
||||
|
||||
static void my_array_iter_destroy(iterator_t* iter) { return; }
|
||||
|
|
@ -95,7 +97,7 @@ static void test_array_iter(void)
|
|||
void* data;
|
||||
|
||||
TEST_ASSERT_TRUE(array != NULL);
|
||||
|
||||
TEST_ASSERT_TRUE(is_rtti_obj(array) == 1);
|
||||
rc = iter_make(&it, array);
|
||||
TEST_ASSERT_TRUE(rc == 1);
|
||||
|
||||
|
|
@ -120,7 +122,7 @@ static void test_array_iter(void)
|
|||
TEST_ASSERT_TRUE((int)(long)data == 4);
|
||||
|
||||
rc = iter_next(&it, (void**)&data);
|
||||
TEST_ASSERT_TRUE(rc == ITER_NO_DATA);
|
||||
TEST_ASSERT_TRUE(rc == RTTI_ITER_NO_DATA);
|
||||
|
||||
sum = 0;
|
||||
rc = iter_reset(&it);
|
||||
|
|
@ -129,7 +131,7 @@ static void test_array_iter(void)
|
|||
for (;;) {
|
||||
rc = iter_next(&it, &data);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
if (rc == ITER_NO_DATA) {
|
||||
if (rc == RTTI_ITER_NO_DATA) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue