Public Member Functions | Private Member Functions | Private Attributes
CPolynomialSummator Class Reference

CPolynomialSummator: unifies bucket and polynomial summation as the later is brocken in buckets :(. More...

#include <summator.h>

Public Member Functions

 CPolynomialSummator (const ring &rBaseRing, bool bUsePolynomial=false)
 
 ~CPolynomialSummator ()
 
void AddAndDelete (poly pSummand, int iLength)
 
void AddAndDelete (poly pSummand)
 
void operator+= (poly pSummand)
 
void Add (poly pSummand, int iLength)
 
void Add (poly pSummand)
 
poly AddUpAndClear ()
 
poly AddUpAndClear (int *piLength)
 
 operator poly ()
 
 CPolynomialSummator (const CPolynomialSummator &)
 Copy constructor. More...
 

Private Member Functions

CPolynomialSummatoroperator= (const CPolynomialSummator &)
 no assignment operator yet More...
 

Private Attributes

const ring & m_basering
 
const bool m_bUsePolynomial
 
union {
sBucket_pt m_bucket
 
poly m_poly
 
m_temp
 

Detailed Description

CPolynomialSummator: unifies bucket and polynomial summation as the later is brocken in buckets :(.

Definition at line 29 of file summator.h.

Constructor & Destructor Documentation

§ CPolynomialSummator() [1/2]

CPolynomialSummator::CPolynomialSummator ( const ring &  rBaseRing,
bool  bUsePolynomial = false 
)

Definition at line 37 of file summator.cc.

37  :
38  m_basering(rBaseRing), m_bUsePolynomial(bUsePolynomial)
39 {
40 #ifdef RDEBUG
41  rTest(rBaseRing);
42 #endif
43 
44  if(bUsePolynomial)
45  m_temp.m_poly = NULL;
46  else
47  {
49  m_temp.m_bucket = sBucketCreate(rBaseRing);
50  }
51 }
const ring & m_basering
Definition: summator.h:32
union CPolynomialSummator::@5 m_temp
#define TEST_OPT_NOT_BUCKETS
Definition: options.h:100
#define assume(x)
Definition: mod2.h:394
sBucket_pt sBucketCreate(const ring r)
Definition: sbuckets.cc:120
#define rTest(r)
Definition: ring.h:778
const bool m_bUsePolynomial
Definition: summator.h:33
#define NULL
Definition: omList.c:10

§ ~CPolynomialSummator()

CPolynomialSummator::~CPolynomialSummator ( )

Definition at line 74 of file summator.cc.

75 {
76  if(!m_bUsePolynomial)
77  {
78  poly out;
79  int pLength;
80 
81  sBucketClearAdd(m_temp.m_bucket, &out, &pLength);
82  sBucketDestroy(&m_temp.m_bucket);
83 
84  assume(out == NULL); // otherwise wrong usage pattern!
85  if(out != NULL)
86  p_Delete(&out, m_basering);
87 // m_temp.m_bucket = NULL;
88  }
89  else
90  {
91  assume(m_temp.m_poly == NULL); // otherwise wrong usage pattern!
92  if(m_temp.m_poly!=NULL)
93  {
94 #ifdef PDEBUG
95  p_Test(m_temp.m_poly, m_basering);
96 #endif
97  p_Delete(&m_temp.m_poly, m_basering);
98 // m_temp.m_poly = NULL;
99  }
100  }
101 }
const ring & m_basering
Definition: summator.h:32
union CPolynomialSummator::@5 m_temp
#define assume(x)
Definition: mod2.h:394
void sBucketDestroy(sBucket_pt *bucket)
Definition: sbuckets.cc:127
const bool m_bUsePolynomial
Definition: summator.h:33
static unsigned pLength(poly a)
Definition: p_polys.h:189
#define p_Test(p, r)
Definition: p_polys.h:160
static void p_Delete(poly *p, const ring r)
Definition: p_polys.h:843
#define NULL
Definition: omList.c:10
polyrec * poly
Definition: hilb.h:10
void sBucketClearAdd(sBucket_pt bucket, poly *p, int *length)
Definition: sbuckets.cc:270

§ CPolynomialSummator() [2/2]

CPolynomialSummator::CPolynomialSummator ( const CPolynomialSummator b)

Copy constructor.

Definition at line 188 of file summator.cc.

188  :
190 {
191 // try{
192  if(m_bUsePolynomial)
193  m_temp.m_poly = p_Copy( b.m_temp.m_poly, m_basering);
194  else
195  m_temp.m_bucket = sBucketCopy(b.m_temp.m_bucket);
196 // }
197 // catch(...)
198 // {
199 // assume(false);
200 // }
201 }
const ring & m_basering
Definition: summator.h:32
union CPolynomialSummator::@5 m_temp
static poly p_Copy(poly p, const ring r)
returns a copy of p
Definition: p_polys.h:804
const bool m_bUsePolynomial
Definition: summator.h:33
sBucket_pt sBucketCopy(const sBucket_pt bucket)
Copy sBucket non-intrusive!!!
Definition: sbuckets.cc:75

Member Function Documentation

§ Add() [1/2]

void CPolynomialSummator::Add ( poly  pSummand,
int  iLength 
)

Definition at line 176 of file summator.cc.

177 {
178  AddAndDelete(p_Copy(pSummand, m_basering), iLength);
179 }
const ring & m_basering
Definition: summator.h:32
static poly p_Copy(poly p, const ring r)
returns a copy of p
Definition: p_polys.h:804
void AddAndDelete(poly pSummand, int iLength)
Definition: summator.cc:103

§ Add() [2/2]

void CPolynomialSummator::Add ( poly  pSummand)

Definition at line 181 of file summator.cc.

182 {
183  AddAndDelete(p_Copy(pSummand, m_basering));
184 }
const ring & m_basering
Definition: summator.h:32
static poly p_Copy(poly p, const ring r)
returns a copy of p
Definition: p_polys.h:804
void AddAndDelete(poly pSummand, int iLength)
Definition: summator.cc:103

§ AddAndDelete() [1/2]

void CPolynomialSummator::AddAndDelete ( poly  pSummand,
int  iLength 
)

Definition at line 103 of file summator.cc.

104 {
105 #ifdef PDEBUG
106  p_Test(pSummand, m_basering);
107 #endif
108 
109  if(m_bUsePolynomial)
110  m_temp.m_poly = p_Add_q(m_temp.m_poly, pSummand, m_basering);
111  else
112  sBucket_Add_p(m_temp.m_bucket, pSummand, iLength); // sBucket_Merge_p???
113 }
const ring & m_basering
Definition: summator.h:32
void sBucket_Add_p(sBucket_pt bucket, poly p, int length)
adds poly p to bucket destroys p!
Definition: sbuckets.cc:201
union CPolynomialSummator::@5 m_temp
const bool m_bUsePolynomial
Definition: summator.h:33
#define p_Test(p, r)
Definition: p_polys.h:160
static poly p_Add_q(poly p, poly q, const ring r)
Definition: p_polys.h:877

§ AddAndDelete() [2/2]

void CPolynomialSummator::AddAndDelete ( poly  pSummand)

Definition at line 115 of file summator.cc.

116 {
117 #ifdef PDEBUG
118  p_Test(pSummand, m_basering);
119 #endif
120 
121  if(m_bUsePolynomial)
122  m_temp.m_poly = p_Add_q(m_temp.m_poly, pSummand, m_basering);
123  else
124  sBucket_Add_p(m_temp.m_bucket, pSummand, 0); // sBucket_Merge_p???
125 }
const ring & m_basering
Definition: summator.h:32
void sBucket_Add_p(sBucket_pt bucket, poly p, int length)
adds poly p to bucket destroys p!
Definition: sbuckets.cc:201
union CPolynomialSummator::@5 m_temp
const bool m_bUsePolynomial
Definition: summator.h:33
#define p_Test(p, r)
Definition: p_polys.h:160
static poly p_Add_q(poly p, poly q, const ring r)
Definition: p_polys.h:877

§ AddUpAndClear() [1/2]

poly CPolynomialSummator::AddUpAndClear ( )

Definition at line 127 of file summator.cc.

128 {
129  poly out = NULL;
130 
131  if(m_bUsePolynomial)
132  {
133  out = m_temp.m_poly;
134  m_temp.m_poly = NULL;
135  }
136  else
137  {
138  int pLength;
139  sBucketClearAdd(m_temp.m_bucket, &out, &pLength);
140  }
141 
142 #ifdef PDEBUG
143  p_Test(out, m_basering);
144 #endif
145 
146  return out;
147 }
const ring & m_basering
Definition: summator.h:32
union CPolynomialSummator::@5 m_temp
const bool m_bUsePolynomial
Definition: summator.h:33
static unsigned pLength(poly a)
Definition: p_polys.h:189
#define p_Test(p, r)
Definition: p_polys.h:160
#define NULL
Definition: omList.c:10
polyrec * poly
Definition: hilb.h:10
void sBucketClearAdd(sBucket_pt bucket, poly *p, int *length)
Definition: sbuckets.cc:270

§ AddUpAndClear() [2/2]

poly CPolynomialSummator::AddUpAndClear ( int *  piLength)

Definition at line 150 of file summator.cc.

151 {
152  poly out = NULL;
153 
154  if(m_bUsePolynomial)
155  {
156  out = m_temp.m_poly;
157  m_temp.m_poly = NULL;
158  *piLength = pLength(out);
159  }
160  else
161  {
162  *piLength = 0;
163  sBucketClearAdd(m_temp.m_bucket, &out, piLength);
164  }
165 
166 #ifdef PDEBUG
167  p_Test(out, m_basering);
168  assume(pLength(out) == *piLength);
169 #endif
170 
171  return out;
172 }
const ring & m_basering
Definition: summator.h:32
union CPolynomialSummator::@5 m_temp
#define assume(x)
Definition: mod2.h:394
const bool m_bUsePolynomial
Definition: summator.h:33
static unsigned pLength(poly a)
Definition: p_polys.h:189
#define p_Test(p, r)
Definition: p_polys.h:160
#define NULL
Definition: omList.c:10
polyrec * poly
Definition: hilb.h:10
void sBucketClearAdd(sBucket_pt bucket, poly *p, int *length)
Definition: sbuckets.cc:270

§ operator poly()

CPolynomialSummator::operator poly ( )
inline

Definition at line 60 of file summator.h.

60 { return AddUpAndClear(); }

§ operator+=()

void CPolynomialSummator::operator+= ( poly  pSummand)
inline

Definition at line 49 of file summator.h.

49 { AddAndDelete(pSummand); }
void AddAndDelete(poly pSummand, int iLength)
Definition: summator.cc:103

§ operator=()

CPolynomialSummator& CPolynomialSummator::operator= ( const CPolynomialSummator )
private

no assignment operator yet

Field Documentation

§ m_basering

const ring& CPolynomialSummator::m_basering
private

Definition at line 32 of file summator.h.

§ m_bUsePolynomial

const bool CPolynomialSummator::m_bUsePolynomial
private

Definition at line 33 of file summator.h.

§ m_temp

union { ... } CPolynomialSummator::m_temp

The documentation for this class was generated from the following files: