CommonDefs.h
1/* Distributed under the Apache License, Version 2.0.
2 See accompanying NOTICE file for details.*/
3
4#pragma once
5
6#ifdef SHARED_CDM
7 #if defined (__clang__)
8 #define CDM_DECL
9 #elif defined(__gnu_linux__)
10 #define CDM_DECL __attribute__ ((visibility ("default")))
11 #else
12 #ifdef SHARED_CDM
13 #define CDM_DECL __declspec(dllexport)
14 #else
15 #define CDM_DECL __declspec(dllimport)
16 #endif
17 #endif
18#else
19 #define CDM_DECL
20#endif
21
22#if (0)
23#define DEBUGOUT(x) x
24#else
25#define DEBUGOUT(x)
26#endif
27
28
29#define PULSE_CDM pulse::cdm
30#define CDM_BIND pulse::cdm::bind
31
32#define CDM_BIND_DECL(type) \
33 namespace pulse { namespace cdm { namespace bind { class type; }}}
34#define CDM_BIND_DECL2(type) \
35 class SE##type;\
36 namespace pulse { namespace cdm { namespace bind { class type##Data; }}}
37
38#if defined(_MSC_VER)
39 // Modify the following defines if you have to target a platform prior to the ones specified below.
40 // Refer to MSDN for the latest info on corresponding values for different platforms.
41 #ifndef WINVER // Allow use of features specific to Windows XP or later.
42 #define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.
43 #endif
44
45 #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
46 #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
47 #endif
48
49 #ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
50 #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
51 #endif
52
53 #ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.
54 #define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.
55 #endif
56
57 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
58#endif
59
60// See https ://www.fluentcpp.com/2019/08/30/how-to-disable-a-warning-in-cpp/
61// When adding new warnings remember to add the DISABLE_ macro
62// for all three sections MSVC, GCC/CLANG, other
63#if defined(_MSC_VER)
64
65 //#pragma warning(disable:4100) // unreferenced formal parameter (intentional in base classes)
66
67 #define DISABLE_WARNING_PUSH __pragma(warning( push ))
68 #define DISABLE_WARNING_POP __pragma(warning( pop ))
69 #define DISABLE_WARNING(warningNumber) __pragma(warning( disable : warningNumber ))
70
71 #define PUSH_PROTO_WARNINGS \
72 DISABLE_WARNING_PUSH \
73 DISABLE_WARNING(4127) \
74 DISABLE_WARNING(4267)
75 #define POP_PROTO_WARNINGS DISABLE_WARNING_POP
76
77 #define PUSH_EIGEN_WARNINGS \
78 DISABLE_WARNING_PUSH \
79 DISABLE_WARNING(4127) \
80 DISABLE_WARNING(4267)
81 #define POP_EIGEN_WARNINGS DISABLE_WARNING_POP
82
83#elif defined(__GNUC__) || defined(__clang__)
84 #define DO_PRAGMA(X) _Pragma(#X)
85 #define DISABLE_WARNING_PUSH DO_PRAGMA(GCC diagnostic push)
86 #define DISABLE_WARNING_POP DO_PRAGMA(GCC diagnostic pop)
87 #define DISABLE_WARNING(warningName) DO_PRAGMA(GCC diagnostic ignored #warningName)
88
89 #define PUSH_PROTO_WARNINGS \
90 DISABLE_WARNING_PUSH
91 #define POP_PROTO_WARNINGS DISABLE_WARNING_POP
92
93 #define PUSH_EIGEN_WARNINGS \
94 DISABLE_WARNING_PUSH
95 #define POP_EIGEN_WARNINGS DISABLE_WARNING_POP
96
97#else
98 #define DISABLE_WARNING_PUSH
99 #define DISABLE_WARNING_POP
100 #define DISABLE_WARNING
101
102 #define PUSH_PROTO_WARNINGS
103 #define POP_PROTO_WARNINGS
104
105 #define PUSH_EIGEN_WARNINGS
106 #define POP_EIGEN_WARNINGS
107#endif
108
109
110#define _USE_MATH_DEFINES
111#include <memory>
112#include <stdio.h>
113#include <iostream>
114#include <fstream>
115#include <stdexcept>
116#include <algorithm>
117#include <cmath>
118#include <climits>
119#include <string>
120#include <math.h>
121#include <vector>
122#include <stack>
123#include <map>
124#include <set>
125
126#ifdef _MSC_VER
127#include <direct.h>
128#include <unordered_map>
129using namespace stdext;
130#else//if (__GCC__) || (__GNUC__)
131#include <unordered_map>
132#endif
133
134//Utilities
135enum class eSerializationFormat { JSON = 0, BINARY, VERBOSE_JSON,TEXT };
136
137struct CommonDataModelException : public std::runtime_error
138{
140 : std::runtime_error( "Common Data Model Error" ) {}
141
142 CommonDataModelException(const std::string& _Message)
143 : std::runtime_error(_Message) {}
144};
145// Basics
146#include "cdm/Macros.h"
147#include "cdm/utils/Logger.h"
148
149
150// General Enums
151// Keep enums in sync with appropriate schema/cdm/Enums.proto file !!
152//
153enum class eSide { NullSide = 0, Left, Right };
154extern const std::string& eSide_Name(eSide m);
155
156enum class eGate { NullGate = 0, Open, Closed };
157extern const std::string& eGate_Name(eGate m);
158
159enum class eSwitch { NullSwitch = 0, Off, On };
160extern const std::string& eSwitch_Name(eSwitch m);
161
162enum class eCharge { NullCharge = 0, Negative, Neutral, Positive };
163extern const std::string& eCharge_Name(eCharge m);
164
165enum class eBreathState { NoBreath=0,
166 PatientInhale, PatientPause, PatientExhale,
167 EquipmentInhale, EquipmentPause, EquipmentExhale,
168 ExpiratoryHold, InspiratoryHold };
169extern const std::string& eBreathState_Name(eBreathState m);
170
171enum class eDefaultType { Model = 0, Zero };
172extern const std::string& eDefaultType_Name(eDefaultType m);
173
174enum class eDriverWaveform { NullDriverWaveform = 0, Square,
175 AscendingRamp, DescendingRamp,
176 ExponentialGrowth, ExponentialDecay,
177 SinusoidalRise, SinusoidalFall,
178 SigmoidalRise, SigmoidalFall };
179extern const std::string& eDriverWaveform_Name(eDriverWaveform m);
180
181//
182// End General Enum
183
184// IF YOU ADD A NEW SCALAR TYPE
185// PLEASE UPDATE THE METHOD IN SEProperty.cpp
186// ALSO DECLARE A TEMPLATE CLASS AT THE BOTTOM OF SESCALAR.CPP
187
188class CCompoundUnit;
189
190// Used for overrides and modifiers, a super generic way of enumerating a list of properties
191// properties are an actual scalar member variable on an object
192// map<variable_name,SEScalarPair(value,unit)>
194{
195public:
196 SEScalarPair();
197 SEScalarPair(double v);
198 SEScalarPair(double v, const std::string& u);
199 SEScalarPair(double v, const CCompoundUnit& cc);
200 ~SEScalarPair() = default;
201 double value;
202 std::string unit;
203};
204using SEScalarProperties = std::map<std::string, SEScalarPair>;
205
206
207class SECurve;
208class SERunningAverage;
209class SEScalar; class SEUnitScalar; class SEGenericScalar; class NoUnit;
210class SEScalar0To1;
212class SEScalarAmount; class AmountUnit;
216class SEScalarArea; class AreaUnit;
224class SEScalarEnergy; class EnergyUnit;
228class SEScalarForce; class ForceUnit;
229class SEScalar0To1;
241class SEScalarLength; class LengthUnit;
244class SEScalarMass; class MassUnit;
252class SEScalarPower; class PowerUnit;
254class SEScalarPressure; class PressureUnit;
260class SEScalarTime; class TimeUnit;
262class SEScalarVolume; class VolumeUnit;
270
271class SEArray;
273
274class SEFunction;
277
278class SEHistogram;
280
281class SESegment;
283class SESegmentLinear;
Definition: SEScalarAmountPerMass.h:8
Definition: SEScalarAmountPerTime.h:8
Definition: SEScalarAmountPerVolume.h:8
Definition: SEScalarAmount.h:8
Definition: SEScalarAreaPerTimePressure.h:8
Definition: SEScalarArea.h:8
Definition: CompoundUnit.h:40
Definition: SEScalarElectricCapacitance.h:8
Definition: SEScalarElectricCharge.h:8
Definition: SEScalarElectricCurrent.h:8
Definition: SEScalarElectricInductance.h:8
Definition: SEScalarElectricPotential.h:8
Definition: SEScalarElectricResistance.h:8
Definition: SEScalarEnergyPerAmount.h:8
Definition: SEScalarEnergyPerMass.h:8
Definition: SEScalarEnergy.h:8
Definition: SEScalarEquivalentWeightPerVolume.h:8
Definition: SEScalarForce.h:8
Definition: SEScalarFrequency.h:8
Definition: SEScalarHeatCapacitancePerAmount.h:8
Definition: SEScalarHeatCapacitancePerMass.h:8
Definition: SEScalarHeatCapacitance.h:8
Definition: SEScalarHeatConductancePerArea.h:8
Definition: SEScalarHeatConductance.h:8
Definition: SEScalarHeatInductance.h:8
Definition: SEScalarHeatResistanceArea.h:8
Definition: SEScalarHeatResistance.h:8
Definition: SEScalarInversePressure.h:8
Definition: SEScalarInverseVolume.h:8
Definition: SEScalarLengthPerTimePressure.h:8
Definition: SEScalarLengthPerTime.h:8
Definition: SEScalarLength.h:8
Definition: SEScalarMassPerAmount.h:8
Definition: SEScalarMassPerAreaTime.h:8
Definition: SEScalarMassPerMass.h:8
Definition: SEScalarMassPerTime.h:8
Definition: SEScalarMassPerVolume.h:8
Definition: SEScalarMass.h:8
Definition: SEScalar.h:10
Definition: SEScalarOsmolality.h:8
Definition: SEScalarOsmolarity.h:8
Definition: SEScalarPowerPerAreaTemperatureToTheFourth.h:8
Definition: SEScalarPower.h:8
Definition: SEScalarPressurePerVolume.h:8
Definition: SEScalarPressureTimePerArea.h:8
Definition: SEScalarPressureTimePerVolumeArea.h:8
Definition: SEScalarPressureTimePerVolume.h:8
Definition: SEScalarPressureTimeSquaredPerVolume.h:8
Definition: SEScalarPressure.h:8
Definition: SEArrayElectricPotential.h:8
Definition: SEArray.h:8
Definition: SECurve.h:12
Definition: SEFunctionElectricPotentialVsTime.h:8
Definition: SEFunction.h:8
Definition: SEFunctionVolumeVsTime.h:8
If you want to querry what a scalar is and don't know what scalar type you have...
Definition: SEScalar.h:287
Definition: SEHistogramFractionVsLength.h:8
Definition: SEHistogram.h:8
Definition: SERunningAverage.h:8
Definition: SEScalar0To1.h:8
Definition: SEScalarAmount.h:25
Definition: SEScalarAmountPerMass.h:25
Definition: SEScalarAmountPerTime.h:29
Definition: SEScalarAmountPerVolume.h:30
Definition: SEScalarArea.h:25
Definition: SEScalarAreaPerTimePressure.h:27
Definition: SEScalarElectricCapacitance.h:24
Definition: SEScalarElectricCharge.h:24
Definition: SEScalarElectricCurrent.h:24
Definition: SEScalarElectricInductance.h:24
Definition: SEScalarElectricPotential.h:25
Definition: SEScalarElectricResistance.h:24
Definition: SEScalarEnergy.h:27
Definition: SEScalarEnergyPerAmount.h:25
Definition: SEScalarEnergyPerMass.h:27
Definition: SEScalarEquivalentWeightPerVolume.h:27
Definition: SEScalarForce.h:26
Definition: SEScalarFrequency.h:26
Definition: SEScalarHeatCapacitance.h:27
Definition: SEScalarHeatCapacitancePerAmount.h:24
Definition: SEScalarHeatCapacitancePerMass.h:27
Definition: SEScalarHeatConductance.h:27
Definition: SEScalarHeatConductancePerArea.h:26
Definition: SEScalarHeatInductance.h:24
Definition: SEScalarHeatResistanceArea.h:27
Definition: SEScalarHeatResistance.h:27
Definition: SEScalar.h:19
Definition: SEScalarInversePressure.h:27
Definition: SEScalarInverseVolume.h:25
Definition: SEScalarLength.h:29
Definition: SEScalarLengthPerTime.h:30
Definition: SEScalarLengthPerTimePressure.h:27
Definition: SEScalarMass.h:28
Definition: SEScalarMassPerAmount.h:34
Definition: SEScalarMassPerAreaTime.h:24
Definition: SEScalarMassPerMass.h:25
Definition: SEScalarMassPerTime.h:31
Definition: SEScalarMassPerVolume.h:37
Definition: SEScalarNegative1To1.h:8
Definition: SEScalarOsmolality.h:25
Definition: SEScalarOsmolarity.h:25
Definition: CommonDefs.h:194
double value
Definition: CommonDefs.h:201
std::string unit
Definition: CommonDefs.h:202
SEScalarPair()
Definition: SEScalar.cpp:26
~SEScalarPair()=default
Definition: SEScalarPower.h:29
Definition: SEScalarPowerPerAreaTemperatureToTheFourth.h:24
Definition: SEScalarPressure.h:29
Definition: SEScalarPressurePerVolume.h:26
Definition: SEScalarPressureTimePerArea.h:25
Definition: SEScalarPressureTimePerVolumeArea.h:26
Definition: SEScalarPressureTimePerVolume.h:29
Definition: SEScalarPressureTimeSquaredPerVolume.h:28
Definition: SEScalarTemperature.h:27
Definition: SEScalarTime.h:28
Definition: SEScalarVolume.h:28
Definition: SEScalarVolumePerPressure.h:28
Definition: SEScalarVolumePerTimeArea.h:26
Definition: SEScalarVolumePerTime.h:31
Definition: SEScalarVolumePerTimeMass.h:28
Definition: SEScalarVolumePerTimePressureArea.h:25
Definition: SEScalarVolumePerTimePressure.h:27
Definition: SESegmentConstant.h:9
Definition: SESegment.h:7
Definition: SESegmentLinear.h:9
Definition: SESegmentParabolic.h:9
Definition: SESegmentSigmoidal.h:9
Definition: SETemporalInterpolator.h:8
An interface to be used for gaining access to a scalar with any unit type
Definition: SEScalar.h:179
Definition: SEScalarTemperature.h:8
Definition: SEScalarTime.h:8
Definition: SEScalarVolumePerPressure.h:8
Definition: SEScalarVolumePerTimeArea.h:8
Definition: SEScalarVolumePerTimeMass.h:8
Definition: SEScalarVolumePerTimePressureArea.h:8
Definition: SEScalarVolumePerTimePressure.h:8
Definition: SEScalarVolumePerTime.h:8
Definition: SEScalarVolume.h:8
STL namespace.
Definition: CommonDefs.h:138
CommonDataModelException()
Definition: CommonDefs.h:139
CommonDataModelException(const std::string &_Message)
Definition: CommonDefs.h:142

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.