Added types for metadata, objects and a draft for extended metadata
This commit is contained in:
174
src/modb_types.c
174
src/modb_types.c
@@ -138,4 +138,178 @@ void freeGroups(struct group_t ***groups_ptr, size_t n_groups)
|
||||
free(groups);
|
||||
*groups_ptr = 0;
|
||||
}
|
||||
|
||||
|
||||
struct metadata_t *allocMetadata(void)
|
||||
{
|
||||
struct metadata_t *metadata;
|
||||
|
||||
metadata = malloc(sizeof(struct metadata_t));
|
||||
if (metadata == 0) {
|
||||
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||
}
|
||||
memset(metadata, 0, sizeof(struct metadata_t));
|
||||
|
||||
return metadata;
|
||||
}
|
||||
struct metadata_t **allocMetadataList(size_t n_metadatas)
|
||||
{
|
||||
struct metadata_t **metadatas;
|
||||
|
||||
metadatas = (struct metadata_t **)malloc(sizeof(struct metadata_t *) * n_metadatas);
|
||||
if (metadatas == 0) {
|
||||
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
memset(metadatas, 0, sizeof(struct metadata_t *) * n_metadatas);
|
||||
|
||||
return metadatas;
|
||||
}
|
||||
void freeMetadata(struct metadata_t **metadata_ptr)
|
||||
{
|
||||
struct metadata_t *metadata = *metadata_ptr;
|
||||
|
||||
if (metadata->ext != 0) {
|
||||
freeMetadataExt(&metadata->ext);
|
||||
}
|
||||
|
||||
if (metadata->object != 0) {
|
||||
freeObject(&metadata->object);
|
||||
}
|
||||
|
||||
if (metadata->n_groups > 0) {
|
||||
if (metadata->group_ids != 0) {
|
||||
free(metadata->group_ids);
|
||||
metadata->group_ids = 0;
|
||||
}
|
||||
if (metadata->groups != 0) {
|
||||
freeGroups(&metadata->groups, metadata->n_groups);
|
||||
}
|
||||
metadata->n_groups = 0;
|
||||
}
|
||||
|
||||
if (metadata->owner != 0) {
|
||||
freeUser(&metadata->owner);
|
||||
}
|
||||
|
||||
if (metadata->title != 0) {
|
||||
free(metadata->title);
|
||||
metadata->title = 0;
|
||||
}
|
||||
|
||||
free(metadata);
|
||||
*metadata_ptr = 0;
|
||||
}
|
||||
void freeMetadataList(struct metadata_t ***metadata_list_ptr, size_t n_metadatas)
|
||||
{
|
||||
size_t idx;
|
||||
struct metadata_t **metadatas_list= *metadata_list_ptr;
|
||||
|
||||
for (idx = 0; idx < n_metadatas; idx++) {
|
||||
if (*(metadatas_list + idx) != 0) {
|
||||
freeMetadata((metadatas_list + idx));
|
||||
}
|
||||
}
|
||||
|
||||
free(metadatas_list);
|
||||
*metadata_list_ptr = 0;
|
||||
}
|
||||
|
||||
struct object_t *allocObject(void)
|
||||
{
|
||||
struct object_t *object;
|
||||
|
||||
object = malloc(sizeof(struct object_t));
|
||||
if (object == 0) {
|
||||
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||
}
|
||||
memset(object, 0, sizeof(struct object_t));
|
||||
|
||||
return object;
|
||||
}
|
||||
struct object_t **allocObjects(size_t n_objects)
|
||||
{
|
||||
struct object_t **objects;
|
||||
|
||||
objects = (struct object_t **)malloc(sizeof(struct object_t *) * n_objects);
|
||||
if (objects == 0) {
|
||||
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
memset(objects, 0, sizeof(struct object_t *) * n_objects);
|
||||
|
||||
return objects;
|
||||
}
|
||||
void freeObject(struct object_t **object_ptr)
|
||||
{
|
||||
struct object_t *object = *object_ptr;
|
||||
|
||||
if (object->data != 0) {
|
||||
free(object->data);
|
||||
object->data = 0;
|
||||
}
|
||||
|
||||
free(object);
|
||||
*object_ptr = 0;
|
||||
}
|
||||
void freeObjects(struct object_t ***objects_ptr, size_t n_objects)
|
||||
{
|
||||
size_t idx;
|
||||
struct object_t **objects = *objects_ptr;
|
||||
|
||||
for (idx = 0; idx < n_objects; idx++) {
|
||||
if (*(objects + idx) != 0) {
|
||||
freeObject(objects + idx);
|
||||
}
|
||||
}
|
||||
|
||||
free(objects);
|
||||
*objects_ptr = 0;
|
||||
}
|
||||
|
||||
struct metadata_ext_t *allocMetadataExt(void)
|
||||
{
|
||||
struct metadata_ext_t *metadata_ext;
|
||||
|
||||
metadata_ext = malloc(sizeof(struct metadata_ext_t));
|
||||
if (metadata_ext == 0) {
|
||||
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||
}
|
||||
memset(metadata_ext, 0, sizeof(struct metadata_ext_t));
|
||||
|
||||
return metadata_ext;
|
||||
}
|
||||
struct metadata_ext_t **allocMetadataExts(size_t n_metadata_exts)
|
||||
{
|
||||
struct metadata_ext_t **metadata_exts;
|
||||
|
||||
metadata_exts = (struct metadata_ext_t **)malloc(sizeof(struct metadata_ext_t *) * n_metadata_exts);
|
||||
if (metadata_exts == 0) {
|
||||
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
memset(metadata_exts, 0, sizeof(struct metadata_ext_t *) * n_metadata_exts);
|
||||
|
||||
return metadata_exts;
|
||||
}
|
||||
void freeMetadataExt(struct metadata_ext_t **metadata_ext_ptr)
|
||||
{
|
||||
struct metadata_ext_t *metadata_ext = *metadata_ext_ptr;
|
||||
|
||||
free(metadata_ext);
|
||||
*metadata_ext_ptr = 0;
|
||||
}
|
||||
void freeMetadataExts(struct metadata_ext_t ***metadata_exts_ptr, size_t n_metadata_exts)
|
||||
{
|
||||
size_t idx;
|
||||
struct metadata_ext_t **metadata_exts = *metadata_exts_ptr;
|
||||
|
||||
for (idx = 0; idx < n_metadata_exts; idx++) {
|
||||
if (*(metadata_exts + idx) != 0) {
|
||||
freeMetadataExt(metadata_exts + idx);
|
||||
}
|
||||
}
|
||||
|
||||
free(metadata_exts);
|
||||
*metadata_exts_ptr = 0;
|
||||
}
|
||||
|
||||
@@ -43,16 +43,95 @@ struct group_t {
|
||||
size_t n_members;
|
||||
};
|
||||
|
||||
struct metadata_t {
|
||||
unsigned int id;
|
||||
|
||||
char *type;
|
||||
size_t type_len;
|
||||
|
||||
char *title;
|
||||
size_t title_len;
|
||||
|
||||
unsigned int owner_id;
|
||||
struct user_t *owner;
|
||||
|
||||
int64_t created_on;
|
||||
int64_t updated_on;
|
||||
int64_t deleted_on;
|
||||
|
||||
unsigned int *group_ids;
|
||||
struct group_t **groups;
|
||||
size_t n_groups;
|
||||
|
||||
struct object_t *object;
|
||||
struct metadata_ext_t *ext;
|
||||
};
|
||||
|
||||
struct object_t {
|
||||
unsigned int id;
|
||||
|
||||
char *data;
|
||||
size_t data_len;
|
||||
};
|
||||
|
||||
struct metadata_ext_t {
|
||||
unsigned int id;
|
||||
|
||||
// TODO: dynamic extended metadata definition
|
||||
// struct metadata_ext_value_t **meta_ext;
|
||||
// size_t n_meta_ext;
|
||||
};
|
||||
|
||||
//struct metadata_ext_value_t {
|
||||
// char *key;
|
||||
// enum e_column_type_t type;
|
||||
// union {
|
||||
// void *vptr;_ptr
|
||||
|
||||
// int8_t int8;
|
||||
// uint8_t uint8;
|
||||
|
||||
// int16_t int16;
|
||||
// uint16_t uint16;
|
||||
|
||||
// int32_t int32;
|
||||
// uint32_t uint32;
|
||||
|
||||
// int64_t int64;
|
||||
// uint64_t uint64;
|
||||
|
||||
// float flt;
|
||||
// double dbl;
|
||||
|
||||
// char *ptr_str;
|
||||
// } value;
|
||||
// size_t value_len;
|
||||
//};
|
||||
|
||||
struct user_t *allocUser(void);
|
||||
struct user_t **allocUsers(size_t n_users);
|
||||
void freeUser(struct user_t **user);
|
||||
void freeUsers(struct user_t **users, size_t n_users);
|
||||
void freeUsers(struct user_t ***users_ptr, size_t n_users);
|
||||
|
||||
struct group_t *allocGroup(void);
|
||||
struct group_t **allocGroups(size_t n_groups);
|
||||
void freeGroup(struct group_t **group);
|
||||
void freeGroups(struct group_t **groups, size_t n_groups);
|
||||
void freeGroups(struct group_t ***groups_ptr, size_t n_groups);
|
||||
|
||||
struct metadata_t *allocMetadata(void);
|
||||
struct metadata_t **allocMetadataList(size_t n_metadatas);
|
||||
void freeMetadata(struct metadata_t **metadata);
|
||||
void freeMetadataList(struct metadata_t ***metadata_list_ptr, size_t n_metadatas);
|
||||
|
||||
struct object_t *allocObject(void);
|
||||
struct object_t **allocObjects(size_t n_objects);
|
||||
void freeObject(struct object_t **object);
|
||||
void freeObjects(struct object_t ***objects_ptr, size_t n_objects);
|
||||
|
||||
struct metadata_ext_t *allocMetadataExt(void);
|
||||
struct metadata_ext_t **allocMetadataExts(size_t n_metadata_exts);
|
||||
void freeMetadataExt(struct metadata_ext_t **metadata_ext);
|
||||
void freeMetadataExts(struct metadata_ext_t ***metadata_exts_ptr, size_t n_metadata_exts);
|
||||
|
||||
|
||||
#endif // H__MODB_TYPES__
|
||||
|
||||
Reference in New Issue
Block a user