as_merge.c
来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 238 行
C
238 行
#ifndef lintstatic char *rcsid = "$Header: /xtel/isode/isode/dsap/common/RCS/as_merge.c,v 9.0 1992/06/16 12:12:39 isode Rel $";#endif/* * $Header: /xtel/isode/isode/dsap/common/RCS/as_merge.c,v 9.0 1992/06/16 12:12:39 isode Rel $ * * * $Log: as_merge.c,v $ * Revision 9.0 1992/06/16 12:12:39 isode * Release 8.0 * *//* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */#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; 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); 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; 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; 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_fast_merge (a,b,c,d)Attr_Sequence a,b,c,d;{register Attr_Sequence aptr, bptr, result, trail, tmp;static AV_Sequence fast_avs = NULLAV;static AV_Sequence fast_tail = NULLAV;extern AV_Sequence avs_fast_merge (); if ( a == NULLATTR ) return (b); if ( b == NULLATTR ) return (a); if (quipu_faststart && (a == c) && d->attr_link == NULLATTR) if (AttrT_cmp (d->attr_type,b->attr_type) == 1) { d->attr_link = b; 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_fast_merge (a->attr_value, b->attr_value, fast_avs, fast_tail); fast_avs = a->attr_value; fast_tail = b->attr_value; aptr = a->attr_link; bptr = b->attr_link; 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_fast_merge (aptr->attr_value, bptr->attr_value, fast_avs, fast_tail); fast_avs = aptr->attr_value; fast_tail = bptr->attr_value; 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);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?