Browse Source

hash integrated in dyntype...array still missing, but for simple sas tokens this should be suitable.

master
Georg Hopp 14 years ago
parent
commit
262f8f651b
  1. 14
      bigpoint_dyntype.c
  2. 11
      bigpoint_hash.c
  3. 30
      tests/dyntype_test.c
  4. 5
      tests/hash_test.c

14
bigpoint_dyntype.c

@ -56,6 +56,12 @@ __jsonConst(struct BIGPOINT_DYNTYPE * _this, struct json_object * json)
}
break;
case json_type_object:
_this->type = BIGPOINT_DYNTYPE_HASH;
_this->size = sizeof(struct BIGPOINT_HASH *);
(_this->data)._hash = newFromJson(BIGPOINT_HASH, json);
break;
default:
_this->type = BIGPOINT_DYNTYPE_NULL;
_this->size = 0;
@ -73,6 +79,10 @@ __destruct(struct BIGPOINT_DYNTYPE * _this)
free((_this->data)._string);
break;
case BIGPOINT_DYNTYPE_HASH:
delete((_this->data)._hash);
break;
default:
break;
}
@ -94,6 +104,10 @@ __toJson(struct BIGPOINT_DYNTYPE * _this)
json = json_object_new_string((_this->data)._string);
break;
case BIGPOINT_DYNTYPE_HASH:
json = toJson((_this->data)._hash);
break;
default:
json = NULL;
}

11
bigpoint_hash.c

@ -52,6 +52,17 @@ static
struct json_object *
__toJson(struct BIGPOINT_HASH * _this)
{
size_t index;
struct json_object * json = json_object_new_object();
for (index = 0; index < _this->used; index ++) {
json_object_object_add(
json,
_this->keys[index],
toJson(_this->values[index]));
}
return json;
}
static const

30
tests/dyntype_test.c

@ -6,6 +6,9 @@
#include "../bigpoint_dyntype.h"
#define TEST_STR "this is a foo string"
#define TEST_KEY1 "key1"
#define TEST_KEY2 "key2"
#define TEST_KEY3 "key3"
int
@ -43,6 +46,33 @@ main(int argc, char * argv[])
delete(dyn);
json_object_put(json);
json = json_tokener_parse("{\"key1\":123,\"key2\":321,\"key3\":\"" TEST_STR "\"}");
dyn = newFromJson(BIGPOINT_DYNTYPE, json);
json_object_put(json);
json = toJson(dyn);
printf("%s\n", json_object_to_json_string(json));
json_object_put(json);
if (BIGPOINT_DYNTYPE_HASH == dyn->type) {
struct BIGPOINT_HASH * hash = (dyn->data)._hash;
struct BIGPOINT_DYNTYPE * value;
value = bigpoint_hash_get(hash, TEST_KEY1);
printf("%d\n", (value->data)._int);
delete(value);
value = bigpoint_hash_get(hash, TEST_KEY2);
printf("%d\n", (value->data)._int);
delete(value);
value = bigpoint_hash_get(hash, TEST_KEY3);
printf("%s\n", (value->data)._string);
delete(value);
}
delete(dyn);
return 0;
}

5
tests/hash_test.c

@ -3,7 +3,6 @@
#include <json/json.h>
#include "../bigpoint_cclass.h"
#include "../bigpoint_dyntype.h"
#include "../bigpoint_hash.h"
@ -24,6 +23,10 @@ main(int argc, char * argv[])
dyn = new(BIGPOINT_DYNTYPE, BIGPOINT_DYNTYPE_INT, sizeof(int), 321);
bigpoint_hash_set(hash, TEST_KEY2, dyn);
json = toJson(hash);
printf("%s\n", json_object_to_json_string(json));
json_object_put(json);
dyn = bigpoint_hash_get(hash, TEST_KEY1);
printf("%d\n", (dyn->data)._int);
delete(dyn);

Loading…
Cancel
Save