Browse Source

some more work on dyntype

master
Georg Hopp 14 years ago
parent
commit
e7ed789d0c
  1. 2
      .gitignore
  2. 7
      bigpoint_cclass.h
  3. 45
      bigpoint_dyntype.c
  4. 11
      bigpoint_dyntype.h

2
.gitignore

@ -1 +1,3 @@
.*.swp
*.o

7
bigpoint_cclass.h

@ -5,8 +5,11 @@
#include <sys/types.h>
#include <json/json.h>
typedef void (* ctor)(void*, va_list*);
typedef void (* dtor)(void*);
typedef void (* ctor)(void *, va_list *);
typedef void (* dtor)(void *);
typedef void (* jCtor)(void *, struct json_object *);
typedef struct json_object * (* jTo)(void *);
struct BIGPOINT_CCLASS {
size_t size;

45
bigpoint_dyntype.c

@ -13,16 +13,40 @@ __construct(struct BIGPOINT_DYNTYPE * _this, va_list * params)
_this->type = va_arg(* params, enum BIGPOINT_DYNTYPE_TYPES);
_this->size = va_arg(* params, size_t);
_this->data = calloc(_this->size, sizeof(char));
memcpy(_this->data, va_arg(* params, void *), _this->size);
switch(_this->type) {
case BIGPOINT_DYNTYPE_INT:
(_this->data)._int = va_arg(* params, long);
break;
default:
(_this->data)._object = NULL;
}
}
static
void
__jsonConst(struct BIGPOINT_DYNTYPE * _this, struct json_object * json)
{
switch (json_object_get_type(json)) {
case json_type_int:
_this->type = BIGPOINT_DYNTYPE_INT;
_this->size = sizeof(long);
(_this->data)._int = (long)json_object_get_int(json);
break;
default:
_this->type = BIGPOINT_DYNTYPE_NULL;
_this->size = 0;
(_this->data)._object = NULL;
}
}
static
void
__destruct(struct BIGPOINT_DYNTYPE * _this)
{
if (_this && _this->data) {
free(_this->data);
if (_this && BIGPOINT_DYNTYPE_OBJECT == _this->type && (_this->data)._object) {
free((_this->data)._object);
}
}
@ -39,22 +63,13 @@ __toJson(struct BIGPOINT_DYNTYPE * _this)
return json;
}
static
void
__jsonConst(struct BIGPOINT_DYNTYPE * _this, struct json_object * json)
{
/**
* @TODO: initialize by json....
*/
}
static const
struct BIGPOINT_CCLASS _bigpoint_dyntype = {
sizeof(struct BIGPOINT_DYNTYPE),
(ctor)__construct,
__jsonConst,
(jCtor)__jsonConst,
(dtor)__destruct,
__toJson
(jTo)__toJson
};
const struct BIGPOINT_CCLASS * const BIGPOINT_DYNTYPE = &_bigpoint_dyntype;

11
bigpoint_dyntype.h

@ -7,7 +7,8 @@
enum BIGPOINT_DYNTYPE_TYPES {
BIGPOINT_DYNTYPE_BOOLEAN = 0,
BIGPOINT_DYNTYPE_NULL = 0,
BIGPOINT_DYNTYPE_BOOLEAN,
BIGPOINT_DYNTYPE_INT,
BIGPOINT_DYNTYPE_FLOAT,
BIGPOINT_DYNTYPE_STRING,
@ -20,7 +21,13 @@ struct BIGPOINT_DYNTYPE {
const struct BIGPOINT_CCLASS * const class;
enum BIGPOINT_DYNTYPE_TYPES type;
size_t size;
void * data;
union _data {
unsigned char _boolean;
long _int;
double _float;
char * _string;
void * _object;
} data;
};
extern const struct BIGPOINT_CCLASS * const BIGPOINT_DYNTYPE;

Loading…
Cancel
Save