10#ifndef BIBASIS_JANETTREE_HPP
11#define BIBASIS_JANETTREE_HPP
47 template <
typename MonomType>
58 Node(
typename MonomType::Integer degree);
73 operator bool()
const;
79 typename MonomType::Integer
GetDegree()
const;
93 operator bool()
const;
100 typename MonomType::Integer
GetDegree()
const;
101 void Build(
typename MonomType::Integer degree,
typename MonomType::Integer var,
Triple<MonomType>* triple);
121 template <
typename MonomType>
130 template <
typename MonomType>
135 template <
typename MonomType>
141 template <
typename MonomType>
146 template <
typename MonomType>
152 template <
typename MonomType>
158 template <
typename MonomType>
164 template <
typename MonomType>
170 template <
typename MonomType>
176 template <
typename MonomType>
182 template <
typename MonomType>
188 template <
typename MonomType>
194 template <
typename MonomType>
200 template <
typename MonomType>
206 template <
typename MonomType>
211 template <
typename MonomType>
217 template <
typename MonomType>
223 template <
typename MonomType>
229 template <
typename MonomType>
232 return (*CurrentNode)->NextDegree;
235 template <
typename MonomType>
238 return (*CurrentNode)->NextVariable;
241 template <
typename MonomType>
244 return (*CurrentNode)->NextDegree;
247 template <
typename MonomType>
250 return (*CurrentNode)->NextVariable;
253 template <
typename MonomType>
259 template <
typename MonomType>
262 return (*CurrentNode)->CurrentTriple;
265 template <
typename MonomType>
268 return (*CurrentNode)->Degree;
271 template <
typename MonomType>
294 template <
typename MonomType>
305 template <
typename MonomType>
310 if ((*CurrentNode)->NextVariable)
319 template <
typename MonomType>
325 template <
typename MonomType>
332 template <
typename MonomType>
340 typename MonomType::Integer degree = monom.Degree();
341 typename MonomType::Integer var = 0;
349 if (nodeIterator.
GetDegree() != monom[var])
355 degree -= monom[var];
373 template <
typename MonomType>
381 typename MonomType::Integer degree = triple->
GetPolynomLm().Degree();
386 nodeIterator.
Build(degree, 0, triple);
390 typename MonomType::Integer var = 0;
400 nodeIterator.
Build(degree, var, triple);
412 nodeIterator.
Build(degree, var, triple);
419 template <
typename MonomType>
429 typename MonomType::Integer var = 0;
430 unsigned bifurcations = 0;
466 bool varDirection =
false;
484 while (bifurcations > 0)
532 Iterator tmpIterator = nodeIterator;
539 nodeIterator.
Clear();
543 template <
typename MonomType>
549 nodeIterator.
Clear();
553 template <
typename MonomType>
556 std::set<typename MonomType::Integer>
result;
561 typename MonomType::Integer var = 0;
ConstIterator GetNextDegree() const
MonomType::Integer GetDegree() const
ConstIterator GetNextVariable() const
ConstIterator(Node *node)
bool HasNextVariable() const
bool HasNextDegree() const
const Triple< MonomType > * GetTriple() const
ConstIterator GetNextVariable() const
ConstIterator GetNextDegree() const
void Build(typename MonomType::Integer degree, typename MonomType::Integer var, Triple< MonomType > *triple)
bool HasNextVariable() const
MonomType::Integer GetDegree() const
Triple< MonomType > *& GetTriple() const
bool HasNextDegree() const
void Insert(Triple< MonomType > *triple)
const Triple< MonomType > * Find(const MonomType &monom) const
void Delete(const Triple< MonomType > *triple)
std::set< typename MonomType::Integer > NonMulti(const Triple< MonomType > *triple) const
const MonomType & GetPolynomLm() const
VALGRIND_MAKE_MEM_DEFINED & result(result)
tbb::flow::continue_node< tbb::flow::continue_msg > Node
Triple< MonomType > * CurrentTriple
Node(typename MonomType::Integer degree)
MonomType::Integer Degree
BIBasis::Triple<MonomType> — (polynomial, ancestors, non-multiplicative variables) record driving Jan...