SECircuitNode.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 
15 #include <biogears/cdm/CommonDataModel.h>
16 
17 CDM_BIND_DECL(CircuitNodeData);
18 
19 #define CIRCUIT_NODE_TEMPLATE typename PotentialScalar, typename QuantityScalar
20 #define CIRCUIT_NODE_TYPES PotentialScalar, QuantityScalar
21 #define ELECTRICAL_CIRCUIT_NODE SEScalarElectricPotential, SEScalarElectricCharge
22 #define FLUID_CIRCUIT_NODE SEScalarPressure, SEScalarVolume
23 #define THERMAL_CIRCUIT_NODE SEScalarTemperature, SEScalarEnergy
24 
25 namespace biogears {
26 
27 template <CIRCUIT_NODE_TEMPLATE>
28 class SECircuitNode : public Loggable {
29  template <typename CircuitBindType, typename NodeType, typename CircuitNodeBindType, typename PathType, typename CircuitPathBindType>
30  friend class SECircuit;
31 
32 protected:
33  SECircuitNode(const char* name, Logger* logger);
34  SECircuitNode(const std::string& name, Logger* logger);
35 
36 public:
37  virtual ~SECircuitNode();
38 
39  virtual void Clear(); //clear memory
40 
41  virtual bool Load(const CDM::CircuitNodeData& in);
42  virtual CDM::CircuitNodeData* Unload() const = 0;
43 
44 protected:
45  virtual void Unload(CDM::CircuitNodeData& data) const;
46 
47 public:
48  virtual std::string GetName() const;
49  virtual const char* GetName_cStr() const;
50 
51  virtual bool HasPotential() const;
52  virtual PotentialScalar& GetPotential();
53  virtual bool HasNextPotential() const;
54  virtual PotentialScalar& GetNextPotential();
55 
56  virtual bool HasQuantity() const;
57  virtual QuantityScalar& GetQuantity();
58  virtual bool HasNextQuantity() const;
59  virtual QuantityScalar& GetNextQuantity();
60  virtual bool HasQuantityBaseline() const;
61  virtual QuantityScalar& GetQuantityBaseline();
62 
63 protected:
64  std::string m_Name;
65 
66  PotentialScalar* m_Potential;
67  PotentialScalar* m_NextPotential;
68 
70  // Quantity Types //
72  QuantityScalar* m_Quantity;
73  QuantityScalar* m_NextQuantity;
74  QuantityScalar* m_QuantityBaseline;
75 };
76 }
77 
78 #include <biogears/cdm/circuit/SECircuitNode.inl>
Definition: SECircuit.h:25
virtual void Clear()
QuantityScalar * m_QuantityBaseline
Definition: SECircuitNode.h:74
virtual PotentialScalar & GetNextPotential()
QuantityScalar * m_Quantity
Definition: SECircuitNode.h:72
QuantityScalar * m_NextQuantity
Definition: SECircuitNode.h:73
virtual bool HasQuantityBaseline() const
virtual bool HasPotential() const
Definition: Logger.h:27
Definition: Logger.h:75
virtual QuantityScalar & GetQuantity()
virtual QuantityScalar & GetQuantityBaseline()
virtual bool Load(const CDM::CircuitNodeData &in)
virtual const char * GetName_cStr() const
Class corresponding to the CircuitNodeData schema type.
Definition: Circuit.hxx:1241
virtual bool HasQuantity() const
std::string m_Name
Definition: SECircuitNode.h:64
virtual bool HasNextPotential() const
SECircuitNode(const char *name, Logger *logger)
virtual QuantityScalar & GetNextQuantity()
virtual PotentialScalar & GetPotential()
Definition: SEElectricalCircuit.h:18
Definition: SECircuitNode.h:28
virtual CDM::CircuitNodeData * Unload() const =0
PotentialScalar * m_Potential
Definition: SECircuitNode.h:66
virtual std::string GetName() const
PotentialScalar * m_NextPotential
Definition: SECircuitNode.h:67
virtual bool HasNextQuantity() const