- 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
|
|
@ -1,6 +1,7 @@
|
|||
librtti_test_srcs = [
|
||||
'test.c',
|
||||
'test_iter.c',
|
||||
'test_invalid_obj.c',
|
||||
]
|
||||
|
||||
unity_dep = dependency('unity')
|
||||
|
|
|
|||
|
|
@ -5,17 +5,17 @@
|
|||
|
||||
void setUp(void)
|
||||
{
|
||||
printf("\n");
|
||||
return;
|
||||
}
|
||||
|
||||
void tearDown(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf(">>");
|
||||
return;
|
||||
}
|
||||
|
||||
extern void test_iter(void);
|
||||
extern void test_invalid(void);
|
||||
|
||||
#define TEST(x) x()
|
||||
|
||||
|
|
@ -24,6 +24,7 @@ int main(int argc, char* argv[])
|
|||
UNITY_BEGIN();
|
||||
|
||||
TEST(test_iter);
|
||||
|
||||
TEST(test_invalid);
|
||||
|
||||
return UNITY_END();
|
||||
}
|
||||
|
|
|
|||
26
testsuite/test_invalid_obj.c
Normal file
26
testsuite/test_invalid_obj.c
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <unity/unity.h>
|
||||
|
||||
#include "rtti.h"
|
||||
|
||||
static void test_c_str_invalid(void)
|
||||
{
|
||||
char* hello = "Hello, world";
|
||||
|
||||
TEST_ASSERT_TRUE(is_rtti_obj(hello) == 0);
|
||||
}
|
||||
|
||||
static void test_intptr_invalid(void) {
|
||||
int x = 20;
|
||||
|
||||
TEST_ASSERT_TRUE(is_rtti_obj(&x) == 0);
|
||||
}
|
||||
|
||||
void test_invalid(void)
|
||||
{
|
||||
printf("\n invalid object\n\n");
|
||||
|
||||
RUN_TEST(test_c_str_invalid);
|
||||
RUN_TEST(test_intptr_invalid);
|
||||
}
|
||||
|
|
@ -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