PolyBoRi
CTermGenerator.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
15 //*****************************************************************************
16 
17 #ifndef polybori_iterators_CTermGenerator_h_
18 #define polybori_iterators_CTermGenerator_h_
19 
20 // include basic definitions
21 #include <polybori/pbori_defs.h>
22 
23 // include polybori functionals
25 
26  //#include <polybori/BooleSet.h>
27 
28 
29 
31 
32 
33 template <class TermType, class BehaviourTag>
35 
36 
37 class BooleExponent;
38 template <class TermType>
40 
41 public:
42  typedef TermType value_type;
43  typedef value_type result_type;
44 
45  template <class SequenceType>
46  result_type operator()(const SequenceType& seq) const{
47 
48  value_type result;
49  result.reserve(seq.deg());
50  typename SequenceType::const_iterator
51  start(seq.begin()), finish(seq.end());
52 
53  while (start != finish){
54  result.push_back(*start);
55  ++start;
56  }
57  return result;
58  }
59 };
60 
61 template <class TermType>
62 class CTermGeneratorBase__<TermType, type_tag<CTypes::size_type> > {
63 public:
64  typedef TermType value_type;
65  typedef value_type result_type;
66 
67  template <class SequenceType>
68  result_type operator()(const SequenceType& seq) const{
69  return seq.deg();
70  }
71 };
72 
73 
74 template <class TermType>
76 public:
77  typedef TermType value_type;
78  typedef value_type result_type;
79 
80  template <class SequenceType>
81  result_type operator()(const SequenceType& seq) const{
82  return seq.deg();
83  }
84 };
85 
86 
88 
89 
90 template <class TermType>
92 
93 public:
94  typedef TermType value_type;
95  typedef value_type result_type;
96 
97  // typedef CTypes::manager_base manager_base;
98 
99 
102 
103  // typedef CTypes::manager_base data_type;
104  data_type m_data;
106 
107  CTermGeneratorBase__(const data_type& data): m_data(data) {}
108 
109  CTermGeneratorBase__(): m_data() {}
110 
111  template <class SequenceType>
112  result_type operator()(const SequenceType& seq) const {
114 
115  // Do not dereference empty sequence (corresponds to end())
116  PBORI_ASSERT(!seq.isZero());
117 
118  // @todo: avoid using manager_base here
119  typedef typename value_type::ring_type ring_type;
121  // value_type result((ring_type)manager_type(m_data));
122  value_type result((ring_type)(m_data));
123 
124  typename SequenceType::stack_reverse_iterator
125  start(seq.stackRBegin()), finish(seq.stackREnd());
126 
127 #ifndef PBORI_NO_TERMS_BY_TAIL
128  typename BooleSet::navigator navi(result.diagram().navigation());
129 
130  PBORI_ASSERT((start == finish) || !start->isConstant());
131  while((start != finish) &&
132  (start->elseBranch().isEmpty()) && (start->thenBranch() == navi) ) {
133  navi = *start;
134  ++start;
135  }
136 
137  result = value_type(dd_type(m_data, navi));
138 #endif
139 
140  while (start != finish){
141  result = result.change(**start);
142  ++start;
143  }
144 
145  return result;
146  }
147 };
148 
149 
150 template <class TermType>
152  public CTermGeneratorBase__<TermType, type_tag<TermType> > {
153 
154 };
155 
156 
157 template <class TermType>
159  public CTermGeneratorBase<TermType> {
160 public:
162 
164 
165  CTermGenerator(const data_type&): base() {}
166  CTermGenerator(const CTermGenerator& rhs): base(rhs) {}
167  CTermGenerator(): base() {}
168 
169 };
170 
171 
172 template <>
174  public CTermGeneratorBase__<BooleMonomial, type_tag<BooleMonomial> > {
175 public:
178  //typedef CTermGeneratorBase<term_type> base;
179  typedef base::data_type data_type;
180 
181  CTermGenerator(const data_type& data): base(data) {}
182  CTermGenerator(const CTermGenerator& rhs): base(rhs) {}
183  // CTermGenerator(): base() {}
184 };
185 
187 
188 #endif
This class is just a wrapper for using variables for storing indices as interim data structure for Bo...
Definition: BooleExponent.h:34
#define END_NAMESPACE_PBORI
Finish project's namespace.
Definition: pbori_defs.h:77
#define BEGIN_NAMESPACE_PBORI
Start project's namespace.
Definition: pbori_defs.h:74
int deg_type
Definition: groebner_defs.h:42
BoolePolyRing data_type
Definition: CTermGenerator.h:100
result_type operator()(const SequenceType &seq) const
Definition: CTermGenerator.h:112
CTermGeneratorBase< TermType > base
Definition: CTermGenerator.h:161
CTermGeneratorBase__(const data_type &data)
CCuddCore * m_data; // non-save variant.
Definition: CTermGenerator.h:107
This class reinterprets decicion diagram managers as Boolean polynomial rings, adds an ordering and v...
Definition: BoolePolyRing.h:40
BooleMonomial term_type
Definition: CTermGenerator.h:176
result_type operator()(const SequenceType &seq) const
Definition: CTermGenerator.h:46
base::data_type data_type
Definition: CTermGenerator.h:179
Definition: CTermGenerator.h:158
This class marks a given type.
Definition: pbori_func.h:613
data_type::dd_type dd_type
Definition: CTermGenerator.h:101
class BooleSet dd_type
set decision diagram type
Definition: BoolePolyRing.h:62
CTermGenerator(const CTermGenerator &rhs)
Definition: CTermGenerator.h:182
BoolePolyRing data_type
Definition: CTermGenerator.h:163
Definition: CTermGenerator.h:151
Definition: CTermGenerator.h:34
#define PBORI_ASSERT(arg)
Definition: pbori_defs.h:118
result_type operator()(const SequenceType &seq) const
Definition: CTermGenerator.h:68
result_type operator()(const SequenceType &seq) const
Definition: CTermGenerator.h:81
CTermGenerator(const data_type &data)
Definition: CTermGenerator.h:181
CTermGeneratorBase__< BooleMonomial, type_tag< BooleMonomial > > base
Definition: CTermGenerator.h:177
This class defines an iterator for navigating through then and else branches of ZDDs.
Definition: CCuddNavigator.h:36
This class is just a wrapper for using variables from cudd's decicion diagram.
Definition: BooleMonomial.h:50
CTermGenerator(const CTermGenerator &rhs)
Definition: CTermGenerator.h:166
This struct contains type definitions to be used in library classes.
Definition: pbori_defs.h:269
CTermGenerator(const data_type &)
Definition: CTermGenerator.h:165
CTermGenerator()
Definition: CTermGenerator.h:167