-/* $Id: record.c,v 1.1 2007-04-20 14:37:17 marc Exp $
+/* $Id: record.c,v 1.8 2007-04-26 12:12:19 marc Exp $
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
02111-1307, USA.
*/
-/* $Id: record.c,v 1.1 2007-04-20 14:37:17 marc Exp $ */
+/* $Id: record.c,v 1.8 2007-04-26 12:12:19 marc Exp $ */
#include <string.h>
#include "record.h"
+
+union data_types * data_types_assign(NMEM nmem,
+ union data_types ** data1,
+ union data_types data2)
+{
+ // assert(nmem);
+
+ if (!data1)
+ return 0;
+
+ if (!*data1){
+ if (!nmem)
+ return 0;
+ else
+ *data1 = nmem_malloc(nmem, sizeof(union data_types));
+ }
+
+ **data1 = data2;
+ return *data1;
+}
+
+
struct record * record_create(NMEM nmem, int num_metadata, int num_sortkeys)
{
struct record * record = 0;
+ int i = 0;
// assert(nmem);
record->metadata
= nmem_malloc(nmem,
sizeof(struct record_metadata*) * num_metadata);
- memset(record->metadata, 0,
- sizeof(struct record_metadata*) * num_metadata);
+ for (i = 0; i < num_metadata; i++)
+ record->metadata[i] = 0;
record->sortkeys
= nmem_malloc(nmem,
sizeof(union data_types*) * num_sortkeys);
- memset(record->metadata, 0,
- sizeof(union data_types*) * num_sortkeys);
-
+ for (i = 0; i < num_sortkeys; i++)
+ record->sortkeys[i] = 0;
return record;
}
-struct record_metadata * record_add_metadata_fieldno(NMEM nmem,
+struct client * record_assign_client(struct record * record,
+ struct client * client)
+{
+ record->client = client;
+ return client;
+}
+
+
+struct record_metadata * record_metadata_create(NMEM nmem)
+{
+ struct record_metadata * rec_md
+ = nmem_malloc(nmem, sizeof(struct record_metadata));
+ rec_md->next = 0;
+ return rec_md;
+}
+
+
+struct record_metadata * record_metadata_insert(NMEM nmem,
+ struct record_metadata ** rmd,
+ union data_types data)
+{
+ struct record_metadata * tmp_rmd = 0;
+ // assert(nmem);
+
+ if(!rmd)
+ return 0;
+
+ // construct new record_metadata
+ tmp_rmd = nmem_malloc(nmem, sizeof(struct record_metadata));
+ tmp_rmd->data = data;
+
+
+ // insert in *rmd's place, moving *rmd one down the list
+ tmp_rmd->next = *rmd;
+ *rmd = tmp_rmd;
+
+ return *rmd;
+}
+
+struct record_metadata * record_add_metadata_field_id(NMEM nmem,
struct record * record,
- int fieldno,
+ int field_id,
union data_types data)
{
- struct record_metadata * rmd = 0;
+ if (field_id < 0 || !record || !record->metadata)
+ return 0;
+
+ return record_metadata_insert(nmem, &(record->metadata[field_id]), data);
+}
+
+
+struct record_metadata * record_add_metadata(NMEM nmem,
+ struct record * record,
+ struct conf_service * service,
+ const char * name,
+ union data_types data)
+{
+ int field_id = 0;
+
+ if (!record || !record->metadata || !service || !name)
+ return 0;
- if (!record || fieldno < 0
- || !record->metadata || !record->metadata[fieldno] )
+ field_id = conf_service_metadata_field_id(service, name);
+
+ if (-1 == field_id)
return 0;
+
+ return record_metadata_insert(nmem, &(record->metadata[field_id]), data);
+}
+
- // construct new record_metadata
- rmd = nmem_malloc(nmem, sizeof(struct record_metadata));
- rmd->data = data;
- rmd->next = 0;
- // still needs to be assigned ..
- return rmd;
+
+
+union data_types * record_assign_sortkey_field_id(NMEM nmem,
+ struct record * record,
+ int field_id,
+ union data_types data)
+{
+ if (field_id < 0 || !record || !record->sortkeys)
+ return 0;
+
+ return data_types_assign(nmem, &(record->sortkeys[field_id]), data);
+}
+
+
+
+union data_types * record_assign_sortkey(NMEM nmem,
+ struct record * record,
+ struct conf_service * service,
+ const char * name,
+ union data_types data)
+{
+ int field_id = 0;
+
+ if (!record || !service || !name)
+ return 0;
-};
+ field_id = conf_service_sortkey_field_id(service, name);
+
+ if (!(-1 < field_id) || !(field_id < service->num_sortkeys))
+ return 0;
+
+ return record_assign_sortkey_field_id(nmem, record, field_id, data);
+}
+
/*