diff options
author | Charlie Brej <cbrej@cs.man.ac.uk> | 2010-08-08 23:10:14 +0100 |
---|---|---|
committer | Charlie Brej <cbrej@cs.man.ac.uk> | 2010-08-08 23:10:14 +0100 |
commit | 65e7d666bc6b9b2cf9a6bb61e757cee02474fb66 (patch) | |
tree | 8a2a8244a2668940c8fe8d9ac13da55aa70b424e | |
parent | 1c861ee897410811db0053fa7930eb09e1ac65f2 (diff) |
Add "record group" type and functions
-rw-r--r-- | src/libtidbit/tidbit-record.c | 51 | ||||
-rw-r--r-- | src/libtidbit/tidbit-record.h | 16 | ||||
-rw-r--r-- | src/libtidbit/tidbit.h | 8 |
3 files changed, 72 insertions, 3 deletions
diff --git a/src/libtidbit/tidbit-record.c b/src/libtidbit/tidbit-record.c index 74a230d..2f70c94 100644 --- a/src/libtidbit/tidbit-record.c +++ b/src/libtidbit/tidbit-record.c @@ -122,6 +122,19 @@ static PtrTidbitRecordElement tidbit_record_get_element_by_key (PtrTidbitRecord char* tidbit_record_get_element_value_by_key (PtrTidbitRecord record, char* key) { + if (g_str_has_prefix(key, TIDBIT_RECORD_ELEMENT_KEY_BASE)){ + if (!strcmp(key, TIDBIT_RECORD_ELEMENT_KEY_TABLE)) return + record->table_name; + else if (!strcmp(key, TIDBIT_RECORD_ELEMENT_KEY_USERKEY)) + return record->user_name; +// else if (!strcmp(key, TIDBIT_RECORD_ELEMENT_KEY_CREATED) +// return record->start_time; //FIXME +// else if (!strcmp(key, TIDBIT_RECORD_ELEMENT_KEY_EXPIRES) +// return record->end_time; + else if (!strcmp(key, TIDBIT_RECORD_ELEMENT_KEY_SIGNED)) + return record->guid->string; + return NULL; + } PtrTidbitRecordElement element = tidbit_record_get_element_by_key (record, key); if (element) return element->value; @@ -295,3 +308,41 @@ PtrTidbitRecord tidbit_record_from_raw (char* raw) record->status = TIDBIT_RECORD_STATUS_SIGNED; return record; } + +PtrTidbitRecordGroup tidbit_record_group_new (void) +{ + PtrTidbitRecordGroup record_group = g_new(TidbitRecordGroup, 1); + record_group->ref_count = 1; + record_group->records = NULL; + return record_group; +} + +static void tidbit_record_group_free (PtrTidbitRecordGroup record_group) +{ + g_assert(!record_group->ref_count); + g_free(record_group); + //FIXME free list +} + +void tidbit_record_group_ref (PtrTidbitRecordGroup record_group) +{ + record_group->ref_count++; +} + +void tidbit_record_group_unref (PtrTidbitRecordGroup record_group) +{ + record_group->ref_count--; + if (!record_group->ref_count) + tidbit_record_group_free (record_group); +} + +void tidbit_record_group_add_record (PtrTidbitRecordGroup record_group, PtrTidbitRecord record) +{ + tidbit_record_ref (record); + record_group->records = g_list_append(record_group->records, record); +} + +unsigned int tidbit_record_group_length (PtrTidbitRecordGroup record_group) +{ + return g_list_length (record_group->records); +} diff --git a/src/libtidbit/tidbit-record.h b/src/libtidbit/tidbit-record.h index 34f111f..70d7010 100644 --- a/src/libtidbit/tidbit-record.h +++ b/src/libtidbit/tidbit-record.h @@ -34,9 +34,9 @@ typedef struct TidbitRecordElement{ } TidbitRecordElement, *PtrTidbitRecordElement; typedef enum { -TIDBIT_RECORD_STATUS_ERROR, -TIDBIT_RECORD_STATUS_NEW, -TIDBIT_RECORD_STATUS_SIGNED, + TIDBIT_RECORD_STATUS_ERROR, + TIDBIT_RECORD_STATUS_NEW, + TIDBIT_RECORD_STATUS_SIGNED, } TidbitRecordStatus; struct _TidbitRecord{ @@ -51,6 +51,11 @@ struct _TidbitRecord{ char* raw; }; +struct _TidbitRecordGroup{ + GList* records; + int ref_count; +}; + /* In tidbit.h PtrTidbitRecord tidbit_record_new (char* table_name); void tidbit_record_ref (PtrTidbitRecord record); @@ -59,6 +64,11 @@ void tidbit_record_set_ttl (PtrTidbitRecord record, int seconds, int days, int y void tidbit_record_add_element (PtrTidbitRecord record, char* key, char* value, TidbitRecordElementType type); char* tidbit_record_get_element_value_by_key (PtrTidbitRecord record, char* key); void tidbit_record_sign (PtrTidbitRecord record, PtrTidbitKey key); +PtrTidbitRecordGroup tidbit_record_group_new (void); +void tidbit_record_group_ref (PtrTidbitRecordGroup record_group); +void tidbit_record_group_unref (PtrTidbitRecordGroup record_group); +void tidbit_record_group_add_record (PtrTidbitRecordGroup record_group, PtrTidbitRecord record); +unsigned int tidbit_record_group_length (PtrTidbitRecordGroup record_group); */ char* tidbit_record_get_raw (PtrTidbitRecord record); diff --git a/src/libtidbit/tidbit.h b/src/libtidbit/tidbit.h index 3933bbc..e9080bd 100644 --- a/src/libtidbit/tidbit.h +++ b/src/libtidbit/tidbit.h @@ -28,6 +28,7 @@ typedef struct _TidbitDatabase TidbitDatabase, *PtrTidbitDatabase; typedef struct _TidbitKey TidbitKey, *PtrTidbitKey; typedef struct _TidbitQuery TidbitQuery, *PtrTidbitQuery; typedef struct _TidbitRecord TidbitRecord, *PtrTidbitRecord; +typedef struct _TidbitRecordGroup TidbitRecordGroup, *PtrTidbitRecordGroup; typedef struct _TidbitGuid TidbitGuid, *PtrTidbitGuid; typedef struct _TidbitGuidGroup TidbitGuidGroup, *PtrTidbitGuidGroup; @@ -57,12 +58,19 @@ void tidbit_record_set_ttl (PtrTidbitRecord record, int seconds, int days, int y void tidbit_record_add_element (PtrTidbitRecord record, char* key, char* value, TidbitRecordElementType type); char* tidbit_record_get_element_value_by_key (PtrTidbitRecord record, char* key); void tidbit_record_sign (PtrTidbitRecord record, PtrTidbitKey key); +PtrTidbitRecordGroup tidbit_record_group_new (void); +void tidbit_record_group_ref (PtrTidbitRecordGroup record_group); +void tidbit_record_group_unref (PtrTidbitRecordGroup record_group); +void tidbit_record_group_add_record (PtrTidbitRecordGroup record_group, PtrTidbitRecord record); +unsigned int tidbit_record_group_length (PtrTidbitRecordGroup record_group); + void tidbit_database_ref (PtrTidbitDatabase database); void tidbit_database_unref (PtrTidbitDatabase database); unsigned int tidbit_database_insert (PtrTidbitDatabase database, PtrTidbitRecord record); PtrTidbitRecord tidbit_database_fetch (PtrTidbitDatabase database, PtrTidbitGuid guid); PtrTidbitGuidGroup tidbit_database_query (PtrTidbitDatabase database, PtrTidbitQuery query); +PtrTidbitRecordGroup tidbit_database_record_query (PtrTidbitDatabase database, PtrTidbitQuery query); PtrTidbitDatabase tidbit_database_dbus_new (void); PtrTidbitDatabase tidbit_database_mem_new (void); |