SECircuitManager.h
1 /**************************************************************************************
2 Copyright 2015 Applied Research Associates, Inc.
3 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4 this file except in compliance with the License. You may obtain a copy of the License
5 at:
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software distributed under
8 the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9 CONDITIONS OF ANY KIND, either express or implied. See the License for the
10 specific language governing permissions and limitations under the License.
11 **************************************************************************************/
12 
13 #pragma once
14 #include <biogears/cdm/circuit/electrical/SEElectricalCircuit.h>
15 #include <biogears/cdm/circuit/fluid/SEFluidCircuit.h>
16 #include <biogears/cdm/circuit/thermal/SEThermalCircuit.h>
17 
18 #include <biogears/schema/cdm/Properties.hxx>
19 
20 CDM_BIND_DECL(CircuitManagerData);
21 
22 #define CIRCUIT_LEDGER_TEMPLATE typename NodeType, typename PathType, typename CircuitType
23 #define CIRCUIT_LEDGER_TYPES NodeType, PathType, CircuitType
24 
25 namespace biogears {
26 
27 class SECircuitManager;
28 template <CIRCUIT_LEDGER_TEMPLATE>
29 
31  friend class SECircuitManager;
32 
33 protected:
35 
36 public:
37  virtual ~SECircuitLedger() { Clear(); };
38  void Clear()
39  {
43  }
44  std::map<std::string, NodeType*> nodes;
45  std::map<std::string, PathType*> paths;
46  std::map<std::string, CircuitType*> circuits;
47 };
48 
49 #define ELECTRICAL_LEDGER_TYPES SEElectricalCircuitNode, SEElectricalCircuitPath, SEElectricalCircuit
50 #define FLUID_LEDGER_TYPES SEFluidCircuitNode, SEFluidCircuitPath, SEFluidCircuit
51 #define THERMAL_LEDGER_TYPES SEThermalCircuitNode, SEThermalCircuitPath, SEThermalCircuit
52 
53 class BIOGEARS_API SECircuitManager : public Loggable {
54 public:
55  SECircuitManager(Logger* logger);
56  virtual ~SECircuitManager();
57 
58  virtual void Clear(); //clear memory
59 
60  virtual bool Load(const CDM::CircuitManagerData& in);
61  virtual CDM::CircuitManagerData* Unload() const;
62 
63 protected:
64  void Unload(CDM::CircuitManagerData& data) const;
65 
66 public:
67  void SetReadOnly(bool b);
68 
69 protected:
70 public:
71  virtual SEElectricalCircuitNode& CreateElectricalNode(const char* name) { return CreateNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
72  virtual void DeleteElectricalNode(const char* name) { DeleteNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
73  virtual bool HasElectricalNode(const char* name) const { return HasNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
74  virtual SEElectricalCircuitNode* GetElectricalNode(const char* name) { return GetNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
75  virtual const SEElectricalCircuitNode* GetElectricalNode(const char* name) const { return GetNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
76  virtual SEElectricalCircuitPath& CreateElectricalPath(SEElectricalCircuitNode& src, SEElectricalCircuitNode& tgt, const char* name) { return CreatePath<ELECTRICAL_LEDGER_TYPES>(src, tgt, name, m_ElectricalLedger); }
77  virtual void DeleteElectricalPath(const char* name) { DeletePath<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
78  virtual bool HasElectricalPath(const char* name) const { return HasPath<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
79  virtual SEElectricalCircuitPath* GetElectricalPath(const char* name) { return GetPath<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
80  virtual const SEElectricalCircuitPath* GetElectricalPath(const char* name) const { return GetPath<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
81  virtual SEElectricalCircuit& CreateElectricalCircuit(const char* name) { return CreateCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
82  virtual void DeleteElectricalCircuit(const char* name) { DeleteCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
83  virtual bool HasElectricalCircuit(const char* name) const { return HasCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
84  virtual SEElectricalCircuit* GetElectricalCircuit(const char* name) { return GetCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
85  virtual const SEElectricalCircuit* GetElectricalCircuit(const char* name) const { return GetCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
86 
87  virtual SEElectricalCircuitNode& CreateElectricalNode(const std::string& name) { return CreateNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
88  virtual void DeleteElectricalNode(const std::string& name) { DeleteNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
89  virtual bool HasElectricalNode(const std::string& name) const { return HasNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
90  virtual SEElectricalCircuitNode* GetElectricalNode(const std::string& name) { return GetNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
91  virtual const SEElectricalCircuitNode* GetElectricalNode(const std::string& name) const { return GetNode<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
92  virtual SEElectricalCircuitPath& CreateElectricalPath(SEElectricalCircuitNode& src, SEElectricalCircuitNode& tgt, const std::string& name) { return CreatePath<ELECTRICAL_LEDGER_TYPES>(src, tgt, name, m_ElectricalLedger); }
93  virtual void DeleteElectricalPath(const std::string& name) { DeletePath<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
94  virtual bool HasElectricalPath(const std::string& name) const { return HasPath<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
95  virtual SEElectricalCircuitPath* GetElectricalPath(const std::string& name) { return GetPath<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
96  virtual const SEElectricalCircuitPath* GetElectricalPath(const std::string& name) const { return GetPath<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
97  virtual SEElectricalCircuit& CreateElectricalCircuit(const std::string& name) { return CreateCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
98  virtual void DeleteElectricalCircuit(const std::string& name) { DeleteCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
99  virtual bool HasElectricalCircuit(const std::string& name) const { return HasCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
100  virtual SEElectricalCircuit* GetElectricalCircuit(const std::string& name) { return GetCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
101  virtual const SEElectricalCircuit* GetElectricalCircuit(const std::string& name) const { return GetCircuit<ELECTRICAL_LEDGER_TYPES>(name, m_ElectricalLedger); }
102  virtual void SetReadOnlyElectrical(bool b);
103 
104  virtual SEFluidCircuitNode& CreateFluidNode(const char* name) { return CreateNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
105  virtual void DeleteFluidNode(const char* name) { DeleteNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
106  virtual bool HasFluidNode(const char* name) const { return HasNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
107  virtual SEFluidCircuitNode* GetFluidNode(const char* name) { return GetNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
108  virtual const SEFluidCircuitNode* GetFluidNode(const char* name) const { return GetNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
109  virtual SEFluidCircuitPath& CreateFluidPath(SEFluidCircuitNode& src, SEFluidCircuitNode& tgt, const char* name) { return CreatePath<FLUID_LEDGER_TYPES>(src, tgt, name, m_FluidLedger); }
110  virtual void DeleteFluidPath(const char* name) { DeletePath<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
111  virtual bool HasFluidPath(const char* name) const { return HasPath<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
112  virtual SEFluidCircuitPath* GetFluidPath(const char* name) { return GetPath<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
113  virtual const SEFluidCircuitPath* GetFluidPath(const char* name) const { return GetPath<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
114  virtual SEFluidCircuit& CreateFluidCircuit(const char* name) { return CreateCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
115  virtual void DeleteFluidCircuit(const char* name) { DeleteCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
116  virtual bool HasFluidCircuit(const char* name) const { return HasCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
117  virtual SEFluidCircuit* GetFluidCircuit(const char* name) { return GetCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
118  virtual const SEFluidCircuit* GetFluidCircuit(const char* name) const { return GetCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
119 
120  virtual SEFluidCircuitNode& CreateFluidNode(const std::string& name) { return CreateNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
121  virtual void DeleteFluidNode(const std::string& name) { DeleteNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
122  virtual bool HasFluidNode(const std::string& name) const { return HasNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
123  virtual SEFluidCircuitNode* GetFluidNode(const std::string& name) { return GetNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
124  virtual const SEFluidCircuitNode* GetFluidNode(const std::string& name) const { return GetNode<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
125  virtual SEFluidCircuitPath& CreateFluidPath(SEFluidCircuitNode& src, SEFluidCircuitNode& tgt, const std::string& name) { return CreatePath<FLUID_LEDGER_TYPES>(src, tgt, name, m_FluidLedger); }
126  virtual void DeleteFluidPath(const std::string& name) { DeletePath<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
127  virtual bool HasFluidPath(const std::string& name) const { return HasPath<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
128  virtual SEFluidCircuitPath* GetFluidPath(const std::string& name) { return GetPath<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
129  virtual const SEFluidCircuitPath* GetFluidPath(const std::string& name) const { return GetPath<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
130  virtual SEFluidCircuit& CreateFluidCircuit(const std::string& name) { return CreateCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
131  virtual void DeleteFluidCircuit(const std::string& name) { DeleteCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
132  virtual bool HasFluidCircuit(const std::string& name) const { return HasCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
133  virtual SEFluidCircuit* GetFluidCircuit(const std::string& name) { return GetCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
134  virtual const SEFluidCircuit* GetFluidCircuit(const std::string& name) const { return GetCircuit<FLUID_LEDGER_TYPES>(name, m_FluidLedger); }
135  virtual void SetReadOnlyFluid(bool b);
136 
137  virtual SEThermalCircuitNode& CreateThermalNode(const char* name) { return CreateNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
138  virtual void DeleteThermalNode(const char* name) { DeleteNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
139  virtual bool HasThermalNode(const char* name) const { return HasNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
140  virtual SEThermalCircuitNode* GetThermalNode(const char* name) { return GetNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
141  virtual const SEThermalCircuitNode* GetThermalNode(const char* name) const { return GetNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
142  virtual SEThermalCircuitPath& CreateThermalPath(SEThermalCircuitNode& src, SEThermalCircuitNode& tgt, const char* name) { return CreatePath<THERMAL_LEDGER_TYPES>(src, tgt, name, m_ThermalLedger); }
143  virtual void DeleteThermalPath(const char* name) { DeletePath<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
144  virtual bool HasThermalPath(const char* name) const { return HasPath<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
145  virtual SEThermalCircuitPath* GetThermalPath(const char* name) { return GetPath<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
146  virtual const SEThermalCircuitPath* GetThermalPath(const char* name) const { return GetPath<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
147  virtual SEThermalCircuit& CreateThermalCircuit(const char* name) { return CreateCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
148  virtual void DeleteThermalCircuit(const char* name) { DeleteCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
149  virtual bool HasThermalCircuit(const char* name) const { return HasCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
150  virtual SEThermalCircuit* GetThermalCircuit(const char* name) { return GetCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
151  virtual const SEThermalCircuit* GetThermalCircuit(const char* name) const { return GetCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
152 
153  virtual SEThermalCircuitNode& CreateThermalNode(const std::string& name) { return CreateNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
154  virtual void DeleteThermalNode(const std::string& name) { DeleteNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
155  virtual bool HasThermalNode(const std::string& name) const { return HasNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
156  virtual SEThermalCircuitNode* GetThermalNode(const std::string& name) { return GetNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
157  virtual const SEThermalCircuitNode* GetThermalNode(const std::string& name) const { return GetNode<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
158  virtual SEThermalCircuitPath& CreateThermalPath(SEThermalCircuitNode& src, SEThermalCircuitNode& tgt, const std::string& name) { return CreatePath<THERMAL_LEDGER_TYPES>(src, tgt, name, m_ThermalLedger); }
159  virtual void DeleteThermalPath(const std::string& name) { DeletePath<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
160  virtual bool HasThermalPath(const std::string& name) const { return HasPath<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
161  virtual SEThermalCircuitPath* GetThermalPath(const std::string& name) { return GetPath<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
162  virtual const SEThermalCircuitPath* GetThermalPath(const std::string& name) const { return GetPath<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
163  virtual SEThermalCircuit& CreateThermalCircuit(const std::string& name) { return CreateCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
164  virtual void DeleteThermalCircuit(const std::string& name) { DeleteCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
165  virtual bool HasThermalCircuit(const std::string& name) const { return HasCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
166  virtual SEThermalCircuit* GetThermalCircuit(const std::string& name) { return GetCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
167  virtual const SEThermalCircuit* GetThermalCircuit(const std::string& name) const { return GetCircuit<THERMAL_LEDGER_TYPES>(name, m_ThermalLedger); }
168  virtual void SetReadOnlyThermal(bool b);
169 
170 protected:
171  template <CIRCUIT_LEDGER_TEMPLATE>
172  NodeType& CreateNode(const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
173  template <CIRCUIT_LEDGER_TEMPLATE>
174  NodeType& CreateNode(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
175  template <CIRCUIT_LEDGER_TEMPLATE>
176  void DeleteNode(const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
177  template <CIRCUIT_LEDGER_TEMPLATE>
178  void DeleteNode(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
179  template <CIRCUIT_LEDGER_TEMPLATE>
180  bool HasNode(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
181  template <CIRCUIT_LEDGER_TEMPLATE>
182  bool HasNode(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
183  template <CIRCUIT_LEDGER_TEMPLATE>
184  NodeType* GetNode(const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
185  template <CIRCUIT_LEDGER_TEMPLATE>
186  NodeType* GetNode(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
187  template <CIRCUIT_LEDGER_TEMPLATE>
188  const NodeType* GetNode(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
189  template <CIRCUIT_LEDGER_TEMPLATE>
190  const NodeType* GetNode(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
191  template <CIRCUIT_LEDGER_TEMPLATE>
192  PathType& CreatePath(NodeType& src, NodeType& tgt, const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
193  template <CIRCUIT_LEDGER_TEMPLATE>
194  PathType& CreatePath(NodeType& src, NodeType& tgt, const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
195  template <CIRCUIT_LEDGER_TEMPLATE>
196  void DeletePath(const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
197  template <CIRCUIT_LEDGER_TEMPLATE>
198  void DeletePath(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
199  template <CIRCUIT_LEDGER_TEMPLATE>
200  bool HasPath(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
201  template <CIRCUIT_LEDGER_TEMPLATE>
202  bool HasPath(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
203  template <CIRCUIT_LEDGER_TEMPLATE>
204  PathType* GetPath(const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
205  template <CIRCUIT_LEDGER_TEMPLATE>
206  PathType* GetPath(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
207  template <CIRCUIT_LEDGER_TEMPLATE>
208  const PathType* GetPath(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
209  template <CIRCUIT_LEDGER_TEMPLATE>
210  const PathType* GetPath(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
211  template <CIRCUIT_LEDGER_TEMPLATE>
212  CircuitType& CreateCircuit(const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
213  template <CIRCUIT_LEDGER_TEMPLATE>
214  CircuitType& CreateCircuit(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
215  template <CIRCUIT_LEDGER_TEMPLATE>
216  void DeleteCircuit(const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
217  template <CIRCUIT_LEDGER_TEMPLATE>
218  void DeleteCircuit(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
219  template <CIRCUIT_LEDGER_TEMPLATE>
220  bool HasCircuit(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
221  template <CIRCUIT_LEDGER_TEMPLATE>
222  bool HasCircuit(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
223  template <CIRCUIT_LEDGER_TEMPLATE>
224  CircuitType* GetCircuit(const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
225  template <CIRCUIT_LEDGER_TEMPLATE>
226  CircuitType* GetCircuit(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger);
227  template <CIRCUIT_LEDGER_TEMPLATE>
228  const CircuitType* GetCircuit(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
229  template <CIRCUIT_LEDGER_TEMPLATE>
230  const CircuitType* GetCircuit(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const;
231 
235 
236 };
237 
238 template <CIRCUIT_LEDGER_TEMPLATE>
240 {
241  return CreateNode(std::string{ name }, ledger);
242 }
243 //-------------------------------------------------------------------------------
244 template <CIRCUIT_LEDGER_TEMPLATE>
245 NodeType& SECircuitManager::CreateNode(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger)
246 {
247  NodeType* node = ledger.nodes[name];
248  if (node != nullptr) {
249  Error("Node already exists with name " + name + ", not creating a new node, returning the existing node");
250  return *node;
251  }
252  node = new NodeType(name, GetLogger());
253  ledger.nodes[name] = node;
254  return *node;
255 }
256 //-------------------------------------------------------------------------------
257 template <CIRCUIT_LEDGER_TEMPLATE>
259 {
260  DeleteNode(std::string{name}, ledger);
261 }
262 //-------------------------------------------------------------------------------
263 template <CIRCUIT_LEDGER_TEMPLATE>
265 {
266  PathType* path;
267  NodeType* node = GetNode(name, ledger);
268  if (node == nullptr)
269  return;
270  // Remove this node from any circuits
271  for (auto citr : ledger.circuits)
272  citr.second->RemoveNode(*node);
273  // Search the paths and delete any paths that has this node
274  // And remove those paths from any circuits
275  for (auto pitr = ledger.paths.begin(); pitr != ledger.paths.end();) {
276  if (pitr->second->GetSourceNode().GetName() == name) {
277  path = pitr->second;
278  ledger.paths.erase(pitr++);
279  for (auto citr : ledger.circuits)
280  citr.second->RemovePath(*path);
281  SAFE_DELETE(path);
282  } else
283  pitr++;
284  }
285  ledger.nodes.erase(node->GetName());
286  SAFE_DELETE(node);
287 }
288 //-------------------------------------------------------------------------------
289 template <CIRCUIT_LEDGER_TEMPLATE>
290 bool SECircuitManager::HasNode(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
291 {
292  return HasNode(std::string{ name }, ledger);
293 }
294 //-------------------------------------------------------------------------------
295 template <CIRCUIT_LEDGER_TEMPLATE>
296 bool SECircuitManager::HasNode(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
297 {
298  return ledger.nodes.find(name) != ledger.nodes.end();
299 }
300 //-------------------------------------------------------------------------------
301 template <CIRCUIT_LEDGER_TEMPLATE>
303 {
304  return GetNode(std::string{ name }, ledger);
305 }
306 //-------------------------------------------------------------------------------
307  template <CIRCUIT_LEDGER_TEMPLATE>
308 NodeType* SECircuitManager::GetNode(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger)
309 {
310  auto itr = ledger.nodes.find(name);
311  if (itr != ledger.nodes.end())
312  return itr->second;
313  return nullptr;
314 }
315 //-------------------------------------------------------------------------------
316 template <CIRCUIT_LEDGER_TEMPLATE>
317 const NodeType* SECircuitManager::GetNode(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
318 {
319  return GetNode(std::string{name}, ledger);
320 }
321 //-------------------------------------------------------------------------------
322 template <CIRCUIT_LEDGER_TEMPLATE>
323 const NodeType* SECircuitManager::GetNode(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
324 {
325  auto itr = ledger.nodes.find(name);
326  if (itr != ledger.nodes.end())
327  return itr->second;
328  return nullptr;
329 }
330 //-------------------------------------------------------------------------------
331 template <CIRCUIT_LEDGER_TEMPLATE>
332 PathType& SECircuitManager::CreatePath(NodeType& src, NodeType& tgt, const char* name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger)
333 {
334  return CreatePath(src, tgt, std::string{ name }, ledger);
335 }
336 //-------------------------------------------------------------------------------
337 template <CIRCUIT_LEDGER_TEMPLATE>
338 PathType& SECircuitManager::CreatePath(NodeType& src, NodeType& tgt, const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger)
339 {
340  PathType* path = ledger.paths[name];
341  if (path != nullptr) {
342  Error(" path already exists with name " + name + ", not creating a new path, returning the existing path");
343  return *path;
344  }
345  path = new PathType(src, tgt, name);
346  ledger.paths[name] = path;
347  return *path;
348 }
349 //-------------------------------------------------------------------------------
350 template <CIRCUIT_LEDGER_TEMPLATE>
352 {
353  DeletePath(std::string{ name }, ledger);
354 }
355 //-------------------------------------------------------------------------------
356 template <CIRCUIT_LEDGER_TEMPLATE>
358 {
359  PathType* path = GetPath(name, ledger);
360  if (path == nullptr)
361  return;
362  ledger.paths.erase(name);
363  for (auto itr : ledger.circuits)
364  itr.second->RemovePath(*path);
365  SAFE_DELETE(path);
366 }
367 //-------------------------------------------------------------------------------
368 template <CIRCUIT_LEDGER_TEMPLATE>
369 bool SECircuitManager::HasPath(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
370 {
371  return HasPath(std::string{ name }, ledger);
372 }
373 //-------------------------------------------------------------------------------
374 template <CIRCUIT_LEDGER_TEMPLATE>
375 bool SECircuitManager::HasPath(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
376 {
377  return ledger.paths.find(name) != ledger.paths.end();
378 }
379 //-------------------------------------------------------------------------------
380 template <CIRCUIT_LEDGER_TEMPLATE>
382 {
383  return GetPath(std::string{ name }, ledger);
384 }
385 //-------------------------------------------------------------------------------
386 template <CIRCUIT_LEDGER_TEMPLATE>
387 PathType* SECircuitManager::GetPath(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger)
388 {
389  auto itr = ledger.paths.find(name);
390  if (itr != ledger.paths.end())
391  return itr->second;
392  return nullptr;
393 }
394 //-------------------------------------------------------------------------------
395 template <CIRCUIT_LEDGER_TEMPLATE>
396 const PathType* SECircuitManager::GetPath(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
397 {
398  return GetPath(std::string{ name }, ledger);
399 }
400 //-------------------------------------------------------------------------------
401 template <CIRCUIT_LEDGER_TEMPLATE>
402 const PathType* SECircuitManager::GetPath(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
403 {
404  auto itr = ledger.paths.find(name);
405  if (itr != ledger.paths.end())
406  return itr->second;
407  return nullptr;
408 }
409 //-------------------------------------------------------------------------------
410 template <CIRCUIT_LEDGER_TEMPLATE>
412 {
413  return CreateCircuit(std::string{ name }, ledger);
414 }
415 //-------------------------------------------------------------------------------
416 template <CIRCUIT_LEDGER_TEMPLATE>
417 CircuitType& SECircuitManager::CreateCircuit(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger)
418 {
419  CircuitType* circuit = ledger.circuits[name];
420  if (circuit != nullptr) {
421  Error(" Circuit already exists with name " + name + ", not creating a new circuit, returning the existing circuit");
422  return *circuit;
423  }
424  circuit = new CircuitType(name, *this);
425  ledger.circuits[name] = circuit;
426  return *circuit;
427 }
428 //-------------------------------------------------------------------------------
429 template <CIRCUIT_LEDGER_TEMPLATE>
431 {
432  return DeleteCircuit(std::string{ name }, ledger);
433 }
434 //-------------------------------------------------------------------------------
435 template <CIRCUIT_LEDGER_TEMPLATE>
437 {
438  CircuitType* circuit = GetCircuit(name, ledger);
439  if (circuit == nullptr)
440  return;
441  ledger.circuits.erase(name);
442  SAFE_DELETE(circuit);
443 }
444 //-------------------------------------------------------------------------------
445 template <CIRCUIT_LEDGER_TEMPLATE>
446 bool SECircuitManager::HasCircuit(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
447 {
448  return HasCircuit(std::string{ name }, ledger);
449 }
450 //-------------------------------------------------------------------------------
451 template <CIRCUIT_LEDGER_TEMPLATE>
452 bool SECircuitManager::HasCircuit(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
453 {
454  return ledger.circuits.find(name) != ledger.circuits.end();
455 }
456 //-------------------------------------------------------------------------------
457 template <CIRCUIT_LEDGER_TEMPLATE>
459 {
460  return GetCircuit(std::string{ name }, ledger);
461 }
462 //-------------------------------------------------------------------------------
463 template <CIRCUIT_LEDGER_TEMPLATE>
464 CircuitType* SECircuitManager::GetCircuit(const std::string& name, SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger)
465 {
466  auto itr = ledger.circuits.find(name);
467  if (itr != ledger.circuits.end())
468  return itr->second;
469  return nullptr;
470 }
471 //-------------------------------------------------------------------------------
472 template <CIRCUIT_LEDGER_TEMPLATE>
473 const CircuitType* SECircuitManager::GetCircuit(const char* name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
474 {
475  return GetCircuit(std::string{ name }, ledger);
476 }
477 //-------------------------------------------------------------------------------
478 template <CIRCUIT_LEDGER_TEMPLATE>
479 const CircuitType* SECircuitManager::GetCircuit(const std::string& name, const SECircuitLedger<CIRCUIT_LEDGER_TYPES>& ledger) const
480 {
481  auto itr = ledger.circuits.find(name);
482  if (itr != ledger.circuits.end())
483  return itr->second;
484  return nullptr;
485 }
486 //-------------------------------------------------------------------------------
487 
488 }
virtual bool HasThermalPath(const std::string &name) const
Definition: SECircuitManager.h:160
virtual const SEFluidCircuit * GetFluidCircuit(const std::string &name) const
Definition: SECircuitManager.h:134
virtual void DeleteFluidNode(const char *name)
Definition: SECircuitManager.h:105
virtual bool HasFluidNode(const char *name) const
Definition: SECircuitManager.h:106
virtual const SEElectricalCircuitNode * GetElectricalNode(const std::string &name) const
Definition: SECircuitManager.h:91
bool HasNode(const char *name, const SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger) const
Definition: SECircuitManager.h:290
void Clear()
Definition: SECircuitManager.h:38
virtual void DeleteFluidCircuit(const char *name)
Definition: SECircuitManager.h:115
SECircuitLedger< SEFluidCircuitNode, SEFluidCircuitPath, SEFluidCircuit > m_FluidLedger
Definition: SECircuitManager.h:233
virtual SEFluidCircuit & CreateFluidCircuit(const char *name)
Definition: SECircuitManager.h:114
Definition: SECircuitManager.h:30
virtual const SEFluidCircuitPath * GetFluidPath(const char *name) const
Definition: SECircuitManager.h:113
virtual void DeleteFluidCircuit(const std::string &name)
Definition: SECircuitManager.h:131
virtual void DeleteElectricalNode(const std::string &name)
Definition: SECircuitManager.h:88
std::map< std::string, NodeType * > nodes
Definition: SECircuitManager.h:44
virtual bool HasFluidPath(const std::string &name) const
Definition: SECircuitManager.h:127
Definition: SEThermalCircuitPath.h:25
bool HasCircuit(const char *name, const SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger) const
Definition: SECircuitManager.h:446
virtual SEElectricalCircuitPath * GetElectricalPath(const char *name)
Definition: SECircuitManager.h:79
virtual const SEFluidCircuitNode * GetFluidNode(const std::string &name) const
Definition: SECircuitManager.h:124
SECircuitLedger< SEThermalCircuitNode, SEThermalCircuitPath, SEThermalCircuit > m_ThermalLedger
Definition: SECircuitManager.h:234
virtual SEThermalCircuitPath * GetThermalPath(const char *name)
Definition: SECircuitManager.h:145
virtual void DeleteFluidPath(const char *name)
Definition: SECircuitManager.h:110
virtual SEFluidCircuit * GetFluidCircuit(const std::string &name)
Definition: SECircuitManager.h:133
virtual void DeleteElectricalCircuit(const std::string &name)
Definition: SECircuitManager.h:98
void DeletePath(const char *name, SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger)
Definition: SECircuitManager.h:351
virtual const SEElectricalCircuit * GetElectricalCircuit(const char *name) const
Definition: SECircuitManager.h:85
virtual bool HasThermalNode(const std::string &name) const
Definition: SECircuitManager.h:155
virtual SEElectricalCircuit * GetElectricalCircuit(const char *name)
Definition: SECircuitManager.h:84
virtual bool HasThermalCircuit(const char *name) const
Definition: SECircuitManager.h:149
virtual void DeleteElectricalCircuit(const char *name)
Definition: SECircuitManager.h:82
virtual void DeleteFluidNode(const std::string &name)
Definition: SECircuitManager.h:121
bool HasPath(const char *name, const SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger) const
Definition: SECircuitManager.h:369
virtual bool HasElectricalCircuit(const char *name) const
Definition: SECircuitManager.h:83
virtual const SEElectricalCircuit * GetElectricalCircuit(const std::string &name) const
Definition: SECircuitManager.h:101
virtual SEThermalCircuit * GetThermalCircuit(const char *name)
Definition: SECircuitManager.h:150
SECircuitLedger()
Definition: SECircuitManager.h:34
virtual ~SECircuitLedger()
Definition: SECircuitManager.h:37
NodeType & CreateNode(const char *name, SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger)
Definition: SECircuitManager.h:239
Definition: SEElectricalCircuit.h:21
virtual const SEThermalCircuit * GetThermalCircuit(const std::string &name) const
Definition: SECircuitManager.h:167
virtual const SEElectricalCircuitPath * GetElectricalPath(const std::string &name) const
Definition: SECircuitManager.h:96
NodeType * GetNode(const char *name, SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger)
Definition: SECircuitManager.h:302
virtual SEThermalCircuitNode & CreateThermalNode(const std::string &name)
Definition: SECircuitManager.h:153
Definition: SEFluidCircuitPath.h:25
virtual Logger * GetLogger() const
Definition: Logger.cpp:353
virtual SEThermalCircuitPath & CreateThermalPath(SEThermalCircuitNode &src, SEThermalCircuitNode &tgt, const char *name)
Definition: SECircuitManager.h:142
Definition: SEElectricalCircuitPath.h:25
PathType & CreatePath(NodeType &src, NodeType &tgt, const char *name, SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger)
Definition: SECircuitManager.h:332
virtual const SEThermalCircuitNode * GetThermalNode(const char *name) const
Definition: SECircuitManager.h:141
virtual const SEFluidCircuitPath * GetFluidPath(const std::string &name) const
Definition: SECircuitManager.h:129
virtual const SEFluidCircuitNode * GetFluidNode(const char *name) const
Definition: SECircuitManager.h:108
Definition: Logger.h:27
virtual bool HasFluidPath(const char *name) const
Definition: SECircuitManager.h:111
virtual const SEThermalCircuit * GetThermalCircuit(const char *name) const
Definition: SECircuitManager.h:151
virtual SEThermalCircuit & CreateThermalCircuit(const char *name)
Definition: SECircuitManager.h:147
Definition: Logger.h:75
virtual bool HasThermalCircuit(const std::string &name) const
Definition: SECircuitManager.h:165
Definition: SEFluidCircuitNode.h:21
virtual void DeleteFluidPath(const std::string &name)
Definition: SECircuitManager.h:126
std::map< std::string, CircuitType * > circuits
Definition: SECircuitManager.h:46
virtual SEFluidCircuitPath * GetFluidPath(const char *name)
Definition: SECircuitManager.h:112
virtual bool HasElectricalCircuit(const std::string &name) const
Definition: SECircuitManager.h:99
virtual SEThermalCircuit * GetThermalCircuit(const std::string &name)
Definition: SECircuitManager.h:166
virtual SEFluidCircuitPath * GetFluidPath(const std::string &name)
Definition: SECircuitManager.h:128
virtual SEThermalCircuitNode & CreateThermalNode(const char *name)
Definition: SECircuitManager.h:137
virtual SEThermalCircuitNode * GetThermalNode(const char *name)
Definition: SECircuitManager.h:140
virtual bool HasElectricalPath(const std::string &name) const
Definition: SECircuitManager.h:94
Definition: SEFluidCircuit.h:20
virtual void DeleteElectricalNode(const char *name)
Definition: SECircuitManager.h:72
virtual bool HasThermalNode(const char *name) const
Definition: SECircuitManager.h:139
virtual bool HasElectricalPath(const char *name) const
Definition: SECircuitManager.h:78
virtual SEThermalCircuit & CreateThermalCircuit(const std::string &name)
Definition: SECircuitManager.h:163
virtual void DeleteThermalCircuit(const std::string &name)
Definition: SECircuitManager.h:164
virtual const SEElectricalCircuitNode * GetElectricalNode(const char *name) const
Definition: SECircuitManager.h:75
virtual const SEThermalCircuitPath * GetThermalPath(const char *name) const
Definition: SECircuitManager.h:146
Definition: SEThermalCircuitNode.h:20
virtual void DeleteThermalPath(const char *name)
Definition: SECircuitManager.h:143
virtual const SEElectricalCircuitPath * GetElectricalPath(const char *name) const
Definition: SECircuitManager.h:80
virtual void DeleteThermalNode(const char *name)
Definition: SECircuitManager.h:138
virtual SEFluidCircuit & CreateFluidCircuit(const std::string &name)
Definition: SECircuitManager.h:130
virtual bool HasFluidCircuit(const std::string &name) const
Definition: SECircuitManager.h:132
virtual void DeleteThermalPath(const std::string &name)
Definition: SECircuitManager.h:159
virtual SEElectricalCircuitNode & CreateElectricalNode(const std::string &name)
Definition: SECircuitManager.h:87
std::map< std::string, PathType * > paths
Definition: SECircuitManager.h:45
virtual const SEThermalCircuitPath * GetThermalPath(const std::string &name) const
Definition: SECircuitManager.h:162
virtual bool HasElectricalNode(const char *name) const
Definition: SECircuitManager.h:73
virtual SEElectricalCircuitNode & CreateElectricalNode(const char *name)
Definition: SECircuitManager.h:71
virtual SEElectricalCircuitNode * GetElectricalNode(const std::string &name)
Definition: SECircuitManager.h:90
virtual SEElectricalCircuitPath & CreateElectricalPath(SEElectricalCircuitNode &src, SEElectricalCircuitNode &tgt, const char *name)
Definition: SECircuitManager.h:76
virtual bool HasThermalPath(const char *name) const
Definition: SECircuitManager.h:144
virtual const SEFluidCircuit * GetFluidCircuit(const char *name) const
Definition: SECircuitManager.h:118
PathType * GetPath(const char *name, SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger)
Definition: SECircuitManager.h:381
virtual void DeleteThermalNode(const std::string &name)
Definition: SECircuitManager.h:154
virtual SEElectricalCircuitPath & CreateElectricalPath(SEElectricalCircuitNode &src, SEElectricalCircuitNode &tgt, const std::string &name)
Definition: SECircuitManager.h:92
virtual void DeleteElectricalPath(const std::string &name)
Definition: SECircuitManager.h:93
virtual void DeleteElectricalPath(const char *name)
Definition: SECircuitManager.h:77
Class corresponding to the CircuitManagerData schema type.
Definition: Circuit.hxx:8956
virtual SEElectricalCircuitPath * GetElectricalPath(const std::string &name)
Definition: SECircuitManager.h:95
virtual SEElectricalCircuit & CreateElectricalCircuit(const char *name)
Definition: SECircuitManager.h:81
Definition: SEElectricalCircuitNode.h:21
virtual bool HasElectricalNode(const std::string &name) const
Definition: SECircuitManager.h:89
virtual SEElectricalCircuitNode * GetElectricalNode(const char *name)
Definition: SECircuitManager.h:74
virtual bool HasFluidCircuit(const char *name) const
Definition: SECircuitManager.h:116
void DeleteNode(const char *name, SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger)
Definition: SECircuitManager.h:258
virtual void DeleteThermalCircuit(const char *name)
Definition: SECircuitManager.h:148
virtual SEFluidCircuitNode & CreateFluidNode(const char *name)
Definition: SECircuitManager.h:104
virtual SEElectricalCircuit * GetElectricalCircuit(const std::string &name)
Definition: SECircuitManager.h:100
CircuitType & CreateCircuit(const char *name, SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger)
Definition: SECircuitManager.h:411
virtual SEFluidCircuitNode & CreateFluidNode(const std::string &name)
Definition: SECircuitManager.h:120
virtual SEFluidCircuitNode * GetFluidNode(const char *name)
Definition: SECircuitManager.h:107
void DELETE_MAP_SECOND(std::map< T, K > &map)
Definition: Macros.h:114
virtual SEFluidCircuitPath & CreateFluidPath(SEFluidCircuitNode &src, SEFluidCircuitNode &tgt, const char *name)
Definition: SECircuitManager.h:109
virtual void Error(const char *msg, const char *origin="") const
Definition: Logger.cpp:249
Definition: SEThermalCircuit.h:20
Definition: SEElectricalCircuit.h:18
virtual bool HasFluidNode(const std::string &name) const
Definition: SECircuitManager.h:122
virtual SEThermalCircuitPath * GetThermalPath(const std::string &name)
Definition: SECircuitManager.h:161
virtual const SEThermalCircuitNode * GetThermalNode(const std::string &name) const
Definition: SECircuitManager.h:157
virtual SEElectricalCircuit & CreateElectricalCircuit(const std::string &name)
Definition: SECircuitManager.h:97
SECircuitLedger< SEElectricalCircuitNode, SEElectricalCircuitPath, SEElectricalCircuit > m_ElectricalLedger
Definition: SECircuitManager.h:232
virtual SEFluidCircuitPath & CreateFluidPath(SEFluidCircuitNode &src, SEFluidCircuitNode &tgt, const std::string &name)
Definition: SECircuitManager.h:125
Definition: SECircuitManager.h:53
virtual SEThermalCircuitPath & CreateThermalPath(SEThermalCircuitNode &src, SEThermalCircuitNode &tgt, const std::string &name)
Definition: SECircuitManager.h:158
virtual SEThermalCircuitNode * GetThermalNode(const std::string &name)
Definition: SECircuitManager.h:156
CircuitType * GetCircuit(const char *name, SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger)
Definition: SECircuitManager.h:458
void DeleteCircuit(const char *name, SECircuitLedger< CIRCUIT_LEDGER_TYPES > &ledger)
Definition: SECircuitManager.h:430
virtual SEFluidCircuit * GetFluidCircuit(const char *name)
Definition: SECircuitManager.h:117
virtual SEFluidCircuitNode * GetFluidNode(const std::string &name)
Definition: SECircuitManager.h:123