31 if (!gb_item_data) error =
"Missing parent container";
98 GB_export_errorf(
"Could not find %s with %s '%s'", itemname, id_field, id_value);
122 return GB_entry(gb_species_data,
"species");
160 return GB_entry(gb_sai_data,
"extended");
200 gb_item_data =
GB_entry(gb_parent_of_container, item_container_name);
233 char *generated_id = ARB_alloc<char>(strlen(default_id)+20);
236 #define GENERATE_ID(num) sprintf(generated_id, "%s%zu", default_id, num);
248 max_num += num_items;
251 }
while (gb_item && max_num >= num_items);
253 if (max_num<num_items) {
260 strcpy(generated_id, uid);
265 while ((max_num-min_num)>1) {
266 size_t mid = (min_num+max_num)/2;
267 gb_assert(mid != min_num && mid != max_num);
272 if (gb_item) min_num =
mid;
279 unique_id = generated_id;
315 else if (flag == 3) {
344 if (condition(gb_species, cd)) {
350 gb_assert(flag == 0 || flag == 1 || flag == 3);
357 if (curr_flag != flag && condition(gb_species, cd)) {
359 if (curr_flag) ++count;
413 #define MAX_NAME_LEN 20
418 const char *p = strchr(stored,
';');
419 int len = p ? (p-stored) : (
int)strlen(stored);
423 memcpy(name, stored, len);
428 error = doit(gb_species, clientdata);
431 error =
"Some stored species where not found.";
473 if (!gb_name)
return NULp;
489 long speciesCount = 0;
506 result[speciesCount++] = gb_species;
510 *speciesCountPtr = speciesCount;
void cut_tail(size_t byte_count)
GBDATA * GBT_next_species(GBDATA *gb_species)
GBDATA * GB_find(GBDATA *gbd, const char *key, GB_SEARCH_TYPE gbs)
static GB_ERROR restore_mark(GBDATA *gb_species, int *)
GBDATA * GB_nextEntry(GBDATA *entry)
GB_ERROR GB_end_transaction(GBDATA *gbd, GB_ERROR error)
GBDATA * GBT_first_marked_species_rel_species_data(GBDATA *gb_species_data)
GBDATA * GBT_expect_item_rel_item_data(GBDATA *gb_item_data, const char *id_field, const char *id_value)
char * ARB_strdup(const char *str)
const char * GBS_global_string(const char *templat,...)
GB_ERROR GBT_restore_marked_species(GBDATA *gb_main, const char *stored_marked)
GBDATA * GBT_first_SAI(GBDATA *gb_main)
GBDATA * GBT_first_species_rel_species_data(GBDATA *gb_species_data)
void cat(const char *from)
const char * GBT_get_name(GBDATA *gb_item)
GB_ERROR(* species_callback)(GBDATA *gb_species, int *clientdata)
GBDATA * GB_get_father(GBDATA *gbd)
GB_ERROR GB_push_transaction(GBDATA *gbd)
GBDATA * GBT_expect_species(GBDATA *gb_main, const char *name)
GB_ERROR GB_await_error()
GBDATA * GB_create_container(GBDATA *father, const char *key)
GBDATA * GBT_first_species(GBDATA *gb_main)
long GBT_mark_all(GBDATA *gb_main, int flag)
GB_CSTR GBT_get_name_or_description(GBDATA *gb_item)
GBDATA * GBT_find_or_create_species_rel_species_data(GBDATA *gb_species_data, const char *name, bool markCreated)
TYPE * ARB_alloc(size_t nelem)
GB_CSTR GB_read_key_pntr(GBDATA *gbd)
long GBT_get_species_count(GBDATA *gb_main)
GBDATA * GBT_find_species(GBDATA *gb_main, const char *name)
GBDATA * GBT_expect_SAI_rel_SAI_data(GBDATA *gb_sai_data, const char *name)
long GB_number_of_subentries(GBDATA *gbd)
GBDATA * GBT_find_SAI_rel_SAI_data(GBDATA *gb_sai_data, const char *name)
static void error(const char *msg)
GBDATA * GBT_find_or_create_item_rel_item_data(GBDATA *gb_item_data, const char *itemname, const char *id_field, const char *id, bool markCreated)
GBDATA * GBT_next_marked_species(GBDATA *gb_species)
GBDATA * GBT_first_marked_species(GBDATA *gb_main)
int GB_read_flag(GBDATA *gbd)
GBDATA * GBT_find_SAI(GBDATA *gb_main, const char *name)
GB_ERROR GB_pop_transaction(GBDATA *gbd)
GBDATA * GBT_find_or_create_species(GBDATA *gb_main, const char *name, bool markCreated)
bool GB_has_key(GBDATA *gbd, const char *key)
GBDATA ** GBT_gen_species_array(GBDATA *gb_main, long *speciesCountPtr)
long GBT_mark_all_that(GBDATA *gb_main, int flag, bool(*condition)(GBDATA *, void *), void *cd)
GBDATA * GBT_find_item_rel_item_data(GBDATA *gb_item_data, const char *id_field, const char *id_value)
long GB_number_of_marked_subentries(GBDATA *gbd)
GBDATA * GBT_expect_species_rel_species_data(GBDATA *gb_species_data, const char *name)
GB_ERROR GB_export_errorf(const char *templat,...)
GBDATA * GBT_get_SAI_data(GBDATA *gb_main)
void GB_write_flag(GBDATA *gbd, long flag)
NOT4PERL GB_ERROR GBT_with_stored_species(GBDATA *gb_main, const char *stored, species_callback doit, int *clientdata)
static long GBT_get_item_count(GBDATA *gb_parent_of_container, const char *item_container_name)
GBDATA * GBT_expect_SAI(GBDATA *gb_main, const char *name)
GBDATA * GB_next_marked(GBDATA *gbd, const char *keystring)
GB_ERROR GBT_write_string(GBDATA *gb_container, const char *fieldpath, const char *content)
char * GBT_store_marked_species(GBDATA *gb_main, bool unmark_all)
GBDATA * GBT_find_or_create(GBDATA *father, const char *key, long delete_level)
GBDATA * GBT_first_SAI_rel_SAI_data(GBDATA *gb_sai_data)
long GBT_get_SAI_count(GBDATA *gb_main)
GBDATA * GB_find_string(GBDATA *gbd, const char *key, const char *str, GB_CASE case_sens, GB_SEARCH_TYPE gbs)
NOT4PERL GB_CSTR GBT_read_name(GBDATA *gb_item)
static char * GBT_create_unique_item_identifier(GBDATA *gb_item_container, const char *id_field, const char *default_id)
GBDATA * GBT_find_species_rel_species_data(GBDATA *gb_species_data, const char *name)
GBDATA * GB_first_marked(GBDATA *gbd, const char *keystring)
GB_transaction ta(gb_var)
GB_CSTR GB_read_char_pntr(GBDATA *gbd)
GBDATA * GBT_next_SAI(GBDATA *gb_sai)
long GBT_count_marked_species(GBDATA *gb_main)
char * GBT_create_unique_species_name(GBDATA *gb_main, const char *default_name)
GBDATA * GBT_find_or_create_SAI(GBDATA *gb_main, const char *name)
const char * GBT_read_char_pntr(GBDATA *gb_container, const char *fieldpath)
char * release_memfriendly()
GB_ERROR mid(GBL_command_arguments *args, int start_index)
GBDATA * GB_entry(GBDATA *father, const char *key)
GBDATA * GBT_get_species_data(GBDATA *gb_main)