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