Frobby  0.9.1
HilbertIndependenceConsumer.cpp
Go to the documentation of this file.
1 /* Frobby: Software for monomial ideal computations.
2  Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com)
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program. If not, see http://www.gnu.org/licenses/.
16 */
17 #include "stdinc.h"
19 
20 #include "IndependenceSplitter.h"
21 #include "HilbertStrategy.h"
22 
25  _rightConsumer(this),
26  _strategy(strategy) {
27  ASSERT(strategy != 0);
28  clear();
29 }
30 
32  IndependenceSplitter& splitter,
33  size_t varCount) {
34  ASSERT(parent != 0);
35 
36  _tmpTerm.reset(varCount);
37  _parent = parent;
38 
41 
43 }
44 
46  _parent = 0;
48  _rightCoefs.clear();
49 }
50 
52  ASSERT(_strategy != 0);
53  _strategy->freeConsumer(auto_ptr<HilbertIndependenceConsumer>(this));
54 }
55 
57  dispose();
58 }
59 
61  ASSERT(_parent != 0);
62  return this;
63 }
64 
66 }
67 
69 }
70 
72 }
73 
74 void HilbertIndependenceConsumer::consume(const mpz_class& coef,
75  const Term& term) {
76  ASSERT(_parent != 0);
77  ASSERT(coef != 0);
78  consumeLeft(coef, term);
79 }
80 
82  ASSERT(_parent != 0);
83  return &_rightConsumer;
84 }
85 
87  ASSERT(_parent != 0);
88  return _leftProjection;
89 }
90 
92  ASSERT(_parent != 0);
93  return _rightProjection;
94 }
95 
98  _parent(parent) {
99 }
100 
102 (const VarNames& names) {
103 }
104 
106 }
107 
109 consume(const mpz_class& coef, const Term& term) {
110  _parent->consumeRight(coef, term);
111 }
112 
114 }
115 
116 void HilbertIndependenceConsumer::consumeLeft(const mpz_class& leftCoef,
117  const Term& leftTerm) {
121 
123 
124  size_t rightSize = _rightTerms.getGeneratorCount();
125  ASSERT(rightSize == _rightCoefs.size());
126  for (size_t right = 0; right < rightSize; ++right) {
128  *(_rightTerms.begin() + right));
129  ASSERT(leftCoef != 0);
130  ASSERT(_rightCoefs[right] != 0);
131  _tmpCoef = leftCoef * _rightCoefs[right];
132 
133  ASSERT(_tmpCoef != 0);
135  }
136 }
137 
138 void HilbertIndependenceConsumer::consumeRight(const mpz_class& coef,
139  const Term& term) {
142  ASSERT(coef != 0);
143 
144  _rightTerms.insert(term);
145  _rightCoefs.push_back(coef);
146 }
HilbertIndependenceConsumer::beginConsuming
virtual void beginConsuming()
Definition: HilbertIndependenceConsumer.cpp:68
Projection::inverseProject
void inverseProject(Term &to, const Exponent *from) const
Definition: Projection.cpp:78
IndependenceSplitter::getBigProjection
void getBigProjection(Projection &projection) const
Definition: IndependenceSplitter.cpp:24
HilbertIndependenceConsumer::_rightProjection
Projection _rightProjection
Definition: HilbertIndependenceConsumer.h:80
stdinc.h
HilbertIndependenceConsumer::_parent
CoefTermConsumer * _parent
Definition: HilbertIndependenceConsumer.h:78
Ideal::begin
const_iterator begin() const
Definition: Ideal.h:48
HilbertIndependenceConsumer::_rightConsumer
RightConsumer _rightConsumer
Definition: HilbertIndependenceConsumer.h:85
HilbertIndependenceConsumer::getLeftConsumer
CoefTermConsumer * getLeftConsumer()
Definition: HilbertIndependenceConsumer.cpp:60
Term::reset
void reset(size_t newVarCount)
Definition: Term.h:551
Ideal::clearAndSetVarCount
void clearAndSetVarCount(size_t varCount)
Definition: Ideal.cpp:646
HilbertIndependenceConsumer::getRightConsumer
CoefTermConsumer * getRightConsumer()
Definition: HilbertIndependenceConsumer.cpp:81
HilbertIndependenceConsumer::RightConsumer::doneConsuming
virtual void doneConsuming()
Definition: HilbertIndependenceConsumer.cpp:113
HilbertIndependenceConsumer::getRightProjection
const Projection & getRightProjection() const
Definition: HilbertIndependenceConsumer.cpp:91
HilbertIndependenceConsumer::_rightCoefs
vector< mpz_class > _rightCoefs
Definition: HilbertIndependenceConsumer.h:83
HilbertIndependenceConsumer::consume
virtual void consume(const mpz_class &coef, const Term &term)
Definition: HilbertIndependenceConsumer.cpp:74
Term::getVarCount
size_t getVarCount() const
Definition: Term.h:85
HilbertIndependenceConsumer::_tmpTerm
Term _tmpTerm
Definition: HilbertIndependenceConsumer.h:75
HilbertStrategy::freeConsumer
void freeConsumer(auto_ptr< HilbertIndependenceConsumer > consumer)
Definition: HilbertStrategy.cpp:108
HilbertIndependenceConsumer::dispose
virtual void dispose()
Called when the task is no longer used but run has not and will not be called.
Definition: HilbertIndependenceConsumer.cpp:51
IndependenceSplitter
Definition: IndependenceSplitter.h:29
HilbertIndependenceConsumer::RightConsumer::RightConsumer
RightConsumer(HilbertIndependenceConsumer *parent)
Definition: HilbertIndependenceConsumer.cpp:97
IndependenceSplitter.h
HilbertIndependenceConsumer::clear
void clear()
Definition: HilbertIndependenceConsumer.cpp:45
TaskEngine
TaskEngine handles a list of tasks that are to be carried out.
Definition: TaskEngine.h:40
HilbertIndependenceConsumer
Definition: HilbertIndependenceConsumer.h:31
Ideal::getGeneratorCount
size_t getGeneratorCount() const
Definition: Ideal.h:57
HilbertIndependenceConsumer::reset
void reset(CoefTermConsumer *parent, IndependenceSplitter &splitter, size_t varCount)
Definition: HilbertIndependenceConsumer.cpp:31
HilbertIndependenceConsumer::consumeLeft
virtual void consumeLeft(const mpz_class &leftCoef, const Term &leftTerm)
Definition: HilbertIndependenceConsumer.cpp:116
Term
Term represents a product of variables which does not include a coefficient.
Definition: Term.h:49
CoefTermConsumer::consume
virtual void consume(const Polynomial &poly)
Definition: CoefTermConsumer.cpp:25
Ideal::getVarCount
size_t getVarCount() const
Definition: Ideal.h:56
CoefTermConsumer
Definition: CoefTermConsumer.h:24
HilbertStrategy
Definition: HilbertStrategy.h:33
IndependenceSplitter::getRestProjection
void getRestProjection(Projection &projection) const
Definition: IndependenceSplitter.cpp:28
HilbertIndependenceConsumer::_leftProjection
Projection _leftProjection
Definition: HilbertIndependenceConsumer.h:79
HilbertIndependenceConsumer::_strategy
HilbertStrategy * _strategy
Definition: HilbertIndependenceConsumer.h:87
HilbertIndependenceConsumer::doneConsuming
virtual void doneConsuming()
Definition: HilbertIndependenceConsumer.cpp:71
HilbertIndependenceConsumer::HilbertIndependenceConsumer
HilbertIndependenceConsumer(HilbertStrategy *strategy)
Definition: HilbertIndependenceConsumer.cpp:24
HilbertIndependenceConsumer::_tmpCoef
mpz_class _tmpCoef
Definition: HilbertIndependenceConsumer.h:76
HilbertIndependenceConsumer.h
Projection::getRangeVarCount
size_t getRangeVarCount() const
Definition: Projection.cpp:24
Ideal::clear
void clear()
Definition: Ideal.cpp:641
Ideal::insert
void insert(const Exponent *term)
Definition: Ideal.cpp:455
Projection
Definition: Projection.h:29
VarNames
Defines the variables of a polynomial ring and facilities IO involving them.
Definition: VarNames.h:40
HilbertIndependenceConsumer::RightConsumer::consumeRing
virtual void consumeRing(const VarNames &names)
Definition: HilbertIndependenceConsumer.cpp:102
HilbertIndependenceConsumer::RightConsumer::beginConsuming
virtual void beginConsuming()
Definition: HilbertIndependenceConsumer.cpp:105
HilbertIndependenceConsumer::_rightTerms
Ideal _rightTerms
Definition: HilbertIndependenceConsumer.h:82
ASSERT
#define ASSERT(X)
Definition: stdinc.h:86
HilbertStrategy.h
HilbertIndependenceConsumer::RightConsumer::consume
virtual void consume(const mpz_class &coef, const Term &term)
Definition: HilbertIndependenceConsumer.cpp:109
HilbertIndependenceConsumer::getLeftProjection
const Projection & getLeftProjection() const
Definition: HilbertIndependenceConsumer.cpp:86
HilbertIndependenceConsumer::consumeRight
virtual void consumeRight(const mpz_class &coef, const Term &term)
Definition: HilbertIndependenceConsumer.cpp:138
HilbertIndependenceConsumer::run
virtual void run(TaskEngine &engine)
Does whatever work this task represents.
Definition: HilbertIndependenceConsumer.cpp:56
HilbertIndependenceConsumer::consumeRing
virtual void consumeRing(const VarNames &names)
Definition: HilbertIndependenceConsumer.cpp:65