My Project
Loading...
Searching...
No Matches
p_Merge_q__T.cc
Go to the documentation of this file.
1/****************************************
2* Computer Algebra System SINGULAR *
3****************************************/
4/***************************************************************
5 * File: p_Merge_q__Template.cc
6 * Purpose: template for p_Add_q
7 * Author: obachman (Olaf Bachmann)
8 * Created: 8/00
9 *******************************************************************/
10
11/***************************************************************
12 *
13 * Returns: p merged with q
14 * Destroys: p, q
15 *
16 ***************************************************************/
17LINKAGE poly p_Merge_q__T(poly p, poly q, const ring r)
18{
19 assume(p != NULL && q != NULL);
20 p_Test(p, r);
21 p_Test(q, r);
22#if PDEBUG > 0
23 int l = pLength(p) + pLength(q);
24#endif
25
26 spolyrec rp;
27 poly a = &rp;
28 DECLARE_LENGTH(const unsigned long length = r->CmpL_Size);
29 DECLARE_ORDSGN(const long* ordsgn = r->ordsgn);
30
31 Top: // compare p and q w.r.t. monomial ordering
32 p_MemCmp__T(p->exp, q->exp, length, ordsgn, goto Equal, goto Greater , goto Smaller);
33
34 Equal:
35 // should never get here
36 dReportError("Equal monomials in p_Merge_q");
37 return NULL;
38
39 Greater:
40 a = pNext(a) = p;
41 pIter(p);
42 if (p==NULL) { pNext(a) = q; goto Finish;}
43 goto Top;
44
45 Smaller:
46 a = pNext(a) = q;
47 pIter(q);
48 if (q==NULL) { pNext(a) = p; goto Finish;}
49 goto Top;
50
51 Finish:
52
53 p_Test(pNext(&rp), r);
54#if PDEBUG > 0
55 pAssume1(l - pLength(pNext(&rp)) == 0);
56#endif
57 return pNext(&rp);
58}
59
int l
Definition: cfEzgcd.cc:100
int p
Definition: cfModGcd.cc:4078
static BOOLEAN Equal(number a, number b, const coeffs)
Definition: flintcf_Q.cc:324
static bool Greater(mono_type m1, mono_type m2)
static BOOLEAN length(leftv result, leftv arg)
Definition: interval.cc:257
#define assume(x)
Definition: mod2.h:389
#define LINKAGE
Definition: mod2.h:140
int dReportError(const char *fmt,...)
Definition: dError.cc:44
#define pIter(p)
Definition: monomials.h:37
#define pNext(p)
Definition: monomials.h:36
#define pAssume1(cond)
Definition: monomials.h:171
#define NULL
Definition: omList.c:12
LINKAGE poly p_Merge_q__T(poly p, poly q, const ring r)
Definition: p_Merge_q__T.cc:17
static int pLength(poly a)
Definition: p_polys.h:188
#define p_Test(p, r)
Definition: p_polys.h:159