X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Frecord.c;h=5fb908d4cbe6772f14baaef49c11b30edf208bb2;hb=ab72dd93ca49a2d6cc55e643fdf83fbed439e45a;hp=277fd1b5c928342e4f0ec458ea9b60887a301bad;hpb=3670a21abc40afe784b2127c4d831471761747a0;p=pazpar2-moved-to-github.git diff --git a/src/record.c b/src/record.c index 277fd1b..5fb908d 100644 --- a/src/record.c +++ b/src/record.c @@ -1,7 +1,5 @@ -/* $Id: record.c,v 1.1 2007-04-20 14:37:17 marc Exp $ - Copyright (c) 2006-2007, Index Data. - -This file is part of Pazpar2. +/* This file is part of Pazpar2. + Copyright (C) 2006-2010 Index Data Pazpar2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -14,13 +12,10 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with Pazpar2; see the file LICENSE. If not, write to the -Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. - */ - -/* $Id: record.c,v 1.1 2007-04-20 14:37:17 marc Exp $ */ +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ #include @@ -28,70 +23,171 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #if HAVE_CONFIG_H -#include +#include #endif -//#define CONFIG_NOEXTERNS -#include "config.h" +#include "pazpar2_config.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_create(NMEM nmem, int num_metadata, int num_sortkeys, + struct client *client, int position) { struct record * record = 0; + int i = 0; // assert(nmem); record = nmem_malloc(nmem, sizeof(struct record)); record->next = 0; - // which client should I use for record->client = cl; ?? - record->client = 0; + record->client = client; 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; + + record->position = position; return record; } +struct record_metadata * record_metadata_create(NMEM nmem) +{ + struct record_metadata * rec_md + = nmem_malloc(nmem, sizeof(struct record_metadata)); + rec_md->next = 0; + rec_md->attributes = 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; + -struct record_metadata * record_add_metadata_fieldno(NMEM nmem, + // 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; + + field_id = conf_service_metadata_field_id(service, name); + + if (-1 == field_id) + return 0; - if (!record || fieldno < 0 - || !record->metadata || !record->metadata[fieldno] ) + return record_metadata_insert(nmem, &(record->metadata[field_id]), 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->sortkeys) return 0; - // construct new record_metadata - rmd = nmem_malloc(nmem, sizeof(struct record_metadata)); - rmd->data = data; - rmd->next = 0; + return data_types_assign(nmem, &(record->sortkeys[field_id]), data); +} - // still needs to be assigned .. - return rmd; + +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); +} + /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +