14 public std::iterator<std::forward_iterator_tag, WireId*>
20 return typeid(*this) ==
typeid(oth) &&
equal(oth);
56 inner(oth.inner->
clone()) {}
59 inner = oth.inner->
clone();
75 return inner == oth.inner || (*inner) == (*oth.inner);
114 return circuitId == oth.circuitId;
122 size_t id()
const {
return circuitId; }
164 virtual void toDot(std::basic_ostream<char>& out,
int indent=0) = 0;
173 void alter(
bool uprec =
true);
213 static size_t nextCircuitId;
size_t id() const
Definition: circuitTree.h:122
sign_t sign(int level=2)
Definition: circuitTree.cpp:20
virtual InnerIoIter * clone() const
Definition: circuitTree.h:26
virtual IoIter out_end() const =0
Definition: circuitTree.h:41
bool equals(CircuitTree *oth)
Definition: circuitTree.cpp:32
IoIter operator++(int)
Definition: circuitTree.h:67
virtual bool innerEqual(CircuitTree *othTree)=0
Definition: circuitTree.h:42
bool operator==(const IoIter &oth) const
Definition: circuitTree.h:74
sign_t sig
Definition: circuitTree.h:204
virtual WireId * nth_input(size_t circId) const =0
Get the nth input.
void alter(bool uprec=true)
Definition: circuitTree.cpp:92
virtual void unplug()
Unplug the circuit from its ancestor.
Definition: circuitTree.cpp:38
Definition: circuitTree.h:13
memo_ts_t timestamp
Definition: circuitTree.h:203
IoIter()
Definition: circuitTree.h:51
virtual sign_t innerSignature() const =0
bool operator==(const CircuitTree &oth) const
Definition: circuitTree.h:113
virtual void toDot(std::basic_ostream< char > &out, int indent=0)=0
bool operator!=(const IoIter &oth) const
Definition: circuitTree.h:78
Definition: circuitTree.h:45
virtual IoIter out_begin() const =0
virtual WireId * operator*()
Definition: circuitTree.h:25
virtual bool equal(const InnerIoIter &) const
Definition: circuitTree.h:34
CircuitGroup * ancestor()
Definition: circuitTree.h:119
std::ostream & indent(std::ostream &stream, int indent)
Definition: dotPrint.cpp:21
virtual CircType circType() const =0
virtual size_t inputCount() const =0
Get the number of inputs.
void unplug_common()
Common steps for every overridden implementation of unplug
Definition: circuitTree.cpp:85
MemoSign(memo_ts_t t, sign_t sig)
Definition: circuitTree.h:202
virtual void operator++()
Definition: circuitTree.h:18
Definition: circuitGroup.h:47
WireId * operator*() const
Definition: circuitTree.h:72
IoIter(InnerIoIter *ptr)
Definition: circuitTree.h:52
IoIter io_begin() const
Definition: circuitTree.h:137
virtual size_t outputCount() const =0
Get the number of outputs.
virtual sign_t computeSignature(int level)
Definition: circuitTree.cpp:46
virtual ~InnerIoIter()
Definition: circuitTree.h:17
virtual IoIter inp_begin() const =0
IoIter io_end() const
Definition: circuitTree.h:140
virtual ~CircuitTree()
Definition: circuitTree.cpp:17
memo_ts_t lastAlterationTime
Definition: circuitTree.h:199
memo_ts_t curHistoryTime
Current history "timestamp" for this circuit, used for memoization.
Definition: circuitTree.h:197
virtual WireId * nth_output(size_t circId) const =0
Get the nth input.
IoIter & operator++()
Definition: circuitTree.h:63
IoIter inp_end() const
Definition: circuitTree.h:128
CircuitGroup * ancestor_
Definition: circuitTree.h:210
bool operator!=(InnerIoIter &oth)
Definition: circuitTree.h:22
size_t memo_ts_t
Definition: circuitTree.h:194
IoIter & operator=(const IoIter &oth)
Definition: circuitTree.h:57
Definition: circuitTree.h:49
IoIter(const IoIter &oth)
Definition: circuitTree.h:55
CircuitTree()
Definition: circuitTree.cpp:10
Definition: circuitTree.h:43
std::vector< MemoSign > memoSig
Definition: circuitTree.h:207
Definition: circuitTree.h:44
Definition: circuitTree.h:10
~IoIter()
Definition: circuitTree.h:53
Definition: circuitTree.h:201
uint64_t sign_t
Type of a circuit signature.
Definition: isomatch.h:26
bool operator==(InnerIoIter &oth)
Definition: circuitTree.h:19
CircType
Definition: circuitTree.h:40