Skip to content

Commit

Permalink
Nearly there - added more array parts
Browse files Browse the repository at this point in the history
See title
  • Loading branch information
barbalet committed Nov 9, 2015
1 parent a3510b3 commit 6f2a586
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 14 deletions.
6 changes: 5 additions & 1 deletion sim/noble/noble.h
Expand Up @@ -359,8 +359,12 @@ n_file * obj_json(n_object * object);
n_object * obj_number(n_object * object, n_string name, n_int set_number);
n_object * obj_string(n_object * object, n_string name, n_string set_string);
n_object * obj_object(n_object * object, n_string name, n_object * set_object);
n_object * obj_array(n_object * object, n_string name, n_array * set_array);

void obj_free(n_object ** object);
n_array * obj_new_array(n_object * object);
void obj_add_array(n_array * array, n_object * object);

void obj_free(n_array ** array);

/** \brief sine and cosine conversation */
#define NEW_SD_MULTIPLE 26880
Expand Down
66 changes: 55 additions & 11 deletions sim/noble/object.c
Expand Up @@ -65,35 +65,33 @@ static n_object * object_new(void)
return return_object;
}

static void object_specific_free(n_object ** object)
static void object_primitive_free(n_array ** array)
{
n_object * referenced_object = * object;
switch(object_type(&referenced_object->primitive))
n_array * referenced_array = * array;
switch(object_type(referenced_array))
{
case OBJECT_ARRAY:
(void)SHOW_ERROR("No Object Implementation Yet");
break;
case OBJECT_OBJECT:
{
n_object * child = (n_object *)referenced_object->primitive.data;
n_array * child = (n_array *)referenced_array->data;
obj_free(&child);
}
default:
io_free((void **)object);
io_free((void **)array);
break;
}
}

void obj_free(n_object ** object)
void obj_free(n_array ** array)
{
if (*object)
if (*array)
{
n_object * next = (n_object *)((*object)->primitive.next);
n_array * next = (n_array *)((*array)->next);
if (next)
{
obj_free(&next);
}
object_specific_free(object);
object_primitive_free(array);
}
}

Expand Down Expand Up @@ -232,6 +230,52 @@ static n_object * object_get(n_object * object, n_string name)
return set_object;
}

static void object_add_array(n_array * element, n_object * object)
{
if (element)
{
io_erase((n_byte *)element, sizeof(n_array));
}
element->data = (n_string)object;
element->type = object->primitive.type;
}

n_array * obj_new_array(n_object * object)
{
n_array * return_array = io_new(sizeof(n_array));

object_add_array(return_array, object);

return return_array;
}

void obj_add_array(n_array * array, n_object * object)
{
n_array * entry = array;
n_array * return_array;
do{
if (entry->next)
{
entry = (n_array *)entry->next;
}
}while (entry->next);

return_array = io_new(sizeof(n_array));

object_add_array(return_array, object);

entry->next = return_array;
}

n_object * obj_array(n_object * object, n_string name, n_array * active_array)
{
n_object * set_object = object_get(object, name);

set_object->primitive.type = OBJECT_ARRAY;
set_object->primitive.data = (n_string)active_array;
return set_object;
}

n_object * obj_object(n_object * object, n_string name, n_object * active_object)
{
n_object * set_object = object_get(object, name);
Expand Down
4 changes: 2 additions & 2 deletions sim/test/test_object.c
Expand Up @@ -61,7 +61,7 @@ static void check_object(void)
{
n_object * new_object = obj_number(0L, "index", 1);
n_object * sub_object = obj_number(0L, "index", 2);

obj_number(sub_object, "top", 3);

obj_number(new_object, "top", 2);
Expand All @@ -73,7 +73,7 @@ static void check_object(void)

check_file_output(obj_json(new_object));
check_file_output(obj_json(sub_object));
obj_free(&new_object);
obj_free((n_array**)&new_object);
}

int main(int argc, const char * argv[])
Expand Down

0 comments on commit 6f2a586

Please sign in to comment.