#include #include #include #include #include "bigpoint_dyntype.h" static void __construct(struct BIGPOINT_DYNTYPE * _this, va_list * params) { _this->type = va_arg(* params, enum BIGPOINT_DYNTYPE_TYPES); _this->size = va_arg(* params, size_t); 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(int); (_this->data)._int = (int)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 && BIGPOINT_DYNTYPE_OBJECT == _this->type && (_this->data)._object) { free((_this->data)._object); } } static struct json_object * __toJson(struct BIGPOINT_DYNTYPE * _this) { struct json_object * json = NULL; switch(_this->type) { case BIGPOINT_DYNTYPE_INT: json = json_object_new_int((_this->data)._int); break; default: json = NULL; } return json; } static const struct BIGPOINT_CCLASS _bigpoint_dyntype = { sizeof(struct BIGPOINT_DYNTYPE), (ctor)__construct, (jCtor)__jsonConst, (dtor)__destruct, (jTo)__toJson }; const struct BIGPOINT_CCLASS * const BIGPOINT_DYNTYPE = &_bigpoint_dyntype; // vim: set et ts=4 sw=4: