summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Brej <cbrej@cs.man.ac.uk>2010-08-08 23:10:14 +0100
committerCharlie Brej <cbrej@cs.man.ac.uk>2010-08-08 23:10:14 +0100
commit65e7d666bc6b9b2cf9a6bb61e757cee02474fb66 (patch)
tree8a2a8244a2668940c8fe8d9ac13da55aa70b424e
parent1c861ee897410811db0053fa7930eb09e1ac65f2 (diff)
Add "record group" type and functions
-rw-r--r--src/libtidbit/tidbit-record.c51
-rw-r--r--src/libtidbit/tidbit-record.h16
-rw-r--r--src/libtidbit/tidbit.h8
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);