My Project
debian-1:4.1.2-p1+ds-2
libpolys
polys
templates
p_Mult_mm__T.cc
Go to the documentation of this file.
1
/****************************************
2
* Computer Algebra System SINGULAR *
3
****************************************/
4
/***************************************************************
5
* File: p_Mult_mm__Template.cc
6
* Purpose: template for p_Mult_n
7
* Author: obachman (Olaf Bachmann)
8
* Created: 8/00
9
*******************************************************************/
10
11
/***************************************************************
12
*
13
* Returns: p*m
14
* Const: m
15
* Destroys: p
16
*
17
***************************************************************/
18
LINKAGE
poly
p_Mult_mm__T
(poly
p
,
const
poly
m
,
const
ring ri)
19
{
20
p_Test
(
p
, ri);
21
p_LmTest
(
m
, ri);
22
pAssume
(
m
!=
NULL
);
23
assume
(
p
!=
NULL
);
24
poly q =
p
;
25
number ln =
pGetCoeff
(
m
);
26
number pn;
27
DECLARE_LENGTH(
const
unsigned
long
length
= ri->ExpL_Size);
28
const
unsigned
long
* m_e =
m
->exp;
29
pAssume
(!n_IsZero__T(ln,ri->cf));
30
31
#ifdef HAVE_ZERODIVISORS
32
poly before =
p
;
33
#endif
34
while
(
p
!=
NULL
)
35
{
36
pn =
pGetCoeff
(
p
);
37
number tmp = n_Mult__T(ln, pn, ri->cf);
38
#ifdef HAVE_ZERODIVISORS
39
if
(n_IsZero__T(tmp, ri->cf))
40
{
41
n_Delete__T
(&tmp, ri->cf);
42
if
(before ==
p
)
43
{
44
p
=
p_LmDeleteAndNext
(
p
, ri);
45
before =
p
;
46
q =
p
;
47
}
48
else
49
{
50
p
=
p_LmDeleteAndNext
(
p
, ri);
51
pNext
(before) =
p
;
52
}
53
}
54
else
55
#endif
56
{
57
pSetCoeff0
(
p
, tmp);
58
n_Delete__T
(&pn, ri->cf);
59
p_MemAdd__T(
p
->exp, m_e,
length
);
60
p_MemAddAdjust__T(
p
, ri);
61
#ifdef HAVE_ZERODIVISORS
62
before =
p
;
63
#endif
64
p
=
pNext
(
p
);
65
}
66
}
67
p_Test
(q, ri);
68
return
q;
69
}
70
71
p_LmDeleteAndNext
static poly p_LmDeleteAndNext(poly p, const ring r)
Definition:
p_polys.h:711
pAssume
#define pAssume(cond)
Definition:
monomials.h:86
p_Mult_mm__T
LINKAGE poly p_Mult_mm__T(poly p, const poly m, const ring ri)
Definition:
p_Mult_mm__T.cc:15
length
static BOOLEAN length(leftv result, leftv arg)
Definition:
interval.cc:263
p_Test
#define p_Test(p, r)
Definition:
p_polys.h:154
n_Delete__T
#define n_Delete__T(n, r)
Definition:
p_polys.cc:4798
p_LmTest
#define p_LmTest(p, r)
Definition:
p_polys.h:155
pSetCoeff0
#define pSetCoeff0(p, n)
Definition:
monomials.h:56
m
int m
Definition:
cfEzgcd.cc:121
assume
#define assume(x)
Definition:
mod2.h:384
NULL
#define NULL
Definition:
omList.c:11
p
int p
Definition:
cfModGcd.cc:4019
pGetCoeff
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
Definition:
monomials.h:41
LINKAGE
#define LINKAGE
Definition:
mod2.h:137
pNext
#define pNext(p)
Definition:
monomials.h:33
Generated on Thu Jan 9 2020 20:32:43 for My Project by
doxygen 1.8.16
for
Singular debian-1:4.1.2-p1+ds-2