|
|
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);
}