isomatch
circuitComb.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "circuitTree.h"
4 #include "gateExpression.h"
5 
6 class CircuitComb : public CircuitTree {
7  protected:
8  // ========= I/O ITERATOR =============================================
10  public: typedef std::vector<WireId*>::const_iterator LowIter;
11  private:
12  LowIter ptr;
13  const CircuitComb* circ;
14  public:
15  InnerIoIter(const CircuitComb* circ, LowIter lowIter);
17  : ptr(it.ptr), circ(it.circ) {}
18  virtual void operator++();
19  virtual WireId* operator*() { return *ptr; }
20  virtual InnerIoIter* clone() const {
21  return new InnerIoIter(*this);
22  }
23  protected:
24  virtual bool equal(const CircuitTree::InnerIoIter& oth_) const
25  {
26  const InnerIoIter& oth =
27  static_cast<const InnerIoIter&>(oth_);
28  return circ == oth.circ && ptr == oth.ptr;
29  }
30  };
31 
32  public:
33  IoIter inp_begin() const {
34  return IoIter(
35  new InnerIoIter(this, gateInputs.begin())
36  );
37  }
38  IoIter out_begin() const {
39  return IoIter(
40  new InnerIoIter(this, gateOutputs.begin())
41  );
42  }
43  IoIter out_end() const {
44  return IoIter(
45  new InnerIoIter(this, gateOutputs.end())
46  );
47  }
48  // ========= END I/O ITERATOR =========================================
49 
50  CircuitComb();
51  virtual ~CircuitComb();
52 
53  CircType circType() const { return CIRC_COMB; }
54 
56  void addInput(WireId* wire);
57 
61  void addOutput(ExpressionBase* expr, WireId* wire);
62 
64  const std::vector<WireId*>& inputs() const { return gateInputs; }
65 
67  const std::vector<WireId*>& outputs() const { return gateOutputs; }
68 
70  const std::vector<ExpressionBase*>& expressions() const {
71  return gateExprs;
72  }
73 
74  // Documentation in CircuitTree*
75  size_t inputCount() const;
76  size_t outputCount() const;
77  WireId* nth_input(size_t circId) const;
78  WireId* nth_output(size_t circId) const;
79 
80  void toDot(std::ostream& out, int indent=0);
81 
82  protected:
83  virtual sign_t innerSignature() const;
84  virtual bool innerEqual(CircuitTree* othTree);
85 
86  private:
87  std::vector<WireId*> gateInputs, gateOutputs;
88  std::vector<ExpressionBase*> gateExprs;
89 };
90 
virtual bool innerEqual(CircuitTree *othTree)
Definition: circuitComb.cpp:57
size_t outputCount() const
Get the number of outputs.
Definition: circuitComb.cpp:81
WireId * nth_input(size_t circId) const
Get the nth input.
Definition: circuitComb.cpp:85
InnerIoIter(const CircuitComb *circ, LowIter lowIter)
Definition: circuitComb.cpp:9
Definition: circuitTree.h:42
CircuitComb()
Definition: circuitComb.cpp:23
IoIter out_end() const
Definition: circuitComb.h:43
CircType circType() const
Definition: circuitComb.h:53
Definition: circuitTree.h:13
const std::vector< WireId * > & outputs() const
Definition: circuitComb.h:67
const std::vector< ExpressionBase * > & expressions() const
Definition: circuitComb.h:70
void toDot(std::ostream &out, int indent=0)
Definition: circuitComb.cpp:97
IoIter inp_begin() const
Definition: circuitComb.h:33
Definition: wireId.h:21
WireId * nth_output(size_t circId) const
Get the nth input.
Definition: circuitComb.cpp:91
virtual WireId * operator*()
Definition: circuitComb.h:19
const std::vector< WireId * > & inputs() const
Definition: circuitComb.h:64
virtual bool equal(const CircuitTree::InnerIoIter &oth_) const
Definition: circuitComb.h:24
std::ostream & indent(std::ostream &stream, int indent)
Definition: dotPrint.cpp:21
InnerIoIter(const InnerIoIter &it)
Definition: circuitComb.h:16
Definition: circuitComb.h:9
std::vector< WireId * >::const_iterator LowIter
Definition: circuitComb.h:10
virtual ~CircuitComb()
Definition: circuitComb.cpp:26
size_t inputCount() const
Get the number of inputs.
Definition: circuitComb.cpp:77
void addInput(WireId *wire)
Adds wire as the next input for this gate.
Definition: circuitComb.cpp:31
Definition: gateExpression.h:10
Definition: gateExpression.h:61
virtual InnerIoIter * clone() const
Definition: circuitComb.h:20
Definition: circuitComb.h:6
virtual sign_t innerSignature() const
Definition: circuitComb.cpp:45
Definition: circuitTree.h:49
IoIter out_begin() const
Definition: circuitComb.h:38
void addOutput(ExpressionBase *expr, WireId *wire)
Definition: circuitComb.cpp:37
Definition: circuitTree.h:10
uint64_t sign_t
Type of a circuit signature.
Definition: isomatch.h:26
virtual void operator++()
Definition: circuitComb.cpp:17
CircType
Definition: circuitTree.h:40