21 #ifndef SRC_TIMING_RC_TREE_H_
22 #define SRC_TIMING_RC_TREE_H_
24 #include <boost/units/systems/si.hpp>
25 #include <boost/units/io.hpp>
27 #include <lemon/list_graph.h>
28 #include <lemon/maps.h>
30 #include <unordered_map>
34 namespace interconnection {
36 using namespace boost::units;
40 std::vector< std::size_t > m_pred;
41 std::vector< quantity<si::resistance> > m_resistances;
42 std::vector< quantity<si::capacitance> > m_capacitances;
43 std::unordered_map<std::string, std::size_t> m_taps;
48 void pred(std::size_t i, std::size_t pred);
49 void capacitance(std::size_t i, quantity<si::capacitance> cap);
50 void resistance(std::size_t i, quantity<si::resistance> res);
51 std::size_t node_count()
const {
54 std::size_t pred(std::size_t i)
const {
57 quantity<si::resistance> resistance(std::size_t i)
const {
58 return m_resistances[i];
60 quantity<si::capacitance> capacitance(std::size_t i)
const {
61 return m_capacitances[i];
64 std::size_t tap(
const std::string & name)
const {
65 return m_taps.at(name);
69 void tap(
const std::string & name, std::size_t value);
80 using graph_t =lemon::ListGraph;
83 graph_t::NodeMap<std::string> m_names;
84 graph_t::NodeMap<quantity<si::capacitance> > m_capacitances;
85 graph_t::EdgeMap<quantity<si::resistance> > m_resistances;
86 quantity<si::capacitance> m_lumped_capacitance;
87 std::vector< graph_t::Node > m_taps;
89 std::unordered_map<std::string, lemon::ListGraph::Node> m_name2node;
91 using capacitor_id = lemon::ListGraph::Node;
92 using resistor_id = lemon::ListGraph::Edge;
93 using resistor_it = lemon::ListGraph::IncEdgeIt;
116 quantity<si::capacitance>
lumped()
const {
117 return m_lumped_capacitance;
120 void tap_insert(capacitor_id cap);
128 capacitor_id capacitor_insert(std::string name);
146 return static_cast<std::size_t
>(lemon::countNodes(m_graph));
149 resistor_id resistor_insert(capacitor_id u, capacitor_id v,
150 quantity<si::resistance> res);
152 void capacitance(capacitor_id u, quantity<si::capacitance> cap);
154 capacitor_id capacitor_by_name(std::string name)
const {
155 return m_name2node.at(name);
157 quantity<si::capacitance> capacitance(capacitor_id u)
const {
158 return m_capacitances[u];
161 quantity<si::resistance> resistance(resistor_id uv)
const {
162 return m_resistances[uv];
165 resistor_it capacitor_resistors(capacitor_id u)
const {
166 return resistor_it(m_graph, u);
169 capacitor_id other_capacitor(resistor_id res, capacitor_id cap)
const {
170 return m_graph.oppositeNode(cap, res);
174 static resistor_it invalid() {
175 return lemon::INVALID;
178 const graph_t & graph()
const {
182 packed_rc_tree pack(capacitor_id source)
const;
std::size_t capacitor_count() const
Number of Capacitors.
Definition: rc_tree.h:145
Packed RC Tree Class.
Definition: rc_tree.h:39
quantity< si::capacitance > lumped() const
Returns the sum of the capacitance of all capacitors in the RC Tree.
Definition: rc_tree.h:116
RC Tree Class.
Definition: rc_tree.h:78
std::string capacitor_name(capacitor_id u) const
Return capacitor's name.
Definition: rc_tree.h:136