|
|
1.1 root 1: #include "quipu/util.h"
2: #include "quipu/attrvalue.h"
3:
4: Attr_Sequence as_merge (a,b)
5: Attr_Sequence a,b;
6: {
7: register Attr_Sequence aptr, bptr, result, trail, tmp;
8:
9: if ( a == NULLATTR )
10: return (b);
11: if ( b == NULLATTR )
12: return (a);
13:
14: /* start sequence off, make sure 'a' is the first */
15: switch (AttrT_cmp (a->attr_type,b->attr_type)) {
16: case 0: /* equal */
17: result = a;
18: a->attr_value = avs_merge (a->attr_value, b->attr_value);
19: aptr = a->attr_link;
20: bptr = b->attr_link;
21: free ((char *) b);
22: break;
23: case -1:
24: result = b;
25: aptr = a;
26: bptr = b->attr_link;
27: break;
28: case 1:
29: result = a;
30: aptr = a->attr_link;
31: bptr = b;
32: break;
33: }
34:
35: trail = result;
36: while ( (aptr != NULLATTR) && (bptr != NULLATTR) ) {
37:
38: switch (AttrT_cmp (aptr->attr_type,bptr->attr_type)) {
39: case 0: /* equal */
40: aptr->attr_value = avs_merge (aptr->attr_value, bptr->attr_value);
41: tmp = bptr->attr_link;
42: free ((char *) bptr);
43: trail->attr_link = aptr;
44: trail = aptr;
45: aptr = aptr->attr_link;
46: bptr = tmp;
47: break;
48: case -1:
49: trail->attr_link = bptr;
50: trail = bptr;
51: bptr = bptr->attr_link;
52: break;
53: case 1:
54: trail->attr_link = aptr;
55: trail = aptr;
56: aptr = aptr->attr_link;
57: break;
58: }
59: }
60: if (aptr == NULLATTR)
61: trail->attr_link = bptr;
62: else
63: trail->attr_link = aptr;
64:
65: return (result);
66: }
67:
68: Attr_Sequence as_merge_aux (a,b)
69: Attr_Sequence a,b;
70: {
71: register Attr_Sequence aptr, bptr, result, trail, tmp;
72:
73: if ( a == NULLATTR )
74: return (b);
75: if ( b == NULLATTR )
76: return (a);
77:
78: /* start sequence off, make sure 'a' is the first */
79: switch (AttrT_cmp (a->attr_type,b->attr_type)) {
80: case 0: /* equal */
81: result = a;
82: avs_free (a->attr_value);
83: a->attr_value = b->attr_value;
84: aptr = a->attr_link;
85: bptr = b->attr_link;
86: free ((char *) b);
87: break;
88: case -1:
89: result = b;
90: aptr = a;
91: bptr = b->attr_link;
92: break;
93: case 1:
94: result = a;
95: aptr = a->attr_link;
96: bptr = b;
97: break;
98: }
99:
100: trail = result;
101: while ( (aptr != NULLATTR) && (bptr != NULLATTR) ) {
102:
103: switch (AttrT_cmp (aptr->attr_type,bptr->attr_type)) {
104: case 0: /* equal */
105: avs_free (aptr->attr_value);
106: aptr->attr_value = bptr->attr_value;
107: tmp = bptr->attr_link;
108: free ((char *) bptr);
109: trail->attr_link = aptr;
110: trail = aptr;
111: aptr = aptr->attr_link;
112: bptr = tmp;
113: break;
114: case -1:
115: trail->attr_link = bptr;
116: trail = bptr;
117: bptr = bptr->attr_link;
118: break;
119: case 1:
120: trail->attr_link = aptr;
121: trail = aptr;
122: aptr = aptr->attr_link;
123: break;
124: }
125: }
126: if (aptr == NULLATTR)
127: trail->attr_link = bptr;
128: else
129: trail->attr_link = aptr;
130:
131: return (result);
132: }
133:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.