|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T a
Length: 2782 (0xade) Types: TextFile Names: »as_merge.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« └─⟦de7628f85⟧ └─⟦this⟧ »isode-6.0/dsap/common/as_merge.c«
#include "quipu/util.h" #include "quipu/attrvalue.h" Attr_Sequence as_merge (a,b) Attr_Sequence a,b; { register Attr_Sequence aptr, bptr, result, trail, tmp; if ( a == NULLATTR ) return (b); if ( b == NULLATTR ) return (a); /* start sequence off, make sure 'a' is the first */ switch (AttrT_cmp (&a->attr_type,&b->attr_type)) { case 0: /* equal */ result = a; a->attr_value = avs_merge (a->attr_value, b->attr_value); aptr = a->attr_link; bptr = b->attr_link; AttrT_free_aux (&b->attr_type); free ((char *) b); break; case -1: result = b; aptr = a; bptr = b->attr_link; break; case 1: result = a; aptr = a->attr_link; bptr = b; break; } trail = result; while ( (aptr != NULLATTR) && (bptr != NULLATTR) ) { switch (AttrT_cmp (&aptr->attr_type,&bptr->attr_type)) { case 0: /* equal */ aptr->attr_value = avs_merge (aptr->attr_value, bptr->attr_value); AttrT_free_aux (&bptr->attr_type); tmp = bptr->attr_link; free ((char *) bptr); trail->attr_link = aptr; trail = aptr; aptr = aptr->attr_link; bptr = tmp; break; case -1: trail->attr_link = bptr; trail = bptr; bptr = bptr->attr_link; break; case 1: trail->attr_link = aptr; trail = aptr; aptr = aptr->attr_link; break; } } if (aptr == NULLATTR) trail->attr_link = bptr; else trail->attr_link = aptr; return (result); } Attr_Sequence as_merge_aux (a,b) Attr_Sequence a,b; { register Attr_Sequence aptr, bptr, result, trail, tmp; if ( a == NULLATTR ) return (b); if ( b == NULLATTR ) return (a); /* start sequence off, make sure 'a' is the first */ switch (AttrT_cmp (&a->attr_type,&b->attr_type)) { case 0: /* equal */ result = a; avs_free (a->attr_value); a->attr_value = b->attr_value; aptr = a->attr_link; bptr = b->attr_link; AttrT_free_aux (&b->attr_type); free ((char *) b); break; case -1: result = b; aptr = a; bptr = b->attr_link; break; case 1: result = a; aptr = a->attr_link; bptr = b; break; } trail = result; while ( (aptr != NULLATTR) && (bptr != NULLATTR) ) { switch (AttrT_cmp (&aptr->attr_type,&bptr->attr_type)) { case 0: /* equal */ avs_free (aptr->attr_value); aptr->attr_value = bptr->attr_value; AttrT_free_aux (&bptr->attr_type); tmp = bptr->attr_link; free ((char *) bptr); trail->attr_link = aptr; trail = aptr; aptr = aptr->attr_link; bptr = tmp; break; case -1: trail->attr_link = bptr; trail = bptr; bptr = bptr->attr_link; break; case 1: trail->attr_link = aptr; trail = aptr; aptr = aptr->attr_link; break; } } if (aptr == NULLATTR) trail->attr_link = bptr; else trail->attr_link = aptr; return (result); }