X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Findividual.c;h=103ad31216ccb77d7fc4928041fa2d2fc200a36a;hb=72689522e287ca3b2231e7d8881f0fe5bea48f15;hp=6e8c3fca52bb6eee0f416d30d69621d7bb103851;hpb=4946f8418bfa1c41bb410995dbc9c5ac272c4c74;p=gedcom-parse.git diff --git a/gom/individual.c b/gom/individual.c index 6e8c3fc..103ad31 100644 --- a/gom/individual.c +++ b/gom/individual.c @@ -42,18 +42,34 @@ struct individual* gom_first_individual = NULL; -REC_CB(individual, indi_start, make_individual_record) -GET_REC_BY_XREF(individual, XREF_INDI, gom_get_individual_by_xref) -STRING_CB(individual, indi_resn_start, restriction_notice) -STRING_CB(individual, indi_sex_start, sex) -XREF_LIST_CB(individual, indi_subm_start, submitters, make_submitter_record) -XREF_LIST_CB(individual, indi_alia_start, alias, make_individual_record) -XREF_LIST_CB(individual, indi_anci_start, ancestor_interest, - make_submitter_record) -XREF_LIST_CB(individual, indi_desi_start, descendant_interest, - make_submitter_record) -STRING_CB(individual, indi_rfn_start, record_file_nr) -STRING_CB(individual, indi_afn_start, ancestral_file_nr) +DEFINE_MAKEFUNC(individual, gom_first_individual) +DEFINE_DESTROYFUNC(individual, gom_first_individual) +DEFINE_ADDFUNC(individual, XREF_INDI) +DEFINE_DELETEFUNC(individual) +DEFINE_GETXREFFUNC(individual, XREF_INDI) + +DEFINE_REC_CB(individual, indi_start) +DEFINE_STRING_CB(individual, indi_resn_start, restriction_notice) +DEFINE_STRING_CB(individual, indi_sex_start, sex) +DEFINE_XREF_LIST_CB(individual, indi_subm_start, submitters, submitter) +DEFINE_XREF_LIST_CB(individual, indi_alia_start, alias, individual) +DEFINE_XREF_LIST_CB(individual, indi_anci_start, ancestor_interest, submitter) +DEFINE_XREF_LIST_CB(individual, indi_desi_start, descendant_interest,submitter) +DEFINE_STRING_CB(individual, indi_rfn_start, record_file_nr) +DEFINE_STRING_CB(individual, indi_afn_start, ancestral_file_nr) + +DEFINE_ADDFUNC2(individual, event, event) +DEFINE_ADDFUNC2_TOVAR(individual, event, attribute) +DEFINE_ADDFUNC2(individual, personal_name, name) +DEFINE_ADDFUNC2(individual, lds_event, lds_individual_ordinance) +DEFINE_ADDFUNC2(individual, association, association) +DEFINE_ADDFUNC2(individual, source_citation, citation) +DEFINE_ADDFUNC2(individual, multimedia_link, mm_link) +DEFINE_ADDFUNC2(individual, note_sub, note) +DEFINE_ADDFUNC2(individual, user_ref_number, ref) +DEFINE_ADDFUNC2(individual, user_data, extra) +DEFINE_ADDFUNC2_NOLIST(individual, change_date, change_date) +DEFINE_ADDFUNC2_STR(individual, record_id) void individual_subscribe() { @@ -68,34 +84,6 @@ void individual_subscribe() gedcom_subscribe_to_element(ELT_INDI_AFN, indi_afn_start, def_elt_end); } -void individual_add_event(Gom_ctxt ctxt, struct event* evt) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - LINK_CHAIN_ELT(event, indiv->event, evt); -} - -void individual_add_attribute(Gom_ctxt ctxt, struct event* evt) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - LINK_CHAIN_ELT(event, indiv->attribute, evt); -} - -void individual_add_name(Gom_ctxt ctxt, struct personal_name* name) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - LINK_CHAIN_ELT(personal_name, indiv->name, name); -} - -void individual_add_lio(Gom_ctxt ctxt, struct lds_event* evt) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - LINK_CHAIN_ELT(lds_event, indiv->lds_individual_ordinance, evt); -} - void individual_add_family_link(Gom_ctxt ctxt, int ctxt_type, struct family_link* link) { @@ -114,98 +102,38 @@ void individual_add_family_link(Gom_ctxt ctxt, int ctxt_type, } } -void individual_add_association(Gom_ctxt ctxt, struct association* assoc) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - LINK_CHAIN_ELT(association, indiv->association, assoc); -} - -void individual_add_citation(Gom_ctxt ctxt, struct source_citation* cit) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - LINK_CHAIN_ELT(source_citation, indiv->citation, cit); -} - -void individual_add_mm_link(Gom_ctxt ctxt, struct multimedia_link* link) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - LINK_CHAIN_ELT(multimedia_link, indiv->mm_link, link); -} - -void individual_add_note(Gom_ctxt ctxt, struct note_sub* note) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - LINK_CHAIN_ELT(note_sub, indiv->note, note); -} - -void individual_add_user_ref(Gom_ctxt ctxt, struct user_ref_number* ref) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - LINK_CHAIN_ELT(user_ref_number, indiv->ref, ref); -} - -void individual_set_record_id(Gom_ctxt ctxt, const char *rin) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) { - indiv->record_id = strdup(rin); - if (! indiv->record_id) MEMORY_ERROR; - } -} - -void individual_set_change_date(Gom_ctxt ctxt, struct change_date* chan) -{ - struct individual *indiv = SAFE_CTXT_CAST(individual, ctxt); - if (indiv) - indiv->change_date = chan; -} - -void individual_add_user_data(Gom_ctxt ctxt, struct user_data* data) -{ - struct individual *obj = SAFE_CTXT_CAST(individual, ctxt); - if (obj) - LINK_CHAIN_ELT(user_data, obj->extra, data); -} - -void individual_cleanup(struct individual* indiv) +void CLEANFUNC(individual)(struct individual* indiv) { if (indiv) { SAFE_FREE(indiv->xrefstr); SAFE_FREE(indiv->restriction_notice); - DESTROY_CHAIN_ELTS(personal_name, indiv->name, name_cleanup); + DESTROY_CHAIN_ELTS(personal_name, indiv->name); SAFE_FREE(indiv->sex); - DESTROY_CHAIN_ELTS(event, indiv->event, event_cleanup); - DESTROY_CHAIN_ELTS(event, indiv->attribute, event_cleanup); - DESTROY_CHAIN_ELTS(lds_event, indiv->lds_individual_ordinance, - lds_event_cleanup); - DESTROY_CHAIN_ELTS(family_link,indiv->child_to_family,family_link_cleanup); - DESTROY_CHAIN_ELTS(family_link,indiv->spouse_to_family, - family_link_cleanup); - DESTROY_CHAIN_ELTS(xref_list, indiv->submitters, NULL_DESTROY); - DESTROY_CHAIN_ELTS(association, indiv->association, association_cleanup); - DESTROY_CHAIN_ELTS(xref_list, indiv->alias, NULL_DESTROY); - DESTROY_CHAIN_ELTS(xref_list, indiv->ancestor_interest, NULL_DESTROY); - DESTROY_CHAIN_ELTS(xref_list, indiv->descendant_interest, NULL_DESTROY); - DESTROY_CHAIN_ELTS(source_citation, indiv->citation, citation_cleanup); - DESTROY_CHAIN_ELTS(multimedia_link,indiv->mm_link,multimedia_link_cleanup); - DESTROY_CHAIN_ELTS(note_sub, indiv->note, note_sub_cleanup); + DESTROY_CHAIN_ELTS(event, indiv->event); + DESTROY_CHAIN_ELTS(event, indiv->attribute); + DESTROY_CHAIN_ELTS(lds_event, indiv->lds_individual_ordinance); + DESTROY_CHAIN_ELTS(family_link, indiv->child_to_family); + DESTROY_CHAIN_ELTS(family_link, indiv->spouse_to_family); + DESTROY_CHAIN_ELTS(xref_list, indiv->submitters); + DESTROY_CHAIN_ELTS(association, indiv->association); + DESTROY_CHAIN_ELTS(xref_list, indiv->alias); + DESTROY_CHAIN_ELTS(xref_list, indiv->ancestor_interest); + DESTROY_CHAIN_ELTS(xref_list, indiv->descendant_interest); + DESTROY_CHAIN_ELTS(source_citation, indiv->citation); + DESTROY_CHAIN_ELTS(multimedia_link, indiv->mm_link); + DESTROY_CHAIN_ELTS(note_sub, indiv->note); SAFE_FREE(indiv->record_file_nr); SAFE_FREE(indiv->ancestral_file_nr); - DESTROY_CHAIN_ELTS(user_ref_number, indiv->ref, user_ref_cleanup); + DESTROY_CHAIN_ELTS(user_ref_number, indiv->ref); SAFE_FREE(indiv->record_id); - change_date_cleanup(indiv->change_date); - DESTROY_CHAIN_ELTS(user_data, indiv->extra, user_data_cleanup); + CLEANFUNC(change_date)(indiv->change_date); + DESTROY_CHAIN_ELTS(user_data, indiv->extra); } } void individuals_cleanup() { - DESTROY_CHAIN_ELTS(individual, gom_first_individual, individual_cleanup); + DESTROY_CHAIN_ELTS(individual, gom_first_individual); } struct individual* gom_get_first_individual() @@ -213,17 +141,6 @@ struct individual* gom_get_first_individual() return gom_first_individual; } -struct individual* make_individual_record(const char* xrefstr) -{ - struct individual* indiv = NULL; - MAKE_CHAIN_ELT(individual, gom_first_individual, indiv); - if (indiv) { - indiv->xrefstr = strdup(xrefstr); - if (! indiv->xrefstr) MEMORY_ERROR; - } - return indiv; -} - int write_individuals(Gedcom_write_hndl hndl) { int result = 0;