isomatch
circuitTristate.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "circuitTree.h"
4 
5 class CircuitTristate : public CircuitTree {
6  protected:
7  // ========= I/O ITERATOR =============================================
9  WireId* ptr;
10  const CircuitTristate* circ;
11  public:
12  InnerIoIter(const CircuitTristate* circ, WireId* wire)
13  : ptr(wire), circ(circ) {}
15  : ptr(it.ptr), circ(it.circ) {}
16  virtual void operator++();
17  virtual WireId* operator*() { return ptr; }
18  virtual InnerIoIter* clone() const {
19  return new InnerIoIter(*this);
20  }
21  private:
22  virtual bool equal(const CircuitTree::InnerIoIter& oth_) const
23  {
24  const InnerIoIter& oth =
25  static_cast<const InnerIoIter&>(oth_);
26  return ptr == oth.ptr && circ == oth.circ;
27  }
28  };
29 
30  public:
31  IoIter inp_begin() const {
32  return IoIter(
33  new InnerIoIter(this, wireInput)
34  );
35  }
36  IoIter out_begin() const {
37  return IoIter(
38  new InnerIoIter(this, wireOutput)
39  );
40  }
41  IoIter out_end() const {
42  return IoIter(
43  new InnerIoIter(this, NULL)
44  );
45  }
46  // ========= END I/O ITERATOR =========================================
47 
49 
50  CircType circType() const { return CIRC_TRI; }
51 
53  const WireId* input() const { return wireInput; }
54 
56  const WireId* output() const { return wireOutput; }
57 
59  const WireId* enable() const { return wireEnable; }
60 
61  // Documentation in CircuitTree*
62  size_t inputCount() const;
63  size_t outputCount() const;
64  WireId* nth_input(size_t circId) const;
65  WireId* nth_output(size_t circId) const;
66 
67  void toDot(std::basic_ostream<char>& out, int indent=0);
68 
69  protected:
70  virtual sign_t innerSignature() const;
71  virtual bool innerEqual(CircuitTree* othTree);
72 
73  private:
74  WireId *wireInput, *wireOutput, *wireEnable;
75 };
76 
void toDot(std::basic_ostream< char > &out, int indent=0)
Definition: circuitTristate.cpp:57
IoIter out_end() const
Definition: circuitTristate.h:41
size_t inputCount() const
Get the number of inputs.
Definition: circuitTristate.cpp:35
IoIter out_begin() const
Definition: circuitTristate.h:36
Definition: circuitTree.h:13
Definition: circuitTristate.h:8
virtual bool innerEqual(CircuitTree *othTree)
Definition: circuitTristate.cpp:31
const WireId * enable() const
Definition: circuitTristate.h:59
CircuitTristate(WireId *from, WireId *to, WireId *enable)
Definition: circuitTristate.cpp:18
Definition: wireId.h:21
IoIter inp_begin() const
Definition: circuitTristate.h:31
const WireId * output() const
Definition: circuitTristate.h:56
virtual WireId * operator*()
Definition: circuitTristate.h:17
std::ostream & indent(std::ostream &stream, int indent)
Definition: dotPrint.cpp:21
virtual void operator++()
Definition: circuitTristate.cpp:9
virtual InnerIoIter * clone() const
Definition: circuitTristate.h:18
InnerIoIter(const InnerIoIter &it)
Definition: circuitTristate.h:14
virtual sign_t innerSignature() const
Definition: circuitTristate.cpp:26
size_t outputCount() const
Get the number of outputs.
Definition: circuitTristate.cpp:39
WireId * nth_output(size_t circId) const
Get the nth input.
Definition: circuitTristate.cpp:51
WireId * nth_input(size_t circId) const
Get the nth input.
Definition: circuitTristate.cpp:43
CircType circType() const
Definition: circuitTristate.h:50
Definition: circuitTree.h:49
Definition: circuitTristate.h:5
Definition: circuitTree.h:44
Definition: circuitTree.h:10
const WireId * input() const
Definition: circuitTristate.h:53
uint64_t sign_t
Type of a circuit signature.
Definition: isomatch.h:26
InnerIoIter(const CircuitTristate *circ, WireId *wire)
Definition: circuitTristate.h:12
CircType
Definition: circuitTree.h:40