X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Frecord.c;h=4a9aac63328b6c42be1b46ac642d256727c9df8f;hb=9ee952e04b4765c49f3b767813f8c8d5579ae005;hp=2d830122f49b7e61e29c5bac3efdba95c45f580a;hpb=a715ede1c0c1e8cb98b65b6ad78b7193222eff05;p=pazpar2-moved-to-github.git diff --git a/src/record.c b/src/record.c index 2d83012..4a9aac6 100644 --- a/src/record.c +++ b/src/record.c @@ -1,4 +1,4 @@ -/* $Id: record.c,v 1.2 2007-04-23 08:48:50 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. @@ -19,7 +19,7 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: record.c,v 1.2 2007-04-23 08:48:50 marc Exp $ */ +/* $Id: record.c,v 1.8 2007-04-26 12:12:19 marc Exp $ */ #include @@ -36,9 +36,32 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #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); @@ -51,20 +74,36 @@ struct record * record_create(NMEM nmem, int num_metadata, int num_sortkeys) 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 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) @@ -80,11 +119,22 @@ struct record_metadata * record_metadata_insert(NMEM nmem, tmp_rmd->data = data; - // insert in *rmd's place + // insert in *rmd's place, moving *rmd one down the list tmp_rmd->next = *rmd; *rmd = tmp_rmd; - return tmp_rmd; + return *rmd; +} + +struct record_metadata * record_add_metadata_field_id(NMEM nmem, + struct record * record, + int field_id, + union data_types data) +{ + if (field_id < 0 || !record || !record->metadata) + return 0; + + return record_metadata_insert(nmem, &(record->metadata[field_id]), data); } @@ -99,7 +149,7 @@ struct record_metadata * record_add_metadata(NMEM nmem, if (!record || !record->metadata || !service || !name) return 0; - field_id = conf_service_field_id(service, name); + field_id = conf_service_metadata_field_id(service, name); if (-1 == field_id) return 0; @@ -109,16 +159,41 @@ struct record_metadata * record_add_metadata(NMEM nmem, -struct record_metadata * record_add_metadata_field_id(NMEM nmem, - struct record * record, - int field_id, - union data_types data) + + + +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->metadata) + if (field_id < 0 || !record || !record->sortkeys) return 0; - return record_metadata_insert(nmem, &(record->metadata[field_id]), data); -}; + 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); +} + /*