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"
18 #include "TotalDegreeCoefTermConsumer.h"
19
20 #include "CoefBigTermConsumer.h"
21 #include "TermTranslator.h"
22 #include "Term.h"
23
24 TotalDegreeCoefTermConsumer::
TotalDegreeCoefTermConsumer(auto_ptr<CoefBigTermConsumer> consumer,const TermTranslator & translator)25 TotalDegreeCoefTermConsumer(auto_ptr<CoefBigTermConsumer> consumer,
26 const TermTranslator& translator):
27 _consumer(*consumer),
28 _consumerOwner(consumer),
29 _translator(translator) {
30 ASSERT(_consumerOwner.get() != 0);
31 }
32
33 TotalDegreeCoefTermConsumer::
TotalDegreeCoefTermConsumer(CoefBigTermConsumer & consumer,const TermTranslator & translator)34 TotalDegreeCoefTermConsumer(CoefBigTermConsumer& consumer,
35 const TermTranslator& translator):
36 _consumer(consumer),
37 _translator(translator) {
38 }
39
consumeRing(const VarNames & names)40 void TotalDegreeCoefTermConsumer::consumeRing(const VarNames& names) {
41 // Do nothing since taking the total degree discards the original
42 // ring.
43 }
44
beginConsuming()45 void TotalDegreeCoefTermConsumer::beginConsuming() {
46 }
47
consume(const mpz_class & coef,const Term & term)48 void TotalDegreeCoefTermConsumer::consume(const mpz_class& coef,
49 const Term& term) {
50 ASSERT(term.getVarCount() == _translator.getVarCount());
51 if (coef == 0)
52 return;
53
54 // Compute total degree using _tmp.
55 _tmp = 0;
56 for (size_t var = 0; var < term.getVarCount(); ++var)
57 _tmp += _translator.getExponent(var, term);
58
59 _poly.add(coef, _tmp);
60 }
61
doneConsuming()62 void TotalDegreeCoefTermConsumer::doneConsuming() {
63 _poly.feedTo(_consumer, true);
64 }
65