X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Ffamily_link.c;h=fe3f67997aa1f5d9872a25ff555ecc984d74d4de;hb=60162324857b1e8d84b8346d99f8b7dce07d0d40;hp=cb266b209d25e03621cc217549140f457720ded2;hpb=763e8737b5118c5f23dca84a3290c2d805bbefe6;p=gedcom-parse.git diff --git a/gom/family_link.c b/gom/family_link.c index cb266b2..fe3f679 100644 --- a/gom/family_link.c +++ b/gom/family_link.c @@ -41,13 +41,14 @@ Gedcom_ctxt sub_fam_link_start(_ELT_PARAMS_) else { struct family_link *link = SUB_MAKEFUNC(family_link)(); if (link) { + int type = ctxt_type(ctxt); link->family = GEDCOM_XREF_PTR(parsed_value); - switch (ctxt->ctxt_type) { + switch (type) { case REC_INDI: ADDFUNC2(individual,family_link)(ctxt, elt, link); break; default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); + UNEXPECTED_CONTEXT(type); } result = MAKE_GOM_CTXT(elt, family_link, link); } @@ -84,6 +85,10 @@ Gedcom_ctxt sub_fam_link_pedi_start(_ELT_PARAMS_) } DEFINE_SUB_MAKEFUNC(family_link) +DEFINE_SUB_ADDFUNC(family_link) +DEFINE_SUB_FINDFUNC(family_link) +DEFINE_SUB_REMOVEFUNC(family_link) +DEFINE_SUB_MOVEFUNC(family_link) DEFINE_ADDFUNC2(family_link, note_sub, note) DEFINE_ADDFUNC2(family_link, user_data, extra) @@ -98,6 +103,16 @@ void family_link_subscribe() def_elt_end); } +void UNREFALLFUNC(pedigree)(struct pedigree* obj) +{ + if (obj) { + struct pedigree* runner; + for (runner = obj; runner; runner = runner->next) { + UNREFALLFUNC(user_data)(runner->extra); + } + } +} + void CLEANFUNC(pedigree)(struct pedigree* ped) { if (ped) { @@ -105,6 +120,25 @@ void CLEANFUNC(pedigree)(struct pedigree* ped) } } +DEFINE_SUB_MAKEFUNC(pedigree) +DEFINE_SUB_ADDFUNC(pedigree) +DEFINE_SUB_FINDFUNC(pedigree) +DEFINE_SUB_REMOVEFUNC(pedigree) +DEFINE_SUB_MOVEFUNC(pedigree) + +void UNREFALLFUNC(family_link)(struct family_link* obj) +{ + if (obj) { + struct family_link* runner; + for (runner = obj; runner; runner = runner->next) { + unref_xref_value(runner->family); + UNREFALLFUNC(pedigree)(runner->pedigree); + UNREFALLFUNC(note_sub)(runner->note); + UNREFALLFUNC(user_data)(runner->extra); + } + } +} + void CLEANFUNC(family_link)(struct family_link *link) { if (link) {