+
+struct conf_metadata * conf_metadata_assign(NMEM nmem,
+ struct conf_metadata * metadata,
+ const char *name,
+ enum conf_metadata_type type,
+ enum conf_metadata_merge merge,
+ int brief,
+ int termlist,
+ int rank,
+ int sortkey_offset)
+{
+ if (!nmem || !metadata || !name)
+ return 0;
+
+ metadata->name = nmem_strdup(nmem, name);
+ metadata->type = type;
+ metadata->merge = merge;
+ metadata->brief = brief;
+ metadata->termlist = termlist;
+ metadata->rank = rank;
+ metadata->sortkey_offset = sortkey_offset;
+
+ return metadata;
+}
+
+
+struct conf_sortkey * conf_sortkey_assign(NMEM nmem,
+ struct conf_sortkey * sortkey,
+ const char *name,
+ enum conf_sortkey_type type)
+{
+ if (!nmem || !sortkey || !name)
+ return 0;
+
+ sortkey->name = nmem_strdup(nmem, name);
+ sortkey->type = type;
+
+ return sortkey;
+}
+
+
+struct conf_service * conf_service_create(NMEM nmem,
+ int num_metadata, int num_sortkeys)
+{
+ struct conf_service * service = 0;
+
+ //assert(nmem);
+
+ service = nmem_malloc(nmem, sizeof(struct conf_service));
+
+ service->num_metadata = num_metadata;
+ service->metadata = 0;
+ if (service->num_metadata)
+ service->metadata
+ = nmem_malloc(nmem,
+ sizeof(struct conf_metadata) * service->num_metadata);
+ service->num_sortkeys = num_sortkeys;
+ service->sortkeys = 0;
+ if (service->num_sortkeys)
+ service->sortkeys
+ = nmem_malloc(nmem,
+ sizeof(struct conf_sortkey) * service->num_sortkeys);
+ return service;
+}
+
+struct conf_metadata* conf_service_add_metadata(NMEM nmem,
+ struct conf_service *service,
+ int position,
+ const char *name,
+ enum conf_metadata_type type,
+ enum conf_metadata_merge merge,
+ int brief,
+ int termlist,
+ int rank,
+ int sortkey_offset)
+{
+ struct conf_metadata * md = 0;
+
+ if (!service || !service->metadata || !service->num_metadata
+ || position < 0 || !(position < service->num_metadata))
+ return 0;
+
+ //md = &((service->metadata)[position]);
+ md = service->metadata + position;
+ md = conf_metadata_assign(nmem, md, name, type, merge,
+ brief, termlist, rank, sortkey_offset);
+ return md;
+}
+
+
+struct conf_sortkey * conf_service_add_sortkey(NMEM nmem,
+ struct conf_service *service,
+ int position,
+ const char *name,
+ enum conf_sortkey_type type)
+{
+ struct conf_sortkey * sk = 0;
+
+ if (!service || !service->sortkeys || !service->num_sortkeys
+ || position < 0 || !(position < service->num_sortkeys))
+ return 0;
+
+ //sk = &((service->sortkeys)[position]);
+ sk = service->sortkeys + position;
+ sk = conf_sortkey_assign(nmem, sk, name, type);
+
+ return sk;
+}
+
+
+
+
+