What’s New in the Pulse Physiology Engine 4.4.0
×
PulseEngine.h
1/* Distributed under the Apache License, Version 2.0.
2 See accompanying NOTICE file for details.*/
3
4#pragma once
5
6#include "engine/CommonDefs.h"
7#include "cdm/PhysiologyEngine.h"
8#include "cdm/utils/ScopedMutex.h"
9
10struct PULSE_DECL PulseBuildInformation
11{
12 static std::string Time();
13 static std::string Hash();
14 static std::string Version();
15};
16
17enum class eModelType { HumanAdultWholeBody=0, HumanAdultVentilationMechanics, HumanAdultHemodynamics };
18PULSE_DECL bool eModelType_ValueOf(const std::string s, eModelType& t);
19
20PULSE_DECL std::unique_ptr<PhysiologyEngine> CreatePulseEngine(eModelType type = eModelType::HumanAdultWholeBody, Logger* logger = nullptr);
21
22namespace pulse
23{
25 // All Compartments used by Pulse //
27
28 class Graph
29 {
30 public:
31 DEFINE_STATIC_STRING(ActiveCardiovascular);
32 DEFINE_STATIC_STRING(Cardiovascular);
33 DEFINE_STATIC_STRING(Renal);
34 DEFINE_STATIC_STRING(ExtracorporealMembraneOxygenationDevice);
35 DEFINE_STATIC_STRING(ExtracorporealMembraneOxygenationDeviceGas);
36 DEFINE_STATIC_STRING(Respiratory);
37 DEFINE_STATIC_STRING(RespiratoryAndAnesthesiaMachine);
38 DEFINE_STATIC_STRING(RespiratoryAndBagValveMask);
39 DEFINE_STATIC_STRING(RespiratoryAndInhaler);
40 DEFINE_STATIC_STRING(RespiratoryAndMechanicalVentilation);
41 DEFINE_STATIC_STRING(RespiratoryAndMechanicalVentilator);
42 DEFINE_STATIC_STRING(RespiratoryAndNasalCannula);
43 DEFINE_STATIC_STRING(RespiratoryAndNonRebreatherMask);
44 DEFINE_STATIC_STRING(RespiratoryAndSimpleMask);
45 DEFINE_STATIC_STRING(Aerosol);
46 DEFINE_STATIC_STRING(AerosolAndBagValveMask);
47 DEFINE_STATIC_STRING(AerosolAndInhaler);
48 DEFINE_STATIC_STRING(AerosolAndMechanicalVentilation);
49 DEFINE_STATIC_STRING(AerosolAndMechanicalVentilator);
50 DEFINE_STATIC_STRING(AnesthesiaMachine);
51 DEFINE_STATIC_STRING(BagValveMask);
52 DEFINE_STATIC_STRING(MechanicalVentilator);
53
54 static const std::vector<std::string>& GetValues()
55 {
56 ScopedMutex lock;
57 if (_values.empty())
58 {
59 _values.push_back(ActiveCardiovascular);
60 _values.push_back(Cardiovascular);
61 _values.push_back(Renal);
62 _values.push_back(Respiratory);
63 _values.push_back(RespiratoryAndAnesthesiaMachine);
64 _values.push_back(RespiratoryAndBagValveMask);
65 _values.push_back(RespiratoryAndInhaler);
66 _values.push_back(RespiratoryAndMechanicalVentilation);
67 _values.push_back(RespiratoryAndMechanicalVentilator);
68 _values.push_back(RespiratoryAndNasalCannula);
69 _values.push_back(RespiratoryAndNonRebreatherMask);
70 _values.push_back(RespiratoryAndSimpleMask);
71 _values.push_back(Aerosol);
72 _values.push_back(AerosolAndBagValveMask);
73 _values.push_back(AerosolAndInhaler);
74 _values.push_back(AerosolAndMechanicalVentilation);
75 _values.push_back(AerosolAndMechanicalVentilator);
76 _values.push_back(BagValveMask);
77 _values.push_back(AnesthesiaMachine);
78 _values.push_back(MechanicalVentilator);
79 }
80 return _values;
81 }
82 static bool HasValue(const std::string& v)
83 {
84 return std::find(_values.begin(), _values.end(), v) != _values.end();
85 }
86 static void AddValue(const std::string& v)
87 {
88 if (!HasValue(v))
89 {
90 ScopedMutex lock;
91 _values.push_back(v);
92 }
93 }
94 protected:
95 static std::vector<std::string> _values;
96 };
97
98 // TODO Rachel
99 class CerebrospinalFluidCompartment
100 {
101 public:
102 DEFINE_STATIC_STRING(IntracranialSpace);
103
104 static const std::vector<std::string>& GetValues()
105 {
106 ScopedMutex lock;
107 if (_values.empty())
108 {
109 _values.push_back(IntracranialSpace);
110 }
111 return _values;
112 }
113 static bool HasValue(const std::string& v)
114 {
115 return std::find(_values.begin(), _values.end(), v) != _values.end();
116 }
117 static void AddValue(const std::string& v)
118 {
119 if (!HasValue(v))
120 {
121 ScopedMutex lock;
122 _values.push_back(v);
123 }
124 }
125 protected:
126 static std::vector<std::string> _values;
127 };
128
129 class ChymeCompartment
130 {
131 public:
132 DEFINE_STATIC_STRING_EX(SmallIntestine, SmallIntestineChyme);
133
134 static const std::vector<std::string>& GetValues()
135 {
136 ScopedMutex lock;
137 if (_values.empty())
138 {
139 _values.push_back(SmallIntestine);
140 }
141 return _values;
142 }
143 static bool HasValue(const std::string& v)
144 {
145 return std::find(_values.begin(), _values.end(), v) != _values.end();
146 }
147 static void AddValue(const std::string& v)
148 {
149 if (!HasValue(v))
150 {
151 ScopedMutex lock;
152 _values.push_back(v);
153 }
154 }
155 protected:
156 static std::vector<std::string> _values;
157 };
158
159 class ChymeLink
160 {
161 public:
162 DEFINE_STATIC_STRING(SmallIntestineChymeToVasculature);
163
164 static const std::vector<std::string>& GetValues()
165 {
166 ScopedMutex lock;
167 if (_values.empty())
168 {
169 _values.push_back(SmallIntestineChymeToVasculature);
170 }
171 return _values;
172 }
173 static bool HasValue(const std::string& v)
174 {
175 return std::find(_values.begin(), _values.end(), v) != _values.end();
176 }
177 static void AddValue(const std::string& v)
178 {
179 if (!HasValue(v))
180 {
181 ScopedMutex lock;
182 _values.push_back(v);
183 }
184 }
185 protected:
186 static std::vector<std::string> _values;
187 };
188
189 class PulmonaryCompartment
190 {
191 public:
192 DEFINE_STATIC_STRING(Airway);
193 DEFINE_STATIC_STRING(Mouth);
194 DEFINE_STATIC_STRING(NasalCavity);
195 DEFINE_STATIC_STRING(Pharynx);
196 DEFINE_STATIC_STRING(Larynx);
197 DEFINE_STATIC_STRING(Trachea);
198 DEFINE_STATIC_STRING(Stomach);
199 DEFINE_STATIC_STRING_EX(Lungs, PulmonaryLungs);
200 DEFINE_STATIC_STRING(Alveoli);
201 DEFINE_STATIC_STRING(AlveolarDeadSpace);
202 DEFINE_STATIC_STRING(AnatomicDeadSpace);
203 DEFINE_STATIC_STRING_EX(LeftLung, LeftLungPulmonary);
204 /***/DEFINE_STATIC_STRING(LeftConductingAirways);
205 /***/DEFINE_STATIC_STRING(LeftAlveolarDeadSpace);
206 /***/DEFINE_STATIC_STRING(LeftAlveoli);
207 DEFINE_STATIC_STRING_EX(RightLung, RightLungPulmonary);
208 /***/DEFINE_STATIC_STRING(RightConductingAirways);
209 /***/DEFINE_STATIC_STRING(RightAlveolarDeadSpace);
210 /***/DEFINE_STATIC_STRING(RightAlveoli);
211 DEFINE_STATIC_STRING(PleuralCavity);
212 DEFINE_STATIC_STRING(LeftPleuralCavity);
213 DEFINE_STATIC_STRING(RightPleuralCavity);
214
215 DEFINE_STATIC_STRING(LeftAlveoliLeak);
216 DEFINE_STATIC_STRING(LeftChestLeak);
217 DEFINE_STATIC_STRING(LeftNeedle);
218 DEFINE_STATIC_STRING(RightAlveoliLeak);
219 DEFINE_STATIC_STRING(RightChestLeak);
220 DEFINE_STATIC_STRING(RightNeedle);
221
222 static const std::vector<std::string>& GetValues()
223 {
224 ScopedMutex lock;
225 if (_values.empty())
226 {
227 _values.push_back(Airway);
228 _values.push_back(Mouth);
229 _values.push_back(NasalCavity);
230 _values.push_back(Stomach);
231 _values.push_back(Pharynx);
232 _values.push_back(Larynx);
233 _values.push_back(Trachea);
234 _values.push_back(Lungs);
235 _values.push_back(Alveoli);
236 _values.push_back(AlveolarDeadSpace);
237 _values.push_back(AnatomicDeadSpace);
238 _values.push_back(LeftLung);
239 _values.push_back(LeftConductingAirways);
240 _values.push_back(LeftAlveolarDeadSpace);
241 _values.push_back(LeftAlveoli);
242 _values.push_back(RightLung);
243 _values.push_back(RightConductingAirways);
244 _values.push_back(RightAlveolarDeadSpace);
245 _values.push_back(RightAlveoli);
246 _values.push_back(PleuralCavity);
247 _values.push_back(LeftPleuralCavity);
248 _values.push_back(RightPleuralCavity);
249 _values.push_back(LeftAlveoliLeak);
250 _values.push_back(LeftChestLeak);
251 _values.push_back(LeftNeedle);
252 _values.push_back(RightAlveoliLeak);
253 _values.push_back(RightChestLeak);
254 _values.push_back(RightNeedle);
255 }
256 return _values;
257 }
258 static bool HasValue(const std::string& v)
259 {
260 return std::find(_values.begin(), _values.end(), v) != _values.end();
261 }
262 static void AddValue(const std::string& v)
263 {
264 if (!HasValue(v))
265 {
266 ScopedMutex lock;
267 _values.push_back(v);
268 }
269 }
270 protected:
271 static std::vector<std::string> _values;
272 };
273
274 class PulmonaryLink
275 {
276 public:
277 DEFINE_STATIC_STRING(EnvironmentToNasalCavity);
278 DEFINE_STATIC_STRING(EnvironmentToMouth);
279 DEFINE_STATIC_STRING(NasalCavityToPharynx);
280 DEFINE_STATIC_STRING(MouthToPharynx);
281 DEFINE_STATIC_STRING(MouthToStomach);
282 DEFINE_STATIC_STRING(PharynxToLarynx);
283 DEFINE_STATIC_STRING(LarynxToTrachea);
284 DEFINE_STATIC_STRING(PharynxToEnvironment);
285 DEFINE_STATIC_STRING(TracheaToLeftConductingAirways);
286 DEFINE_STATIC_STRING(LeftConductingAirwaysToLeftAlveolarDeadSpace);
287 DEFINE_STATIC_STRING(LeftAlveolarDeadSpaceToLeftAlveoli);
288 DEFINE_STATIC_STRING(TracheaToRightConductingAirways);
289 DEFINE_STATIC_STRING(RightConductingAirwaysToRightAlveolarDeadSpace);
290 DEFINE_STATIC_STRING(RightAlveolarDeadSpaceToRightAlveoli);
291 DEFINE_STATIC_STRING(EnvironmentToLeftChestLeak);
292 DEFINE_STATIC_STRING(EnvironmentToRightChestLeak);
293 DEFINE_STATIC_STRING(LeftAlveoliLeakToLeftPleural);
294 DEFINE_STATIC_STRING(LeftAlveoliToLeftAlveoliLeak);
295 DEFINE_STATIC_STRING(LeftChestLeakToLeftPleural);
296 DEFINE_STATIC_STRING(LeftNeedleToLeftPleural);
297 DEFINE_STATIC_STRING(EnvironmentToLeftNeedle);
298 DEFINE_STATIC_STRING(RightAlveoliLeakToRightPleural);
299 DEFINE_STATIC_STRING(RightAlveoliToRightAlveoliLeak);
300 DEFINE_STATIC_STRING(RightChestLeakToRightPleural);
301 DEFINE_STATIC_STRING(RightNeedleToRightPleural);
302 DEFINE_STATIC_STRING(EnvironmentToRightNeedle);
303
304 static const std::vector<std::string>& GetValues()
305 {
306 ScopedMutex lock;
307 if (_values.empty())
308 {
309 _values.push_back(EnvironmentToNasalCavity);
310 _values.push_back(EnvironmentToMouth);
311 _values.push_back(NasalCavityToPharynx);
312 _values.push_back(MouthToPharynx);
313 _values.push_back(MouthToStomach);
314 _values.push_back(PharynxToLarynx);
315 _values.push_back(LarynxToTrachea);
316 _values.push_back(PharynxToEnvironment);
317 _values.push_back(TracheaToLeftConductingAirways);
318 _values.push_back(LeftConductingAirwaysToLeftAlveolarDeadSpace);
319 _values.push_back(LeftAlveolarDeadSpaceToLeftAlveoli);
320 _values.push_back(TracheaToRightConductingAirways);
321 _values.push_back(RightConductingAirwaysToRightAlveolarDeadSpace);
322 _values.push_back(RightAlveolarDeadSpaceToRightAlveoli);
323 _values.push_back(EnvironmentToLeftChestLeak);
324 _values.push_back(EnvironmentToRightChestLeak);
325 _values.push_back(LeftAlveoliLeakToLeftPleural);
326 _values.push_back(LeftAlveoliToLeftAlveoliLeak);
327 _values.push_back(LeftChestLeakToLeftPleural);
328 _values.push_back(LeftNeedleToLeftPleural);
329 _values.push_back(EnvironmentToLeftNeedle);
330 _values.push_back(RightAlveoliLeakToRightPleural);
331 _values.push_back(RightAlveoliToRightAlveoliLeak);
332 _values.push_back(RightChestLeakToRightPleural);
333 _values.push_back(RightNeedleToRightPleural);
334 _values.push_back(EnvironmentToRightNeedle);
335 }
336 return _values;
337 }
338 static bool HasValue(const std::string& v)
339 {
340 return std::find(_values.begin(), _values.end(), v)!=_values.end();
341 }
342 static void AddValue(const std::string& v)
343 {
344 if (!HasValue(v))
345 {
346 ScopedMutex lock;
347 _values.push_back(v);
348 }
349 }
350 protected:
351 static std::vector<std::string> _values;
352 };
353
354 class ExpandedLungsPulmonaryCompartment
355 {
356 public:
357 DEFINE_STATIC_STRING(RightBranches);
358 DEFINE_STATIC_STRING(LeftBranches);
359
360 DEFINE_STATIC_STRING(RightMainBronchus);
361 DEFINE_STATIC_STRING(LeftMainBronchus);
362 DEFINE_STATIC_STRING(RightIntermediateBronchus);
363 DEFINE_STATIC_STRING(RightSuperiorLobarBronchus);
364 DEFINE_STATIC_STRING(RightMiddleLobarBronchus);
365 DEFINE_STATIC_STRING(RightInferiorLobarBronchus1);
366 DEFINE_STATIC_STRING(LeftInferiorLobarBronchus1);
367 DEFINE_STATIC_STRING(LeftSuperiorLobarBronchus);
368 DEFINE_STATIC_STRING(RightInferiorLobarBronchus2);
369 DEFINE_STATIC_STRING(LeftInferiorLobarBronchus2);
370 DEFINE_STATIC_STRING(RightSuperiorApicoposteriorBronchus);
371 DEFINE_STATIC_STRING(RightInferiorLobarBronchus3);
372 DEFINE_STATIC_STRING(LeftInferiorLobarBronchus3);
373 DEFINE_STATIC_STRING(LeftLingularBonchus);
374 DEFINE_STATIC_STRING(LeftSuperiorApicoposteriorBronchus);
375 DEFINE_STATIC_STRING(RightInferiorLobarBronchus4);
376
377 DEFINE_STATIC_STRING(RightSuperiorLobeApicalBronchiole);
378 DEFINE_STATIC_STRING(RightSuperiorLobePosteriorBronchiole);
379 DEFINE_STATIC_STRING(RightSuperiorLobeAnteriorBronchiole);
380 DEFINE_STATIC_STRING(RightMiddleLobeLateralBronchiole);
381 DEFINE_STATIC_STRING(RightMiddleLobeMedialBronchiole);
382 DEFINE_STATIC_STRING(RightInferiorLobeSuperiorBronchiole);
383 DEFINE_STATIC_STRING(RightInferiorLobeMedialBasalBronchiole);
384 DEFINE_STATIC_STRING(RightInferiorLobeAnteriorBasalBronchiole);
385 DEFINE_STATIC_STRING(RightInferiorLobeLateralBasalBronchiole);
386 DEFINE_STATIC_STRING(RightInferiorLobePosteriorBasalBronchiole);
387
388 DEFINE_STATIC_STRING(LeftInferiorLobePosteriorBasalBronchiole);
389 DEFINE_STATIC_STRING(LeftInferiorLobeLateralBasalBronchiole);
390 DEFINE_STATIC_STRING(LeftInferiorLobeAnteromedialBasalBronchiole);
391 DEFINE_STATIC_STRING(LeftInferiorLobeSuperiorBronchiole);
392 DEFINE_STATIC_STRING(LeftSuperiorLobeInferiorLingulaBronchiole);
393 DEFINE_STATIC_STRING(LeftSuperiorLobeSuperiorLingulaBronchiole);
394 DEFINE_STATIC_STRING(LeftSuperiorLobeAnteriorBronchiole);
395 DEFINE_STATIC_STRING(LeftSuperiorLobeApicoposteriorBronchiole);
396
397 DEFINE_STATIC_STRING(RightSuperiorLobeApicalAlveolarDeadSpace);
398 DEFINE_STATIC_STRING(RightSuperiorLobePosteriorAlveolarDeadSpace);
399 DEFINE_STATIC_STRING(RightSuperiorLobeAnteriorAlveolarDeadSpace);
400 DEFINE_STATIC_STRING(RightMiddleLobeLateralAlveolarDeadSpace);
401 DEFINE_STATIC_STRING(RightMiddleLobeMedialAlveolarDeadSpace);
402 DEFINE_STATIC_STRING(RightInferiorLobeSuperiorAlveolarDeadSpace);
403 DEFINE_STATIC_STRING(RightInferiorLobeMedialBasalAlveolarDeadSpace);
404 DEFINE_STATIC_STRING(RightInferiorLobeAnteriorBasalAlveolarDeadSpace);
405 DEFINE_STATIC_STRING(RightInferiorLobeLateralBasalAlveolarDeadSpace);
406 DEFINE_STATIC_STRING(RightInferiorLobePosteriorBasalAlveolarDeadSpace);
407
408 DEFINE_STATIC_STRING(LeftInferiorLobePosteriorBasalAlveolarDeadSpace);
409 DEFINE_STATIC_STRING(LeftInferiorLobeLateralBasalAlveolarDeadSpace);
410 DEFINE_STATIC_STRING(LeftInferiorLobeAnteromedialBasalAlveolarDeadSpace);
411 DEFINE_STATIC_STRING(LeftInferiorLobeSuperiorAlveolarDeadSpace);
412 DEFINE_STATIC_STRING(LeftSuperiorLobeInferiorLingulaAlveolarDeadSpace);
413 DEFINE_STATIC_STRING(LeftSuperiorLobeSuperiorLingulaAlveolarDeadSpace);
414 DEFINE_STATIC_STRING(LeftSuperiorLobeAnteriorAlveolarDeadSpace);
415 DEFINE_STATIC_STRING(LeftSuperiorLobeApicoposteriorAlveolarDeadSpace);
416
417 DEFINE_STATIC_STRING(RightSuperiorLobeApicalAlveoli);
418 DEFINE_STATIC_STRING(RightSuperiorLobePosteriorAlveoli);
419 DEFINE_STATIC_STRING(RightSuperiorLobeAnteriorAlveoli);
420 DEFINE_STATIC_STRING(RightMiddleLobeLateralAlveoli);
421 DEFINE_STATIC_STRING(RightMiddleLobeMedialAlveoli);
422 DEFINE_STATIC_STRING(RightInferiorLobeSuperiorAlveoli);
423 DEFINE_STATIC_STRING(RightInferiorLobeMedialBasalAlveoli);
424 DEFINE_STATIC_STRING(RightInferiorLobeAnteriorBasalAlveoli);
425 DEFINE_STATIC_STRING(RightInferiorLobeLateralBasalAlveoli);
426 DEFINE_STATIC_STRING(RightInferiorLobePosteriorBasalAlveoli);
427
428 DEFINE_STATIC_STRING(LeftInferiorLobePosteriorBasalAlveoli);
429 DEFINE_STATIC_STRING(LeftInferiorLobeLateralBasalAlveoli);
430 DEFINE_STATIC_STRING(LeftInferiorLobeAnteromedialBasalAlveoli);
431 DEFINE_STATIC_STRING(LeftInferiorLobeSuperiorAlveoli);
432 DEFINE_STATIC_STRING(LeftSuperiorLobeInferiorLingulaAlveoli);
433 DEFINE_STATIC_STRING(LeftSuperiorLobeSuperiorLingulaAlveoli);
434 DEFINE_STATIC_STRING(LeftSuperiorLobeAnteriorAlveoli);
435 DEFINE_STATIC_STRING(LeftSuperiorLobeApicoposteriorAlveoli);
436
437 static const std::vector<std::string>& GetValues()
438 {
439 ScopedMutex lock;
440 if (_values.empty())
441 {
442 _values.push_back(RightBranches);
443 _values.push_back(LeftBranches);
444
445 _values.push_back(RightMainBronchus);
446 _values.push_back(LeftMainBronchus);
447 _values.push_back(RightIntermediateBronchus);
448 _values.push_back(RightSuperiorLobarBronchus);
449 _values.push_back(RightMiddleLobarBronchus);
450 _values.push_back(RightInferiorLobarBronchus1);
451 _values.push_back(LeftInferiorLobarBronchus1);
452 _values.push_back(LeftSuperiorLobarBronchus);
453 _values.push_back(RightInferiorLobarBronchus2);
454 _values.push_back(LeftInferiorLobarBronchus2);
455 _values.push_back(RightSuperiorApicoposteriorBronchus);
456 _values.push_back(RightInferiorLobarBronchus3);
457 _values.push_back(LeftInferiorLobarBronchus3);
458 _values.push_back(LeftLingularBonchus);
459 _values.push_back(LeftSuperiorApicoposteriorBronchus);
460 _values.push_back(RightInferiorLobarBronchus4);
461
462 _values.push_back(RightSuperiorLobeApicalBronchiole);
463 _values.push_back(RightSuperiorLobePosteriorBronchiole);
464 _values.push_back(RightSuperiorLobeAnteriorBronchiole);
465 _values.push_back(RightMiddleLobeLateralBronchiole);
466 _values.push_back(RightMiddleLobeMedialBronchiole);
467 _values.push_back(RightInferiorLobeSuperiorBronchiole);
468 _values.push_back(RightInferiorLobeMedialBasalBronchiole);
469 _values.push_back(RightInferiorLobeAnteriorBasalBronchiole);
470 _values.push_back(RightInferiorLobeLateralBasalBronchiole);
471 _values.push_back(RightInferiorLobePosteriorBasalBronchiole);
472
473 _values.push_back(LeftInferiorLobePosteriorBasalBronchiole);
474 _values.push_back(LeftInferiorLobeLateralBasalBronchiole);
475 _values.push_back(LeftInferiorLobeAnteromedialBasalBronchiole);
476 _values.push_back(LeftInferiorLobeSuperiorBronchiole);
477 _values.push_back(LeftSuperiorLobeInferiorLingulaBronchiole);
478 _values.push_back(LeftSuperiorLobeSuperiorLingulaBronchiole);
479 _values.push_back(LeftSuperiorLobeAnteriorBronchiole);
480 _values.push_back(LeftSuperiorLobeApicoposteriorBronchiole);
481
482 _values.push_back(RightSuperiorLobeApicalAlveolarDeadSpace);
483 _values.push_back(RightSuperiorLobePosteriorAlveolarDeadSpace);
484 _values.push_back(RightSuperiorLobeAnteriorAlveolarDeadSpace);
485 _values.push_back(RightMiddleLobeLateralAlveolarDeadSpace);
486 _values.push_back(RightMiddleLobeMedialAlveolarDeadSpace);
487 _values.push_back(RightInferiorLobeSuperiorAlveolarDeadSpace);
488 _values.push_back(RightInferiorLobeMedialBasalAlveolarDeadSpace);
489 _values.push_back(RightInferiorLobeAnteriorBasalAlveolarDeadSpace);
490 _values.push_back(RightInferiorLobeLateralBasalAlveolarDeadSpace);
491 _values.push_back(RightInferiorLobePosteriorBasalAlveolarDeadSpace);
492
493 _values.push_back(LeftInferiorLobePosteriorBasalAlveolarDeadSpace);
494 _values.push_back(LeftInferiorLobeLateralBasalAlveolarDeadSpace);
495 _values.push_back(LeftInferiorLobeAnteromedialBasalAlveolarDeadSpace);
496 _values.push_back(LeftInferiorLobeSuperiorAlveolarDeadSpace);
497 _values.push_back(LeftSuperiorLobeInferiorLingulaAlveolarDeadSpace);
498 _values.push_back(LeftSuperiorLobeSuperiorLingulaAlveolarDeadSpace);
499 _values.push_back(LeftSuperiorLobeAnteriorAlveolarDeadSpace);
500 _values.push_back(LeftSuperiorLobeApicoposteriorAlveolarDeadSpace);
501
502 _values.push_back(RightSuperiorLobeApicalAlveoli);
503 _values.push_back(RightSuperiorLobePosteriorAlveoli);
504 _values.push_back(RightSuperiorLobeAnteriorAlveoli);
505 _values.push_back(RightMiddleLobeLateralAlveoli);
506 _values.push_back(RightMiddleLobeMedialAlveoli);
507 _values.push_back(RightInferiorLobeSuperiorAlveoli);
508 _values.push_back(RightInferiorLobeMedialBasalAlveoli);
509 _values.push_back(RightInferiorLobeAnteriorBasalAlveoli);
510 _values.push_back(RightInferiorLobeLateralBasalAlveoli);
511 _values.push_back(RightInferiorLobePosteriorBasalAlveoli);
512
513 _values.push_back(LeftInferiorLobePosteriorBasalAlveoli);
514 _values.push_back(LeftInferiorLobeLateralBasalAlveoli);
515 _values.push_back(LeftInferiorLobeAnteromedialBasalAlveoli);
516 _values.push_back(LeftInferiorLobeSuperiorAlveoli);
517 _values.push_back(LeftSuperiorLobeInferiorLingulaAlveoli);
518 _values.push_back(LeftSuperiorLobeSuperiorLingulaAlveoli);
519 _values.push_back(LeftSuperiorLobeAnteriorAlveoli);
520 _values.push_back(LeftSuperiorLobeApicoposteriorAlveoli);
521 }
522 return _values;
523 }
524 static bool HasValue(const std::string& v)
525 {
526 return std::find(_values.begin(), _values.end(), v) != _values.end();
527 }
528 static void AddValue(const std::string& v)
529 {
530 if (!HasValue(v))
531 {
532 ScopedMutex lock;
533 _values.push_back(v);
534 }
535 }
536 protected:
537 static std::vector<std::string> _values;
538 };
539
540 class ExpandedLungsPulmonaryLink
541 {
542 public:
543 DEFINE_STATIC_STRING(TracheaToRightMainBronchus);
544 DEFINE_STATIC_STRING(RightMainBronchusToRightIntermediateBronchus);
545 DEFINE_STATIC_STRING(RightMainBronchusToRightSuperiorLobarBronchus);
546 DEFINE_STATIC_STRING(RightIntermediateBronchusToRightMiddleLobarBronchus);
547 DEFINE_STATIC_STRING(RightIntermediateBronchusToRightInferiorLobarBronchus1);
548 DEFINE_STATIC_STRING(RightInferiorLobarBronchus1ToRightInferiorLobarBronchus2);
549 DEFINE_STATIC_STRING(RightSuperiorLobarBronchusToRightSuperiorApicoposteriorBronchus);
550 DEFINE_STATIC_STRING(RightInferiorLobarBronchus2ToRightInferiorLobarBronchus3);
551 DEFINE_STATIC_STRING(RightInferiorLobarBronchus2ToRightInferiorLobarBronchus4);
552
553 DEFINE_STATIC_STRING(TracheaToLeftMainBronchus);
554 DEFINE_STATIC_STRING(LeftMainBronchusToLeftInferiorLobarBronchus1);
555 DEFINE_STATIC_STRING(LeftMainBronchusToLeftSuperiorLobarBronchus);
556 DEFINE_STATIC_STRING(LeftInferiorLobarBronchus1ToLeftInferiorLobarBronchus2);
557 DEFINE_STATIC_STRING(LeftInferiorLobarBronchus2ToLeftInferiorLobarBronchus3);
558 DEFINE_STATIC_STRING(LeftSuperiorLobarBronchusToLeftLingularBonchus);
559 DEFINE_STATIC_STRING(LeftSuperiorLobarBronchusToLeftSuperiorApicoposteriorBronchus);
560
561 DEFINE_STATIC_STRING(RightSuperiorApicoposteriorBronchusToRightSuperiorLobeApicalBronchiole);
562 DEFINE_STATIC_STRING(RightSuperiorApicoposteriorBronchusToRightSuperiorLobePosteriorBronchiole);
563 DEFINE_STATIC_STRING(RightSuperiorLobarBronchusToRightSuperiorLobeAnteriorBronchiole);
564 DEFINE_STATIC_STRING(RightMiddleLobarBronchusToRightMiddleLobeLateralBronchiole);
565 DEFINE_STATIC_STRING(RightMiddleLobarBronchusToRightMiddleLobeMedialBronchiole);
566 DEFINE_STATIC_STRING(RightInferiorLobarBronchus1ToRightInferiorLobeSuperiorBronchiole);
567 DEFINE_STATIC_STRING(RightInferiorLobarBronchus2ToRightInferiorLobeMedialBasalBronchiole);
568 DEFINE_STATIC_STRING(RightInferiorLobarBronchus3ToRightInferiorLobeAnteriorBasalBronchiole);
569 DEFINE_STATIC_STRING(RightInferiorLobarBronchus4ToRightInferiorLobeLateralBasalBronchiole);
570 DEFINE_STATIC_STRING(RightInferiorLobarBronchus4ToRightInferiorLobePosteriorBasalBronchiole);
571
572 DEFINE_STATIC_STRING(LeftInferiorLobarBronchus3ToLeftInferiorLobeLateralBasalBronchiole);
573 DEFINE_STATIC_STRING(LeftInferiorLobarBronchus3ToLeftInferiorLobePosteriorBasalBronchiole);
574 DEFINE_STATIC_STRING(LeftInferiorLobarBronchus2ToLeftInferiorLobeAnteromedialBasalBronchiole);
575 DEFINE_STATIC_STRING(LeftInferiorLobarBronchus1ToLeftInferiorLobeSuperiorBronchiole);
576 DEFINE_STATIC_STRING(LeftLingularBonchusToLeftSuperiorLobeInferiorLingulaBronchiole);
577 DEFINE_STATIC_STRING(LeftLingularBonchusToLeftSuperiorLobeSuperiorLingulaBronchiole);
578 DEFINE_STATIC_STRING(LeftSuperiorApicoposteriorBronchusToLeftSuperiorLobeAnteriorBronchiole);
579 DEFINE_STATIC_STRING(LeftSuperiorApicoposteriorBronchusToLeftSuperiorLobeApicoposteriorBronchiole);
580
581 DEFINE_STATIC_STRING(RightSuperiorLobeApicalBronchioleToRightSuperiorLobeApicalAlveolarDeadSpace);
582 DEFINE_STATIC_STRING(RightSuperiorLobePosteriorBronchioleToRightSuperiorLobePosteriorAlveolarDeadSpace);
583 DEFINE_STATIC_STRING(RightSuperiorLobeAnteriorBronchioleToRightSuperiorLobeAnteriorAlveolarDeadSpace);
584 DEFINE_STATIC_STRING(RightMiddleLobeLateralBronchioleToRightMiddleLobeLateralAlveolarDeadSpace);
585 DEFINE_STATIC_STRING(RightMiddleLobeMedialBronchioleToRightMiddleLobeMedialAlveolarDeadSpace);
586 DEFINE_STATIC_STRING(RightInferiorLobeSuperiorBronchioleToRightInferiorLobeSuperiorAlveolarDeadSpace);
587 DEFINE_STATIC_STRING(RightInferiorLobeMedialBasalBronchioleToRightInferiorLobeMedialBasalAlveolarDeadSpace);
588 DEFINE_STATIC_STRING(RightInferiorLobeAnteriorBasalBronchioleToRightInferiorLobeAnteriorBasalAlveolarDeadSpace);
589 DEFINE_STATIC_STRING(RightInferiorLobeLateralBasalBronchioleToRightInferiorLobeLateralBasalAlveolarDeadSpace);
590 DEFINE_STATIC_STRING(RightInferiorLobePosteriorBasalBronchioleToRightInferiorLobePosteriorBasalAlveolarDeadSpace);
591
592 DEFINE_STATIC_STRING(LeftInferiorLobePosteriorBasalBronchioleToLeftInferiorLobePosteriorBasalAlveolarDeadSpace);
593 DEFINE_STATIC_STRING(LeftInferiorLobeLateralBasalBronchioleToLeftInferiorLobeLateralBasalAlveolarDeadSpace);
594 DEFINE_STATIC_STRING(LeftInferiorLobeAnteromedialBasalBronchioleToLeftInferiorLobeAnteromedialBasalAlveolarDeadSpace);
595 DEFINE_STATIC_STRING(LeftInferiorLobeSuperiorBronchioleToLeftInferiorLobeSuperiorAlveolarDeadSpace);
596 DEFINE_STATIC_STRING(LeftSuperiorLobeInferiorLingulaBronchioleToLeftSuperiorLobeInferiorLingulaAlveolarDeadSpace);
597 DEFINE_STATIC_STRING(LeftSuperiorLobeSuperiorLingulaBronchioleToLeftSuperiorLobeSuperiorLingulaAlveolarDeadSpace);
598 DEFINE_STATIC_STRING(LeftSuperiorLobeAnteriorBronchioleToLeftSuperiorLobeAnteriorAlveolarDeadSpace);
599 DEFINE_STATIC_STRING(LeftSuperiorLobeApicoposteriorBronchioleToLeftSuperiorLobeApicoposteriorAlveolarDeadSpace);
600
601 DEFINE_STATIC_STRING(RightSuperiorLobeApicalAlveolarDeadSpaceToRightSuperiorLobeApicalAlveoli);
602 DEFINE_STATIC_STRING(RightSuperiorLobePosteriorAlveolarDeadSpaceToRightSuperiorLobePosteriorAlveoli);
603 DEFINE_STATIC_STRING(RightSuperiorLobeAnteriorAlveolarDeadSpaceToRightSuperiorLobeAnteriorAlveoli);
604 DEFINE_STATIC_STRING(RightMiddleLobeLateralAlveolarDeadSpaceToRightMiddleLobeLateralAlveoli);
605 DEFINE_STATIC_STRING(RightMiddleLobeMedialAlveolarDeadSpaceToRightMiddleLobeMedialAlveoli);
606 DEFINE_STATIC_STRING(RightInferiorLobeSuperiorAlveolarDeadSpaceToRightInferiorLobeSuperiorAlveoli);
607 DEFINE_STATIC_STRING(RightInferiorLobeMedialBasalAlveolarDeadSpaceToRightInferiorLobeMedialBasalAlveoli);
608 DEFINE_STATIC_STRING(RightInferiorLobeAnteriorBasalAlveolarDeadSpaceToRightInferiorLobeAnteriorBasalAlveoli);
609 DEFINE_STATIC_STRING(RightInferiorLobeLateralBasalAlveolarDeadSpaceToRightInferiorLobeLateralBasalAlveoli);
610 DEFINE_STATIC_STRING(RightInferiorLobePosteriorBasalAlveolarDeadSpaceToRightInferiorLobePosteriorBasalAlveoli);
611
612 DEFINE_STATIC_STRING(LeftInferiorLobePosteriorBasalAlveolarDeadSpaceToLeftInferiorLobePosteriorBasalAlveoli);
613 DEFINE_STATIC_STRING(LeftInferiorLobeLateralBasalAlveolarDeadSpaceToLeftInferiorLobeLateralBasalAlveoli);
614 DEFINE_STATIC_STRING(LeftInferiorLobeAnteromedialBasalAlveolarDeadSpaceToLeftInferiorLobeAnteromedialBasalAlveoli);
615 DEFINE_STATIC_STRING(LeftInferiorLobeSuperiorAlveolarDeadSpaceToLeftInferiorLobeSuperiorAlveoli);
616 DEFINE_STATIC_STRING(LeftSuperiorLobeInferiorLingulaAlveolarDeadSpaceToLeftSuperiorLobeInferiorLingulaAlveoli);
617 DEFINE_STATIC_STRING(LeftSuperiorLobeSuperiorLingulaAlveolarDeadSpaceToLeftSuperiorLobeSuperiorLingulaAlveoli);
618 DEFINE_STATIC_STRING(LeftSuperiorLobeAnteriorAlveolarDeadSpaceToLeftSuperiorLobeAnteriorAlveoli);
619 DEFINE_STATIC_STRING(LeftSuperiorLobeApicoposteriorAlveolarDeadSpaceToLeftSuperiorLobeApicoposteriorAlveoli);
620
621 static const std::vector<std::string>& GetValues()
622 {
623 ScopedMutex lock;
624 if (_values.empty())
625 {
626 _values.push_back(TracheaToRightMainBronchus);
627 _values.push_back(RightMainBronchusToRightIntermediateBronchus);
628 _values.push_back(RightMainBronchusToRightSuperiorLobarBronchus);
629 _values.push_back(RightIntermediateBronchusToRightMiddleLobarBronchus);
630 _values.push_back(RightIntermediateBronchusToRightInferiorLobarBronchus1);
631 _values.push_back(RightInferiorLobarBronchus1ToRightInferiorLobarBronchus2);
632 _values.push_back(RightSuperiorLobarBronchusToRightSuperiorApicoposteriorBronchus);
633 _values.push_back(RightInferiorLobarBronchus2ToRightInferiorLobarBronchus3);
634 _values.push_back(RightInferiorLobarBronchus2ToRightInferiorLobarBronchus4);
635
636 _values.push_back(TracheaToLeftMainBronchus);
637 _values.push_back(LeftMainBronchusToLeftInferiorLobarBronchus1);
638 _values.push_back(LeftMainBronchusToLeftSuperiorLobarBronchus);
639 _values.push_back(LeftInferiorLobarBronchus1ToLeftInferiorLobarBronchus2);
640 _values.push_back(LeftInferiorLobarBronchus2ToLeftInferiorLobarBronchus3);
641 _values.push_back(LeftSuperiorLobarBronchusToLeftLingularBonchus);
642 _values.push_back(LeftSuperiorLobarBronchusToLeftSuperiorApicoposteriorBronchus);
643
644 _values.push_back(RightSuperiorApicoposteriorBronchusToRightSuperiorLobeApicalBronchiole);
645 _values.push_back(RightSuperiorApicoposteriorBronchusToRightSuperiorLobePosteriorBronchiole);
646 _values.push_back(RightSuperiorLobarBronchusToRightSuperiorLobeAnteriorBronchiole);
647 _values.push_back(RightMiddleLobarBronchusToRightMiddleLobeLateralBronchiole);
648 _values.push_back(RightMiddleLobarBronchusToRightMiddleLobeMedialBronchiole);
649 _values.push_back(RightInferiorLobarBronchus1ToRightInferiorLobeSuperiorBronchiole);
650 _values.push_back(RightInferiorLobarBronchus2ToRightInferiorLobeMedialBasalBronchiole);
651 _values.push_back(RightInferiorLobarBronchus3ToRightInferiorLobeAnteriorBasalBronchiole);
652 _values.push_back(RightInferiorLobarBronchus4ToRightInferiorLobeLateralBasalBronchiole);
653 _values.push_back(RightInferiorLobarBronchus4ToRightInferiorLobePosteriorBasalBronchiole);
654
655 _values.push_back(LeftInferiorLobarBronchus3ToLeftInferiorLobeLateralBasalBronchiole);
656 _values.push_back(LeftInferiorLobarBronchus3ToLeftInferiorLobePosteriorBasalBronchiole);
657 _values.push_back(LeftInferiorLobarBronchus2ToLeftInferiorLobeAnteromedialBasalBronchiole);
658 _values.push_back(LeftInferiorLobarBronchus1ToLeftInferiorLobeSuperiorBronchiole);
659 _values.push_back(LeftLingularBonchusToLeftSuperiorLobeInferiorLingulaBronchiole);
660 _values.push_back(LeftLingularBonchusToLeftSuperiorLobeSuperiorLingulaBronchiole);
661 _values.push_back(LeftSuperiorApicoposteriorBronchusToLeftSuperiorLobeAnteriorBronchiole);
662 _values.push_back(LeftSuperiorApicoposteriorBronchusToLeftSuperiorLobeApicoposteriorBronchiole);
663
664 _values.push_back(RightSuperiorLobeApicalBronchioleToRightSuperiorLobeApicalAlveolarDeadSpace);
665 _values.push_back(RightSuperiorLobePosteriorBronchioleToRightSuperiorLobePosteriorAlveolarDeadSpace);
666 _values.push_back(RightSuperiorLobeAnteriorBronchioleToRightSuperiorLobeAnteriorAlveolarDeadSpace);
667 _values.push_back(RightMiddleLobeLateralBronchioleToRightMiddleLobeLateralAlveolarDeadSpace);
668 _values.push_back(RightMiddleLobeMedialBronchioleToRightMiddleLobeMedialAlveolarDeadSpace);
669 _values.push_back(RightInferiorLobeSuperiorBronchioleToRightInferiorLobeSuperiorAlveolarDeadSpace);
670 _values.push_back(RightInferiorLobeMedialBasalBronchioleToRightInferiorLobeMedialBasalAlveolarDeadSpace);
671 _values.push_back(RightInferiorLobeAnteriorBasalBronchioleToRightInferiorLobeAnteriorBasalAlveolarDeadSpace);
672 _values.push_back(RightInferiorLobeLateralBasalBronchioleToRightInferiorLobeLateralBasalAlveolarDeadSpace);
673 _values.push_back(RightInferiorLobePosteriorBasalBronchioleToRightInferiorLobePosteriorBasalAlveolarDeadSpace);
674
675 _values.push_back(LeftInferiorLobePosteriorBasalBronchioleToLeftInferiorLobePosteriorBasalAlveolarDeadSpace);
676 _values.push_back(LeftInferiorLobeLateralBasalBronchioleToLeftInferiorLobeLateralBasalAlveolarDeadSpace);
677 _values.push_back(LeftInferiorLobeAnteromedialBasalBronchioleToLeftInferiorLobeAnteromedialBasalAlveolarDeadSpace);
678 _values.push_back(LeftInferiorLobeSuperiorBronchioleToLeftInferiorLobeSuperiorAlveolarDeadSpace);
679 _values.push_back(LeftSuperiorLobeInferiorLingulaBronchioleToLeftSuperiorLobeInferiorLingulaAlveolarDeadSpace);
680 _values.push_back(LeftSuperiorLobeSuperiorLingulaBronchioleToLeftSuperiorLobeSuperiorLingulaAlveolarDeadSpace);
681 _values.push_back(LeftSuperiorLobeAnteriorBronchioleToLeftSuperiorLobeAnteriorAlveolarDeadSpace);
682 _values.push_back(LeftSuperiorLobeApicoposteriorBronchioleToLeftSuperiorLobeApicoposteriorAlveolarDeadSpace);
683
684 _values.push_back(RightSuperiorLobeApicalAlveolarDeadSpaceToRightSuperiorLobeApicalAlveoli);
685 _values.push_back(RightSuperiorLobePosteriorAlveolarDeadSpaceToRightSuperiorLobePosteriorAlveoli);
686 _values.push_back(RightSuperiorLobeAnteriorAlveolarDeadSpaceToRightSuperiorLobeAnteriorAlveoli);
687 _values.push_back(RightMiddleLobeLateralAlveolarDeadSpaceToRightMiddleLobeLateralAlveoli);
688 _values.push_back(RightMiddleLobeMedialAlveolarDeadSpaceToRightMiddleLobeMedialAlveoli);
689 _values.push_back(RightInferiorLobeSuperiorAlveolarDeadSpaceToRightInferiorLobeSuperiorAlveoli);
690 _values.push_back(RightInferiorLobeMedialBasalAlveolarDeadSpaceToRightInferiorLobeMedialBasalAlveoli);
691 _values.push_back(RightInferiorLobeAnteriorBasalAlveolarDeadSpaceToRightInferiorLobeAnteriorBasalAlveoli);
692 _values.push_back(RightInferiorLobeLateralBasalAlveolarDeadSpaceToRightInferiorLobeLateralBasalAlveoli);
693 _values.push_back(RightInferiorLobePosteriorBasalAlveolarDeadSpaceToRightInferiorLobePosteriorBasalAlveoli);
694
695 _values.push_back(LeftInferiorLobePosteriorBasalAlveolarDeadSpaceToLeftInferiorLobePosteriorBasalAlveoli);
696 _values.push_back(LeftInferiorLobeLateralBasalAlveolarDeadSpaceToLeftInferiorLobeLateralBasalAlveoli);
697 _values.push_back(LeftInferiorLobeAnteromedialBasalAlveolarDeadSpaceToLeftInferiorLobeAnteromedialBasalAlveoli);
698 _values.push_back(LeftInferiorLobeSuperiorAlveolarDeadSpaceToLeftInferiorLobeSuperiorAlveoli);
699 _values.push_back(LeftSuperiorLobeInferiorLingulaAlveolarDeadSpaceToLeftSuperiorLobeInferiorLingulaAlveoli);
700 _values.push_back(LeftSuperiorLobeSuperiorLingulaAlveolarDeadSpaceToLeftSuperiorLobeSuperiorLingulaAlveoli);
701 _values.push_back(LeftSuperiorLobeAnteriorAlveolarDeadSpaceToLeftSuperiorLobeAnteriorAlveoli);
702 _values.push_back(LeftSuperiorLobeApicoposteriorAlveolarDeadSpaceToLeftSuperiorLobeApicoposteriorAlveoli);
703 }
704 return _values;
705 }
706 static bool HasValue(const std::string& v)
707 {
708 return std::find(_values.begin(), _values.end(), v) != _values.end();
709 }
710 static void AddValue(const std::string& v)
711 {
712 if (!HasValue(v))
713 {
714 ScopedMutex lock;
715 _values.push_back(v);
716 }
717 }
718 protected:
719 static std::vector<std::string> _values;
720 };
721
722 class TissueCompartment
723 {
724 public:
725 DEFINE_STATIC_STRING_EX(Bone, BoneTissue);
726 DEFINE_STATIC_STRING_EX(Brain, BrainTissue);
727 DEFINE_STATIC_STRING_EX(Fat, FatTissue);
728 DEFINE_STATIC_STRING_EX(Gut, GutTissue);
729 DEFINE_STATIC_STRING_EX(LeftKidney, LeftKidneyTissue);
730 DEFINE_STATIC_STRING_EX(LeftLung, LeftLungTissue);
731 DEFINE_STATIC_STRING_EX(Liver, LiverTissue);
732 DEFINE_STATIC_STRING_EX(Muscle, MuscleTissue);
733 DEFINE_STATIC_STRING_EX(Myocardium, MyocardiumTissue);
734 DEFINE_STATIC_STRING_EX(RightKidney, RightKidneyTissue);
735 DEFINE_STATIC_STRING_EX(RightLung, RightLungTissue);
736 DEFINE_STATIC_STRING_EX(Skin, SkinTissue);
737 DEFINE_STATIC_STRING_EX(Spleen, SpleenTissue);
738
739 static const std::vector<std::string>& GetValues()
740 {
741 ScopedMutex lock;
742 if (_values.empty())
743 {
744 _values.push_back(Bone);
745 _values.push_back(Brain);
746 _values.push_back(Fat);
747 _values.push_back(Gut);
748 _values.push_back(LeftKidney);
749 _values.push_back(LeftLung);
750 _values.push_back(Liver);
751 _values.push_back(Muscle);
752 _values.push_back(Myocardium);
753 _values.push_back(RightKidney);
754 _values.push_back(RightLung);
755 _values.push_back(Skin);
756 _values.push_back(Spleen);
757 }
758 return _values;
759 }
760 static bool HasValue(const std::string& v)
761 {
762 return std::find(_values.begin(), _values.end(), v) != _values.end();
763 }
764 static void AddValue(const std::string& v)
765 {
766 if (!HasValue(v))
767 {
768 ScopedMutex lock;
769 _values.push_back(v);
770 }
771 }
772 protected:
773 static std::vector<std::string> _values;
774 };
775
776 class ExtravascularCompartment
777 {
778 public:
779 DEFINE_STATIC_STRING_EX(BoneExtracellular, BoneTissueExtracellular);
780 DEFINE_STATIC_STRING_EX(BrainExtracellular, BrainTissueExtracellular);
781 DEFINE_STATIC_STRING_EX(FatExtracellular, FatTissueExtracellular);
782 DEFINE_STATIC_STRING_EX(GutExtracellular, GutTissueExtracellular);
783 DEFINE_STATIC_STRING_EX(LeftKidneyExtracellular, LeftKidneyTissueExtracellular);
784 DEFINE_STATIC_STRING_EX(LeftLungExtracellular, LeftLungTissueExtracellular);
785 DEFINE_STATIC_STRING_EX(LiverExtracellular, LiverTissueExtracellular);
786 DEFINE_STATIC_STRING_EX(MuscleExtracellular, MuscleTissueExtracellular);
787 DEFINE_STATIC_STRING_EX(MyocardiumExtracellular, MyocardiumTissueExtracellular);
788 DEFINE_STATIC_STRING_EX(RightKidneyExtracellular, RightKidneyTissueExtracellular);
789 DEFINE_STATIC_STRING_EX(RightLungExtracellular, RightLungTissueExtracellular);
790 DEFINE_STATIC_STRING_EX(SkinExtracellular, SkinTissueExtracellular);
791 DEFINE_STATIC_STRING_EX(SpleenExtracellular, SpleenTissueExtracellular);
792
793 DEFINE_STATIC_STRING_EX(BoneIntracellular, BoneTissueIntracellular);
794 DEFINE_STATIC_STRING_EX(BrainIntracellular, BrainTissueIntracellular);
795 DEFINE_STATIC_STRING_EX(FatIntracellular, FatTissueIntracellular);
796 DEFINE_STATIC_STRING_EX(GutIntracellular, GutTissueIntracellular);
797 DEFINE_STATIC_STRING_EX(LeftKidneyIntracellular, LeftKidneyTissueIntracellular);
798 DEFINE_STATIC_STRING_EX(LeftLungIntracellular, LeftLungTissueIntracellular);
799 DEFINE_STATIC_STRING_EX(LiverIntracellular, LiverTissueIntracellular);
800 DEFINE_STATIC_STRING_EX(MuscleIntracellular, MuscleTissueIntracellular);
801 DEFINE_STATIC_STRING_EX(MyocardiumIntracellular, MyocardiumTissueIntracellular);
802 DEFINE_STATIC_STRING_EX(RightKidneyIntracellular, RightKidneyTissueIntracellular);
803 DEFINE_STATIC_STRING_EX(RightLungIntracellular, RightLungTissueIntracellular);
804 DEFINE_STATIC_STRING_EX(SkinIntracellular, SkinTissueIntracellular);
805 DEFINE_STATIC_STRING_EX(SpleenIntracellular, SpleenTissueIntracellular);
806
807 static const std::vector<std::string>& GetValues()
808 {
809 ScopedMutex lock;
810 if (_values.empty())
811 {
812 _values.push_back(BoneExtracellular);
813 _values.push_back(BrainExtracellular);
814 _values.push_back(FatExtracellular);
815 _values.push_back(GutExtracellular);
816 _values.push_back(LeftKidneyExtracellular);
817 _values.push_back(LeftLungExtracellular);
818 _values.push_back(LiverExtracellular);
819 _values.push_back(MuscleExtracellular);
820 _values.push_back(MyocardiumExtracellular);
821 _values.push_back(RightKidneyExtracellular);
822 _values.push_back(RightLungExtracellular);
823 _values.push_back(SkinExtracellular);
824 _values.push_back(SpleenExtracellular);
825
826 _values.push_back(BoneIntracellular);
827 _values.push_back(BrainIntracellular);
828 _values.push_back(FatIntracellular);
829 _values.push_back(GutIntracellular);
830 _values.push_back(LeftKidneyIntracellular);
831 _values.push_back(LeftLungIntracellular);
832 _values.push_back(LiverIntracellular);
833 _values.push_back(MuscleIntracellular);
834 _values.push_back(MyocardiumIntracellular);
835 _values.push_back(RightKidneyIntracellular);
836 _values.push_back(RightLungIntracellular);
837 _values.push_back(SkinIntracellular);
838 _values.push_back(SpleenIntracellular);
839 }
840 return _values;
841 }
842 static bool HasValue(const std::string& v)
843 {
844 return std::find(_values.begin(), _values.end(), v) != _values.end();
845 }
846 static void AddValue(const std::string& v)
847 {
848 if (!HasValue(v))
849 {
850 ScopedMutex lock;
851 _values.push_back(v);
852 }
853 }
854 protected:
855 static std::vector<std::string> _values;
856 };
857
858 class VascularCompartment
859 {
860 public:
861 // Cardio
862 DEFINE_STATIC_STRING(Aorta);
863 DEFINE_STATIC_STRING(Heart);
864 DEFINE_STATIC_STRING_EX(Myocardium, MyocardiumVasculature);
865 DEFINE_STATIC_STRING(LeftHeart);
866 DEFINE_STATIC_STRING(RightHeart);
867 DEFINE_STATIC_STRING(Pericardium);
868 DEFINE_STATIC_STRING(VenaCava);
869 // Pulmonary
870 DEFINE_STATIC_STRING(PulmonaryArteries);
871 DEFINE_STATIC_STRING(PulmonaryCapillaries);
872 DEFINE_STATIC_STRING(PulmonaryVeins);
873 DEFINE_STATIC_STRING_EX(Lungs, LungsVasculature);
874 DEFINE_STATIC_STRING_EX(LeftLung, LeftLungVasculature);
875 /***/DEFINE_STATIC_STRING(LeftPulmonaryArteries);
876 /***/DEFINE_STATIC_STRING(LeftPulmonaryCapillaries);
877 /***/DEFINE_STATIC_STRING(LeftPulmonaryVeins);
878 DEFINE_STATIC_STRING_EX(RightLung, RightLungVasculature);
879 /***/DEFINE_STATIC_STRING(RightPulmonaryArteries);
880 /***/DEFINE_STATIC_STRING(RightPulmonaryCapillaries);
881 /***/DEFINE_STATIC_STRING(RightPulmonaryVeins);
882 // Renal
883 DEFINE_STATIC_STRING_EX(Kidneys, KidneyVasculature);
884 DEFINE_STATIC_STRING_EX(LeftKidney, LeftKidneyVasculature);
885 /***/DEFINE_STATIC_STRING(LeftRenalArtery);
886 /***/DEFINE_STATIC_STRING(LeftNephron);
887 /*********/DEFINE_STATIC_STRING(LeftAfferentArteriole);
888 /*********/DEFINE_STATIC_STRING(LeftGlomerularCapillaries);
889 /*********/DEFINE_STATIC_STRING(LeftEfferentArteriole);
890 /*********/DEFINE_STATIC_STRING(LeftPeritubularCapillaries);
891 /*********/DEFINE_STATIC_STRING(LeftBowmansCapsules);
892 /*********/DEFINE_STATIC_STRING(LeftTubules);
893 /***/DEFINE_STATIC_STRING(LeftRenalVein);
894 DEFINE_STATIC_STRING_EX(RightKidney, RightKidneyVasculature);
895 /***/DEFINE_STATIC_STRING(RightRenalArtery);
896 /***/DEFINE_STATIC_STRING(RightNephron);
897 /*********/DEFINE_STATIC_STRING(RightAfferentArteriole);
898 /*********/DEFINE_STATIC_STRING(RightGlomerularCapillaries);
899 /*********/DEFINE_STATIC_STRING(RightEfferentArteriole);
900 /*********/DEFINE_STATIC_STRING(RightPeritubularCapillaries);
901 /*********/DEFINE_STATIC_STRING(RightBowmansCapsules);
902 /*********/DEFINE_STATIC_STRING(RightTubules);
903 /***/DEFINE_STATIC_STRING(RightRenalVein);
904 // General Organs and Periphery
905 DEFINE_STATIC_STRING_EX(Bone, BoneVasculature);
906 DEFINE_STATIC_STRING_EX(Brain, BrainVasculature);
907 DEFINE_STATIC_STRING_EX(Fat, FatVasculature);
908 DEFINE_STATIC_STRING_EX(Gut, GutVasculature);
909 DEFINE_STATIC_STRING_EX(Splanchnic, SplanchnicVasculature);
910 DEFINE_STATIC_STRING_EX(SmallIntestine, SmallIntestineVasculature);
911 DEFINE_STATIC_STRING_EX(LargeIntestine, LargeIntestineVasculature);
912 DEFINE_STATIC_STRING_EX(Liver, LiverVasculature);
913 DEFINE_STATIC_STRING_EX(Spleen, SpleenVasculature);
914 DEFINE_STATIC_STRING_EX(Skin, SkinVasculature);
915 DEFINE_STATIC_STRING_EX(Muscle, MuscleVasculature);
916 DEFINE_STATIC_STRING_EX(LeftArm, LeftArmVasculature);
917 DEFINE_STATIC_STRING_EX(LeftLeg, LeftLegVasculature);
918 DEFINE_STATIC_STRING_EX(RightArm, RightArmVasculature);
919 DEFINE_STATIC_STRING_EX(RightLeg, RightLegVasculature);
920 DEFINE_STATIC_STRING(Abdomen);
921 DEFINE_STATIC_STRING(AbdominalCavity);
922
923 DEFINE_STATIC_STRING(Ground);
924
925
926 static const std::vector<std::string>& GetValues()
927 {
928 ScopedMutex lock;
929 if (_values.empty())
930 {
931 _values.push_back(Aorta);
932 _values.push_back(Abdomen);
933 _values.push_back(Heart);
934 _values.push_back(Myocardium);
935 _values.push_back(LeftHeart);
936 _values.push_back(RightHeart);
937 _values.push_back(Pericardium);
938 _values.push_back(VenaCava);
939 _values.push_back(PulmonaryArteries);
940 _values.push_back(PulmonaryCapillaries);
941 _values.push_back(PulmonaryVeins);
942 _values.push_back(Lungs);
943 _values.push_back(LeftLung);
944 _values.push_back(LeftPulmonaryArteries);
945 _values.push_back(LeftPulmonaryCapillaries);
946 _values.push_back(LeftPulmonaryVeins);
947 _values.push_back(RightLung);
948 _values.push_back(RightPulmonaryArteries);
949 _values.push_back(RightPulmonaryCapillaries);
950 _values.push_back(RightPulmonaryVeins);
951 _values.push_back(Kidneys);
952 _values.push_back(LeftKidney);
953 _values.push_back(LeftRenalArtery);
954 _values.push_back(LeftNephron);
955 _values.push_back(LeftAfferentArteriole);
956 _values.push_back(LeftGlomerularCapillaries);
957 _values.push_back(LeftEfferentArteriole);
958 _values.push_back(LeftPeritubularCapillaries);
959 _values.push_back(LeftBowmansCapsules);
960 _values.push_back(LeftTubules);
961 _values.push_back(LeftRenalVein);
962 _values.push_back(RightKidney);
963 _values.push_back(RightRenalArtery);
964 _values.push_back(RightNephron);
965 _values.push_back(RightAfferentArteriole);
966 _values.push_back(RightGlomerularCapillaries);
967 _values.push_back(RightEfferentArteriole);
968 _values.push_back(RightPeritubularCapillaries);
969 _values.push_back(RightBowmansCapsules);
970 _values.push_back(RightTubules);
971 _values.push_back(RightRenalVein);
972 _values.push_back(Bone);
973 _values.push_back(Brain);
974 _values.push_back(Fat);
975 _values.push_back(Gut);
976 _values.push_back(Splanchnic);
977 _values.push_back(SmallIntestine);
978 _values.push_back(LargeIntestine);
979 _values.push_back(Liver);
980 _values.push_back(Spleen);
981 _values.push_back(Skin);
982 _values.push_back(Muscle);
983 _values.push_back(LeftArm);
984 _values.push_back(LeftLeg);
985 _values.push_back(RightArm);
986 _values.push_back(RightLeg);
987 //_values.push_back(Ground);
988 }
989 return _values;
990 }
991 static bool HasValue(const std::string& v)
992 {
993 return std::find(_values.begin(), _values.end(), v) != _values.end();
994 }
995 static void AddValue(const std::string& v)
996 {
997 if (!HasValue(v))
998 {
999 ScopedMutex lock;
1000 _values.push_back(v);
1001 }
1002 }
1003 protected:
1004 static std::vector<std::string> _values;
1005 };
1006
1007 class VascularLink
1008 {
1009 public:
1010 // Heart and Lungs
1011 DEFINE_STATIC_STRING(VenaCavaToRightHeart);
1012 DEFINE_STATIC_STRING(RightHeartToLeftPulmonaryArteries);
1013 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToCapillaries);
1014 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToVeins);
1015 DEFINE_STATIC_STRING(LeftPulmonaryCapillariesToVeins);
1016 DEFINE_STATIC_STRING(LeftPulmonaryVeinsLeak);
1017 DEFINE_STATIC_STRING(LeftPulmonaryVeinsToLeftHeart);
1018 DEFINE_STATIC_STRING(RightHeartToRightPulmonaryArteries);
1019 DEFINE_STATIC_STRING(RightPulmonaryArteriesToCapillaries);
1020 DEFINE_STATIC_STRING(RightPulmonaryArteriesToVeins);
1021 DEFINE_STATIC_STRING(RightPulmonaryCapillariesToVeins);
1022 DEFINE_STATIC_STRING(RightPulmonaryVeinsLeak);
1023 DEFINE_STATIC_STRING(RightPulmonaryVeinsToLeftHeart);
1024 DEFINE_STATIC_STRING(LeftHeartToAorta);
1025 // Bone
1026 DEFINE_STATIC_STRING(AortaToBone);
1027 DEFINE_STATIC_STRING(BoneToVenaCava);
1028 // Brain
1029 DEFINE_STATIC_STRING(AortaToBrain);
1030 DEFINE_STATIC_STRING(BrainToVenaCava);
1031 // Fat
1032 DEFINE_STATIC_STRING(AortaToFat);
1033 DEFINE_STATIC_STRING(FatToVenaCava);
1034 // Large Intestine
1035 DEFINE_STATIC_STRING(AortaToLargeIntestine);
1036 DEFINE_STATIC_STRING(LargeIntestineToLiver);
1037 // Left Arm
1038 DEFINE_STATIC_STRING(AortaToLeftArm);
1039 DEFINE_STATIC_STRING(LeftArmToVenaCava);
1040 // Left Kidney
1041 DEFINE_STATIC_STRING(AortaToLeftKidney);
1042 DEFINE_STATIC_STRING(LeftKidneyToVenaCava);
1043 // Left Leg
1044 DEFINE_STATIC_STRING(AortaToLeftLeg);
1045 DEFINE_STATIC_STRING(LeftLegToVenaCava);
1046 // Liver
1047 DEFINE_STATIC_STRING(AortaToLiver);
1048 DEFINE_STATIC_STRING(LiverToVenaCava);
1049 // Muscle
1050 DEFINE_STATIC_STRING(AortaToMuscle);
1051 DEFINE_STATIC_STRING(MuscleToVenaCava);
1052 // Myocardium
1053 DEFINE_STATIC_STRING(AortaToMyocardium);
1054 DEFINE_STATIC_STRING(MyocardiumToVenaCava);
1055 // Right Arm
1056 DEFINE_STATIC_STRING(AortaToRightArm);
1057 DEFINE_STATIC_STRING(RightArmToVenaCava);
1058 // Right Kidney
1059 DEFINE_STATIC_STRING(AortaToRightKidney);
1060 DEFINE_STATIC_STRING(RightKidneyToVenaCava);
1061 // Right Leg
1062 DEFINE_STATIC_STRING(AortaToRightLeg);
1063 DEFINE_STATIC_STRING(RightLegToVenaCava);
1064 // Skin
1065 DEFINE_STATIC_STRING(AortaToSkin);
1066 DEFINE_STATIC_STRING(SkinToVenaCava);
1067 // Small Intestine
1068 DEFINE_STATIC_STRING(AortaToSmallIntestine);
1069 DEFINE_STATIC_STRING(SmallIntestineToLiver);
1070 // Splanchnic
1071 DEFINE_STATIC_STRING(AortaToSplanchnic);
1072 DEFINE_STATIC_STRING(SplanchnicToLiver);
1073 // Spleen
1074 DEFINE_STATIC_STRING(AortaToSpleen);
1075 DEFINE_STATIC_STRING(SpleenToLiver);
1076
1077 // Hemorrhage and IV
1078 DEFINE_STATIC_STRING(VenaCavaIV);
1079
1080 // Vascular To Tissue Links
1081 DEFINE_STATIC_STRING(BoneVascularToTissue);
1082 DEFINE_STATIC_STRING(BrainVascularToTissue);
1083 DEFINE_STATIC_STRING(FatVascularToTissue);
1084 DEFINE_STATIC_STRING(SmallIntestineVascularToTissue);
1085 DEFINE_STATIC_STRING(LargeIntestineVascularToTissue);
1086 DEFINE_STATIC_STRING(SplanchnicVascularToTissue);
1087 DEFINE_STATIC_STRING(LeftKidneyVascularToTissue);
1088 DEFINE_STATIC_STRING(LeftLungVascularToTissue);
1089 DEFINE_STATIC_STRING(LiverVascularToTissue);
1090 DEFINE_STATIC_STRING(MuscleVascularToTissue);
1091 DEFINE_STATIC_STRING(MyocardiumVascularToTissue);
1092 DEFINE_STATIC_STRING(RightKidneyVascularToTissue);
1093 DEFINE_STATIC_STRING(RightLungVascularToTissue);
1094 DEFINE_STATIC_STRING(SkinVascularToTissue);
1095 DEFINE_STATIC_STRING(SpleenVascularToTissue);
1096
1097 // Renal Links
1098 // Reusing 'AortaToLeftKidney' to connect the Aorta To Left Renal Artery
1099 DEFINE_STATIC_STRING(LeftRenalArteryToAfferentArteriole);
1100 DEFINE_STATIC_STRING(LeftAfferentArterioleToGlomerularCapillaries);
1101 DEFINE_STATIC_STRING(LeftGlomerularCapillariesToEfferentArteriole);
1102 DEFINE_STATIC_STRING(LeftGlomerularCapillariesToBowmansCapsules);
1103 DEFINE_STATIC_STRING(LeftBowmansCapsulesToTubules);
1104 DEFINE_STATIC_STRING(LeftTubulesToPeritubularCapillaries);
1105 DEFINE_STATIC_STRING(LeftEfferentArterioleToPeritubularCapillaries);
1106 DEFINE_STATIC_STRING(LeftPeritubularCapillariesToRenalVein);
1107 // Reusing 'LeftKidneyToVenaCava' to connect the Left Renal Vein To Vena Cava
1108
1109 // Reusing 'AortaToRightKidney' to connect the Aorta To Right Renal Artery
1110 DEFINE_STATIC_STRING(RightRenalArteryToAfferentArteriole);
1111 DEFINE_STATIC_STRING(RightAfferentArterioleToGlomerularCapillaries);
1112 DEFINE_STATIC_STRING(RightGlomerularCapillariesToEfferentArteriole);
1113 DEFINE_STATIC_STRING(RightGlomerularCapillariesToBowmansCapsules);
1114 DEFINE_STATIC_STRING(RightBowmansCapsulesToTubules);
1115 DEFINE_STATIC_STRING(RightTubulesToPeritubularCapillaries);
1116 DEFINE_STATIC_STRING(RightEfferentArterioleToPeritubularCapillaries);
1117 DEFINE_STATIC_STRING(RightPeritubularCapillariesToRenalVein);
1118 // Reusing 'RightKidneyToVenaCava' to connect the Right Renal Vein To Vena Cava);
1119
1120 static const std::vector<std::string>& GetValues()
1121 {
1122 ScopedMutex lock;
1123 if (_values.empty())
1124 {
1125 _values.push_back(VenaCavaToRightHeart);
1126 _values.push_back(RightHeartToLeftPulmonaryArteries);
1127 _values.push_back(LeftPulmonaryArteriesToCapillaries);
1128 _values.push_back(LeftPulmonaryArteriesToVeins);
1129 _values.push_back(LeftPulmonaryCapillariesToVeins);
1130 _values.push_back(LeftPulmonaryVeinsLeak);
1131 _values.push_back(LeftPulmonaryVeinsToLeftHeart);
1132 _values.push_back(RightHeartToRightPulmonaryArteries);
1133 _values.push_back(RightPulmonaryArteriesToCapillaries);
1134 _values.push_back(RightPulmonaryArteriesToVeins);
1135 _values.push_back(RightPulmonaryCapillariesToVeins);
1136 _values.push_back(RightPulmonaryVeinsLeak);
1137 _values.push_back(RightPulmonaryVeinsToLeftHeart);
1138 _values.push_back(LeftHeartToAorta);
1139 _values.push_back(AortaToBone);
1140 _values.push_back(BoneToVenaCava);
1141 _values.push_back(AortaToBrain);
1142 _values.push_back(BrainToVenaCava);
1143 _values.push_back(AortaToFat);
1144 _values.push_back(FatToVenaCava);
1145 _values.push_back(AortaToLargeIntestine);
1146 _values.push_back(LargeIntestineToLiver);
1147 _values.push_back(AortaToLeftArm);
1148 _values.push_back(LeftArmToVenaCava);
1149 _values.push_back(AortaToLeftKidney);
1150 _values.push_back(LeftKidneyToVenaCava);
1151 _values.push_back(AortaToLeftLeg);
1152 _values.push_back(LeftLegToVenaCava);
1153 _values.push_back(AortaToLiver);
1154 _values.push_back(LiverToVenaCava);
1155 _values.push_back(AortaToMuscle);
1156 _values.push_back(MuscleToVenaCava);
1157 _values.push_back(AortaToMyocardium);
1158 _values.push_back(MyocardiumToVenaCava);
1159 _values.push_back(AortaToRightArm);
1160 _values.push_back(RightArmToVenaCava);
1161 _values.push_back(AortaToRightKidney);
1162 _values.push_back(RightKidneyToVenaCava);
1163 _values.push_back(AortaToRightLeg);
1164 _values.push_back(RightLegToVenaCava);
1165 _values.push_back(AortaToSkin);
1166 _values.push_back(SkinToVenaCava);
1167 _values.push_back(AortaToSmallIntestine);
1168 _values.push_back(SmallIntestineToLiver);
1169 _values.push_back(AortaToSplanchnic);
1170 _values.push_back(SplanchnicToLiver);
1171 _values.push_back(AortaToSpleen);
1172 _values.push_back(SpleenToLiver);
1173
1174 _values.push_back(BoneVascularToTissue);
1175 _values.push_back(BrainVascularToTissue);
1176 _values.push_back(FatVascularToTissue);
1177 _values.push_back(SmallIntestineVascularToTissue);
1178 _values.push_back(LargeIntestineVascularToTissue);
1179 _values.push_back(SplanchnicVascularToTissue);
1180 _values.push_back(LeftKidneyVascularToTissue);
1181 _values.push_back(LeftLungVascularToTissue);
1182 _values.push_back(LiverVascularToTissue);
1183 _values.push_back(MuscleVascularToTissue);
1184 _values.push_back(MyocardiumVascularToTissue);
1185 _values.push_back(RightKidneyVascularToTissue);
1186 _values.push_back(RightLungVascularToTissue);
1187 _values.push_back(SkinVascularToTissue);
1188 _values.push_back(SpleenVascularToTissue);
1189
1190 _values.push_back(LeftRenalArteryToAfferentArteriole);
1191 _values.push_back(LeftAfferentArterioleToGlomerularCapillaries);
1192 _values.push_back(LeftGlomerularCapillariesToEfferentArteriole);
1193 _values.push_back(LeftGlomerularCapillariesToBowmansCapsules);
1194 _values.push_back(LeftBowmansCapsulesToTubules);
1195 _values.push_back(LeftTubulesToPeritubularCapillaries);
1196 _values.push_back(LeftEfferentArterioleToPeritubularCapillaries);
1197 _values.push_back(LeftPeritubularCapillariesToRenalVein);
1198 _values.push_back(RightRenalArteryToAfferentArteriole);
1199 _values.push_back(RightAfferentArterioleToGlomerularCapillaries);
1200 _values.push_back(RightGlomerularCapillariesToEfferentArteriole);
1201 _values.push_back(RightGlomerularCapillariesToBowmansCapsules);
1202 _values.push_back(RightBowmansCapsulesToTubules);
1203 _values.push_back(RightTubulesToPeritubularCapillaries);
1204 _values.push_back(RightEfferentArterioleToPeritubularCapillaries);
1205 _values.push_back(RightPeritubularCapillariesToRenalVein);
1206 }
1207 return _values;
1208 }
1209 static bool HasValue(const std::string& v)
1210 {
1211 return std::find(_values.begin(), _values.end(), v) != _values.end();
1212 }
1213 static void AddValue(const std::string& v)
1214 {
1215 if (!HasValue(v))
1216 {
1217 ScopedMutex lock;
1218 _values.push_back(v);
1219 }
1220 }
1221 protected:
1222 static std::vector<std::string> _values;
1223 };
1224
1225 class ExpandedLungsVascularCompartment
1226 {
1227 public:
1228 DEFINE_STATIC_STRING(RightSuperiorLobeApicalPulmonaryCapillaries);
1229 DEFINE_STATIC_STRING(RightSuperiorLobePosteriorPulmonaryCapillaries);
1230 DEFINE_STATIC_STRING(RightSuperiorLobeAnteriorPulmonaryCapillaries);
1231 DEFINE_STATIC_STRING(RightMiddleLobeLateralPulmonaryCapillaries);
1232 DEFINE_STATIC_STRING(RightMiddleLobeMedialPulmonaryCapillaries);
1233 DEFINE_STATIC_STRING(RightInferiorLobeSuperiorPulmonaryCapillaries);
1234 DEFINE_STATIC_STRING(RightInferiorLobeMedialBasalPulmonaryCapillaries);
1235 DEFINE_STATIC_STRING(RightInferiorLobeAnteriorBasalPulmonaryCapillaries);
1236 DEFINE_STATIC_STRING(RightInferiorLobeLateralBasalPulmonaryCapillaries);
1237 DEFINE_STATIC_STRING(RightInferiorLobePosteriorBasalPulmonaryCapillaries);
1238
1239 DEFINE_STATIC_STRING(LeftInferiorLobePosteriorBasalPulmonaryCapillaries);
1240 DEFINE_STATIC_STRING(LeftInferiorLobeLateralBasalPulmonaryCapillaries);
1241 DEFINE_STATIC_STRING(LeftInferiorLobeAnteromedialBasalPulmonaryCapillaries);
1242 DEFINE_STATIC_STRING(LeftInferiorLobeSuperiorPulmonaryCapillaries);
1243 DEFINE_STATIC_STRING(LeftSuperiorLobeInferiorLingulaPulmonaryCapillaries);
1244 DEFINE_STATIC_STRING(LeftSuperiorLobeSuperiorLingulaPulmonaryCapillaries);
1245 DEFINE_STATIC_STRING(LeftSuperiorLobeAnteriorPulmonaryCapillaries);
1246 DEFINE_STATIC_STRING(LeftSuperiorLobeApicoposteriorPulmonaryCapillaries);
1247
1248
1249 static const std::vector<std::string>& GetValues()
1250 {
1251 ScopedMutex lock;
1252 if (_values.empty())
1253 {
1254 _values.push_back(RightSuperiorLobeApicalPulmonaryCapillaries);
1255 _values.push_back(RightSuperiorLobePosteriorPulmonaryCapillaries);
1256 _values.push_back(RightSuperiorLobeAnteriorPulmonaryCapillaries);
1257 _values.push_back(RightMiddleLobeLateralPulmonaryCapillaries);
1258 _values.push_back(RightMiddleLobeMedialPulmonaryCapillaries);
1259 _values.push_back(RightInferiorLobeSuperiorPulmonaryCapillaries);
1260 _values.push_back(RightInferiorLobeMedialBasalPulmonaryCapillaries);
1261 _values.push_back(RightInferiorLobeAnteriorBasalPulmonaryCapillaries);
1262 _values.push_back(RightInferiorLobeLateralBasalPulmonaryCapillaries);
1263 _values.push_back(RightInferiorLobePosteriorBasalPulmonaryCapillaries);
1264
1265 _values.push_back(LeftInferiorLobePosteriorBasalPulmonaryCapillaries);
1266 _values.push_back(LeftInferiorLobeLateralBasalPulmonaryCapillaries);
1267 _values.push_back(LeftInferiorLobeAnteromedialBasalPulmonaryCapillaries);
1268 _values.push_back(LeftInferiorLobeSuperiorPulmonaryCapillaries);
1269 _values.push_back(LeftSuperiorLobeInferiorLingulaPulmonaryCapillaries);
1270 _values.push_back(LeftSuperiorLobeSuperiorLingulaPulmonaryCapillaries);
1271 _values.push_back(LeftSuperiorLobeAnteriorPulmonaryCapillaries);
1272 _values.push_back(LeftSuperiorLobeApicoposteriorPulmonaryCapillaries);
1273 }
1274 return _values;
1275 }
1276 static bool HasValue(const std::string& v)
1277 {
1278 return std::find(_values.begin(), _values.end(), v) != _values.end();
1279 }
1280 static void AddValue(const std::string& v)
1281 {
1282 if (!HasValue(v))
1283 {
1284 ScopedMutex lock;
1285 _values.push_back(v);
1286 }
1287 }
1288 protected:
1289 static std::vector<std::string> _values;
1290 };
1291
1292 class ExpandedLungsVascularLink
1293 {
1294 public:
1295 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightSuperiorLobeApicalPulmonaryCapillaries);
1296 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightSuperiorLobePosteriorPulmonaryCapillaries);
1297 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightSuperiorLobeAnteriorPulmonaryCapillaries);
1298 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightMiddleLobeLateralPulmonaryCapillaries);
1299 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightMiddleLobeMedialPulmonaryCapillaries);
1300 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightInferiorLobeSuperiorPulmonaryCapillaries);
1301 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightInferiorLobeMedialBasalPulmonaryCapillaries);
1302 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightInferiorLobeAnteriorBasalPulmonaryCapillaries);
1303 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightInferiorLobeLateralBasalPulmonaryCapillaries);
1304 DEFINE_STATIC_STRING(RightPulmonaryArteriesToRightInferiorLobePosteriorBasalPulmonaryCapillaries);
1305
1306 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToLeftInferiorLobePosteriorBasalPulmonaryCapillaries);
1307 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToLeftInferiorLobeLateralBasalPulmonaryCapillaries);
1308 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToLeftInferiorLobeAnteromedialBasalPulmonaryCapillaries);
1309 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToLeftInferiorLobeSuperiorPulmonaryCapillaries);
1310 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToLeftSuperiorLobeInferiorLingulaPulmonaryCapillaries);
1311 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToLeftSuperiorLobeSuperiorLingulaPulmonaryCapillaries);
1312 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToLeftSuperiorLobeAnteriorPulmonaryCapillaries);
1313 DEFINE_STATIC_STRING(LeftPulmonaryArteriesToLeftSuperiorLobeApicoposteriorPulmonaryCapillaries);
1314
1315 DEFINE_STATIC_STRING(RightSuperiorLobeApicalPulmonaryCapillariesToRightPulmonaryVeins);
1316 DEFINE_STATIC_STRING(RightSuperiorLobePosteriorPulmonaryCapillariesToRightPulmonaryVeins);
1317 DEFINE_STATIC_STRING(RightSuperiorLobeAnteriorPulmonaryCapillariesToRightPulmonaryVeins);
1318 DEFINE_STATIC_STRING(RightMiddleLobeLateralPulmonaryCapillariesToRightPulmonaryVeins);
1319 DEFINE_STATIC_STRING(RightMiddleLobeMedialPulmonaryCapillariesToRightPulmonaryVeins);
1320 DEFINE_STATIC_STRING(RightInferiorLobeSuperiorPulmonaryCapillariesToRightPulmonaryVeins);
1321 DEFINE_STATIC_STRING(RightInferiorLobeMedialBasalPulmonaryCapillariesToRightPulmonaryVeins);
1322 DEFINE_STATIC_STRING(RightInferiorLobeAnteriorBasalPulmonaryCapillariesToRightPulmonaryVeins);
1323 DEFINE_STATIC_STRING(RightInferiorLobeLateralBasalPulmonaryCapillariesToRightPulmonaryVeins);
1324 DEFINE_STATIC_STRING(RightInferiorLobePosteriorBasalPulmonaryCapillariesToRightPulmonaryVeins);
1325
1326 DEFINE_STATIC_STRING(LeftInferiorLobePosteriorBasalPulmonaryCapillariesToLeftPulmonaryVeins);
1327 DEFINE_STATIC_STRING(LeftInferiorLobeLateralBasalPulmonaryCapillariesToLeftPulmonaryVeins);
1328 DEFINE_STATIC_STRING(LeftInferiorLobeAnteromedialBasalPulmonaryCapillariesToLeftPulmonaryVeins);
1329 DEFINE_STATIC_STRING(LeftInferiorLobeSuperiorPulmonaryCapillariesToLeftPulmonaryVeins);
1330 DEFINE_STATIC_STRING(LeftSuperiorLobeInferiorLingulaPulmonaryCapillariesToLeftPulmonaryVeins);
1331 DEFINE_STATIC_STRING(LeftSuperiorLobeSuperiorLingulaPulmonaryCapillariesToLeftPulmonaryVeins);
1332 DEFINE_STATIC_STRING(LeftSuperiorLobeAnteriorPulmonaryCapillariesToLeftPulmonaryVeins);
1333 DEFINE_STATIC_STRING(LeftSuperiorLobeApicoposteriorPulmonaryCapillariesToLeftPulmonaryVeins);
1334
1335 DEFINE_STATIC_STRING(RightSuperiorLobeApicalShunt);
1336 DEFINE_STATIC_STRING(RightSuperiorLobePosteriorShunt);
1337 DEFINE_STATIC_STRING(RightSuperiorLobeAnteriorShunt);
1338 DEFINE_STATIC_STRING(RightMiddleLobeLateralShunt);
1339 DEFINE_STATIC_STRING(RightMiddleLobeMedialShunt);
1340 DEFINE_STATIC_STRING(RightInferiorLobeSuperiorShunt);
1341 DEFINE_STATIC_STRING(RightInferiorLobeMedialBasalShunt);
1342 DEFINE_STATIC_STRING(RightInferiorLobeAnteriorBasalShunt);
1343 DEFINE_STATIC_STRING(RightInferiorLobeLateralBasalShunt);
1344 DEFINE_STATIC_STRING(RightInferiorLobePosteriorBasalShunt);
1345
1346 DEFINE_STATIC_STRING(LeftInferiorLobePosteriorBasalShunt);
1347 DEFINE_STATIC_STRING(LeftInferiorLobeLateralBasalShunt);
1348 DEFINE_STATIC_STRING(LeftInferiorLobeAnteromedialBasalShunt);
1349 DEFINE_STATIC_STRING(LeftInferiorLobeSuperiorShunt);
1350 DEFINE_STATIC_STRING(LeftSuperiorLobeInferiorLingulaShunt);
1351 DEFINE_STATIC_STRING(LeftSuperiorLobeSuperiorLingulaShunt);
1352 DEFINE_STATIC_STRING(LeftSuperiorLobeAnteriorShunt);
1353 DEFINE_STATIC_STRING(LeftSuperiorLobeApicoposteriorShunt);
1354
1355
1356 static const std::vector<std::string>& GetValues()
1357 {
1358 ScopedMutex lock;
1359 if (_values.empty())
1360 {
1361 _values.push_back(RightPulmonaryArteriesToRightSuperiorLobeApicalPulmonaryCapillaries);
1362 _values.push_back(RightPulmonaryArteriesToRightSuperiorLobePosteriorPulmonaryCapillaries);
1363 _values.push_back(RightPulmonaryArteriesToRightSuperiorLobeAnteriorPulmonaryCapillaries);
1364 _values.push_back(RightPulmonaryArteriesToRightMiddleLobeLateralPulmonaryCapillaries);
1365 _values.push_back(RightPulmonaryArteriesToRightMiddleLobeMedialPulmonaryCapillaries);
1366 _values.push_back(RightPulmonaryArteriesToRightInferiorLobeSuperiorPulmonaryCapillaries);
1367 _values.push_back(RightPulmonaryArteriesToRightInferiorLobeMedialBasalPulmonaryCapillaries);
1368 _values.push_back(RightPulmonaryArteriesToRightInferiorLobeAnteriorBasalPulmonaryCapillaries);
1369 _values.push_back(RightPulmonaryArteriesToRightInferiorLobeLateralBasalPulmonaryCapillaries);
1370 _values.push_back(RightPulmonaryArteriesToRightInferiorLobePosteriorBasalPulmonaryCapillaries);
1371
1372 _values.push_back(LeftPulmonaryArteriesToLeftInferiorLobePosteriorBasalPulmonaryCapillaries);
1373 _values.push_back(LeftPulmonaryArteriesToLeftInferiorLobeLateralBasalPulmonaryCapillaries);
1374 _values.push_back(LeftPulmonaryArteriesToLeftInferiorLobeAnteromedialBasalPulmonaryCapillaries);
1375 _values.push_back(LeftPulmonaryArteriesToLeftInferiorLobeSuperiorPulmonaryCapillaries);
1376 _values.push_back(LeftPulmonaryArteriesToLeftSuperiorLobeInferiorLingulaPulmonaryCapillaries);
1377 _values.push_back(LeftPulmonaryArteriesToLeftSuperiorLobeSuperiorLingulaPulmonaryCapillaries);
1378 _values.push_back(LeftPulmonaryArteriesToLeftSuperiorLobeAnteriorPulmonaryCapillaries);
1379 _values.push_back(LeftPulmonaryArteriesToLeftSuperiorLobeApicoposteriorPulmonaryCapillaries);
1380
1381 _values.push_back(RightSuperiorLobeApicalPulmonaryCapillariesToRightPulmonaryVeins);
1382 _values.push_back(RightSuperiorLobePosteriorPulmonaryCapillariesToRightPulmonaryVeins);
1383 _values.push_back(RightSuperiorLobeAnteriorPulmonaryCapillariesToRightPulmonaryVeins);
1384 _values.push_back(RightMiddleLobeLateralPulmonaryCapillariesToRightPulmonaryVeins);
1385 _values.push_back(RightMiddleLobeMedialPulmonaryCapillariesToRightPulmonaryVeins);
1386 _values.push_back(RightInferiorLobeSuperiorPulmonaryCapillariesToRightPulmonaryVeins);
1387 _values.push_back(RightInferiorLobeMedialBasalPulmonaryCapillariesToRightPulmonaryVeins);
1388 _values.push_back(RightInferiorLobeAnteriorBasalPulmonaryCapillariesToRightPulmonaryVeins);
1389 _values.push_back(RightInferiorLobeLateralBasalPulmonaryCapillariesToRightPulmonaryVeins);
1390 _values.push_back(RightInferiorLobePosteriorBasalPulmonaryCapillariesToRightPulmonaryVeins);
1391
1392 _values.push_back(LeftInferiorLobePosteriorBasalPulmonaryCapillariesToLeftPulmonaryVeins);
1393 _values.push_back(LeftInferiorLobeLateralBasalPulmonaryCapillariesToLeftPulmonaryVeins);
1394 _values.push_back(LeftInferiorLobeAnteromedialBasalPulmonaryCapillariesToLeftPulmonaryVeins);
1395 _values.push_back(LeftInferiorLobeSuperiorPulmonaryCapillariesToLeftPulmonaryVeins);
1396 _values.push_back(LeftSuperiorLobeInferiorLingulaPulmonaryCapillariesToLeftPulmonaryVeins);
1397 _values.push_back(LeftSuperiorLobeSuperiorLingulaPulmonaryCapillariesToLeftPulmonaryVeins);
1398 _values.push_back(LeftSuperiorLobeAnteriorPulmonaryCapillariesToLeftPulmonaryVeins);
1399 _values.push_back(LeftSuperiorLobeApicoposteriorPulmonaryCapillariesToLeftPulmonaryVeins);
1400
1401 _values.push_back(RightSuperiorLobeApicalShunt);
1402 _values.push_back(RightSuperiorLobePosteriorShunt);
1403 _values.push_back(RightSuperiorLobeAnteriorShunt);
1404 _values.push_back(RightMiddleLobeLateralShunt);
1405 _values.push_back(RightMiddleLobeMedialShunt);
1406 _values.push_back(RightInferiorLobeSuperiorShunt);
1407 _values.push_back(RightInferiorLobeMedialBasalShunt);
1408 _values.push_back(RightInferiorLobeAnteriorBasalShunt);
1409 _values.push_back(RightInferiorLobeLateralBasalShunt);
1410 _values.push_back(RightInferiorLobePosteriorBasalShunt);
1411
1412 _values.push_back(LeftInferiorLobePosteriorBasalShunt);
1413 _values.push_back(LeftInferiorLobeLateralBasalShunt);
1414 _values.push_back(LeftInferiorLobeAnteromedialBasalShunt);
1415 _values.push_back(LeftInferiorLobeSuperiorShunt);
1416 _values.push_back(LeftSuperiorLobeInferiorLingulaShunt);
1417 _values.push_back(LeftSuperiorLobeSuperiorLingulaShunt);
1418 _values.push_back(LeftSuperiorLobeAnteriorShunt);
1419 _values.push_back(LeftSuperiorLobeApicoposteriorShunt);
1420 }
1421 return _values;
1422 }
1423 static bool HasValue(const std::string& v)
1424 {
1425 return std::find(_values.begin(), _values.end(), v) != _values.end();
1426 }
1427 static void AddValue(const std::string& v)
1428 {
1429 if (!HasValue(v))
1430 {
1431 ScopedMutex lock;
1432 _values.push_back(v);
1433 }
1434 }
1435 protected:
1436 static std::vector<std::string> _values;
1437 };
1438
1439 class ComputationalLifeVascularCompartment
1440 {
1441 public:
1442 DEFINE_STATIC_STRING(ArterialBuffer);
1443 DEFINE_STATIC_STRING(VenousBuffer);
1444
1445 DEFINE_STATIC_STRING_EX(Head, HeadVasculature);
1446 DEFINE_STATIC_STRING_EX(Extracranial, ExtracranialVasculature);
1447 DEFINE_STATIC_STRING_EX(Intracranial, IntracranialVasculature);
1448
1449 DEFINE_STATIC_STRING_EX(Gut1, Gut1Vasculature);
1450 DEFINE_STATIC_STRING_EX(LeftArmArterioles, LeftArmArteriolesVasculature);
1451 DEFINE_STATIC_STRING_EX(LeftArmBone, LeftArmBoneVasculature);
1452 DEFINE_STATIC_STRING_EX(LeftArmFat, LeftArmFatVasculature);
1453 DEFINE_STATIC_STRING(LeftArmMicrovasculature);
1454 DEFINE_STATIC_STRING_EX(LeftArmMuscle, LeftArmMuscleVasculature);
1455 DEFINE_STATIC_STRING_EX(LeftArmSkin, LeftArmSkinVasculature);
1456 DEFINE_STATIC_STRING_EX(LeftArmVenules, LeftArmVenulesVasculature);
1457 DEFINE_STATIC_STRING_EX(LeftLegArterioles, LeftLegArteriolesVasculature);
1458 DEFINE_STATIC_STRING_EX(LeftLegBone, LeftLegBoneVasculature);
1459 DEFINE_STATIC_STRING_EX(LeftLegFat, LeftLegFatVasculature);
1460 DEFINE_STATIC_STRING(LeftLegMicrovasculature);
1461 DEFINE_STATIC_STRING_EX(LeftLegMuscle, LeftLegMuscleVasculature);
1462 DEFINE_STATIC_STRING_EX(LeftLegSkin, LeftLegSkinVasculature);
1463 DEFINE_STATIC_STRING_EX(LeftLegVenules, LeftLegVenulesVasculature);
1464 DEFINE_STATIC_STRING_EX(RightArmArterioles, RightArmArteriolesVasculature);
1465 DEFINE_STATIC_STRING_EX(RightArmBone, RightArmBoneVasculature);
1466 DEFINE_STATIC_STRING_EX(RightArmFat, RightArmFatVasculature);
1467 DEFINE_STATIC_STRING(RightArmMicrovasculature);
1468 DEFINE_STATIC_STRING_EX(RightArmMuscle, RightArmMuscleVasculature);
1469 DEFINE_STATIC_STRING_EX(RightArmSkin, RightArmSkinVasculature);
1470 DEFINE_STATIC_STRING_EX(RightArmVenules, RightArmVenulesVasculature);
1471 DEFINE_STATIC_STRING_EX(RightLegArterioles, RightLegArteriolesVasculature);
1472 DEFINE_STATIC_STRING_EX(RightLegBone, RightLegBoneVasculature);
1473 DEFINE_STATIC_STRING_EX(RightLegFat, RightLegFatVasculature);
1474 DEFINE_STATIC_STRING(RightLegMicrovasculature);
1475 DEFINE_STATIC_STRING_EX(RightLegMuscle, RightLegMuscleVasculature);
1476 DEFINE_STATIC_STRING_EX(RightLegSkin, RightLegSkinVasculature);
1477 DEFINE_STATIC_STRING_EX(RightLegVenules, RightLegVenulesVasculature);
1478 DEFINE_STATIC_STRING_EX(Torso, TorsoVasculature);
1479 DEFINE_STATIC_STRING_EX(TorsoArterioles, TorsoArteriolesVasculature);
1480 DEFINE_STATIC_STRING_EX(TorsoBone, TorsoBoneVasculature);
1481 DEFINE_STATIC_STRING_EX(TorsoFat, TorsoFatVasculature);
1482 DEFINE_STATIC_STRING(TorsoMicrovasculature);
1483 DEFINE_STATIC_STRING_EX(TorsoMuscle, TorsoMuscleVasculature);
1484 DEFINE_STATIC_STRING_EX(TorsoSkin, TorsoSkinVasculature);
1485 DEFINE_STATIC_STRING_EX(TorsoVenules, TorsoVenulesVasculature);
1486
1487
1488 static const std::vector<std::string>& GetValues()
1489 {
1490 ScopedMutex lock;
1491 if (_values.empty())
1492 {
1493 _values.push_back(ArterialBuffer);
1494 _values.push_back(VenousBuffer);
1495 _values.push_back(Head);
1496 _values.push_back(Extracranial);
1497 _values.push_back(Intracranial);
1498 _values.push_back(Gut1);
1499 _values.push_back(LeftArmArterioles);
1500 _values.push_back(LeftArmFat);
1501 _values.push_back(LeftArmMuscle);
1502 _values.push_back(LeftArmSkin);
1503 _values.push_back(LeftArmBone);
1504 _values.push_back(LeftArmMicrovasculature);
1505 _values.push_back(LeftArmVenules);
1506 _values.push_back(LeftLegArterioles);
1507 _values.push_back(LeftLegFat);
1508 _values.push_back(LeftLegMuscle);
1509 _values.push_back(LeftLegSkin);
1510 _values.push_back(LeftLegBone);
1511 _values.push_back(LeftLegMicrovasculature);
1512 _values.push_back(LeftLegVenules);
1513 _values.push_back(RightArmArterioles);
1514 _values.push_back(RightArmFat);
1515 _values.push_back(RightArmMuscle);
1516 _values.push_back(RightArmSkin);
1517 _values.push_back(RightArmBone);
1518 _values.push_back(RightArmMicrovasculature);
1519 _values.push_back(RightArmVenules);
1520 _values.push_back(RightLegArterioles);
1521 _values.push_back(RightLegFat);
1522 _values.push_back(RightLegMuscle);
1523 _values.push_back(RightLegSkin);
1524 _values.push_back(RightLegBone);
1525 _values.push_back(RightLegMicrovasculature);
1526 _values.push_back(RightLegVenules);
1527 _values.push_back(Torso);
1528 _values.push_back(TorsoArterioles);
1529 _values.push_back(TorsoBone);
1530 _values.push_back(TorsoFat);
1531 _values.push_back(TorsoMicrovasculature);
1532 _values.push_back(TorsoMuscle);
1533 _values.push_back(TorsoSkin);
1534 _values.push_back(TorsoVenules);
1535 }
1536 return _values;
1537 }
1538 static bool HasValue(const std::string& v)
1539 {
1540 return std::find(_values.begin(), _values.end(), v) != _values.end();
1541 }
1542 static void AddValue(const std::string& v)
1543 {
1544 if (!HasValue(v))
1545 {
1546 ScopedMutex lock;
1547 _values.push_back(v);
1548 }
1549 }
1550 protected:
1551 static std::vector<std::string> _values;
1552 };
1553
1554 class ComputationalLifeVascularLink
1555 {
1556 public:
1557 // Heart and Lungs
1558 DEFINE_STATIC_STRING(VenousBufferToVenaCava);
1559 DEFINE_STATIC_STRING(AortaToArterialBuffer);
1560 // Head
1561 DEFINE_STATIC_STRING(AortaToIntracranial);
1562 DEFINE_STATIC_STRING(IntracranialToVenaCava);
1563 DEFINE_STATIC_STRING(AortaToExtracranial);
1564 DEFINE_STATIC_STRING(ExtracranialToVenaCava);
1565 // Left Arm
1566 DEFINE_STATIC_STRING(AortaToLeftArmArterioles);
1567 DEFINE_STATIC_STRING(LeftArmArteriolesToLeftArmBone);
1568 DEFINE_STATIC_STRING(LeftArmArteriolesToLeftArmFat);
1569 DEFINE_STATIC_STRING(LeftArmArteriolesToLeftArmMicrovasculature);
1570 DEFINE_STATIC_STRING(LeftArmArteriolesToLeftArmMuscle);
1571 DEFINE_STATIC_STRING(LeftArmArteriolesToLeftArmSkin);
1572
1573 DEFINE_STATIC_STRING(LeftArmBoneToLeftArmVenules);
1574 DEFINE_STATIC_STRING(LeftArmFatToLeftArmVenules);
1575 DEFINE_STATIC_STRING(LeftArmMicrovasculatureToLeftArmVenules);
1576 DEFINE_STATIC_STRING(LeftArmMuscleToLeftArmVenules);
1577 DEFINE_STATIC_STRING(LeftArmSkinToLeftArmVenules);
1578 DEFINE_STATIC_STRING(LeftArmVenulesToVenaCava);
1579
1580 // Left Leg
1581 DEFINE_STATIC_STRING(AortaToLeftLegArterioles);
1582 DEFINE_STATIC_STRING(LeftLegArteriolesToLeftLegBone);
1583 DEFINE_STATIC_STRING(LeftLegArteriolesToLeftLegFat);
1584 DEFINE_STATIC_STRING(LeftLegArteriolesToLeftLegMicrovasculature);
1585 DEFINE_STATIC_STRING(LeftLegArteriolesToLeftLegMuscle);
1586 DEFINE_STATIC_STRING(LeftLegArteriolesToLeftLegSkin);
1587
1588 DEFINE_STATIC_STRING(LeftLegBoneToLeftLegVenules);
1589 DEFINE_STATIC_STRING(LeftLegFatToLeftLegVenules);
1590 DEFINE_STATIC_STRING(LeftLegMicrovasculatureToLeftLegVenules);
1591 DEFINE_STATIC_STRING(LeftLegMuscleToLeftLegVenules);
1592 DEFINE_STATIC_STRING(LeftLegSkinToLeftLegVenules);
1593 DEFINE_STATIC_STRING(LeftLegVenulesToVenaCava);
1594
1595 // Gut
1596 DEFINE_STATIC_STRING(AortaToGut);
1597
1598 // Right Arm
1599 DEFINE_STATIC_STRING(AortaToRightArmArterioles);
1600 DEFINE_STATIC_STRING(RightArmArteriolesToRightArmBone);
1601 DEFINE_STATIC_STRING(RightArmArteriolesToRightArmFat);
1602 DEFINE_STATIC_STRING(RightArmArteriolesToRightArmMicrovasculature);
1603 DEFINE_STATIC_STRING(RightArmArteriolesToRightArmMuscle);
1604 DEFINE_STATIC_STRING(RightArmArteriolesToRightArmSkin);
1605
1606 DEFINE_STATIC_STRING(RightArmBoneToRightArmVenules);
1607 DEFINE_STATIC_STRING(RightArmFatToRightArmVenules);
1608 DEFINE_STATIC_STRING(RightArmMicrovasculatureToRightArmVenules);
1609 DEFINE_STATIC_STRING(RightArmMuscleToRightArmVenules);
1610 DEFINE_STATIC_STRING(RightArmSkinToRightArmVenules);
1611 DEFINE_STATIC_STRING(RightArmVenulesToVenaCava);
1612
1613 // Right Leg
1614 DEFINE_STATIC_STRING(AortaToRightLegArterioles);
1615 DEFINE_STATIC_STRING(RightLegArteriolesToRightLegBone);
1616 DEFINE_STATIC_STRING(RightLegArteriolesToRightLegFat);
1617 DEFINE_STATIC_STRING(RightLegArteriolesToRightLegMicrovasculature);
1618 DEFINE_STATIC_STRING(RightLegArteriolesToRightLegMuscle);
1619 DEFINE_STATIC_STRING(RightLegArteriolesToRightLegSkin);
1620
1621 DEFINE_STATIC_STRING(RightLegBoneToRightLegVenules);
1622 DEFINE_STATIC_STRING(RightLegFatToRightLegVenules);
1623 DEFINE_STATIC_STRING(RightLegMicrovasculatureToRightLegVenules);
1624 DEFINE_STATIC_STRING(RightLegMuscleToRightLegVenules);
1625 DEFINE_STATIC_STRING(RightLegSkinToRightLegVenules);
1626 DEFINE_STATIC_STRING(RightLegVenulesToVenaCava);
1627
1628 // Torso
1629 DEFINE_STATIC_STRING(AortaToTorsoArterioles);
1630 DEFINE_STATIC_STRING(TorsoArteriolesToTorsoBone);
1631 DEFINE_STATIC_STRING(TorsoArteriolesToTorsoFat);
1632 DEFINE_STATIC_STRING(TorsoArteriolesToTorsoMicrovasculature);
1633 DEFINE_STATIC_STRING(TorsoArteriolesToTorsoMuscle);
1634 DEFINE_STATIC_STRING(TorsoArteriolesToTorsoSkin);
1635
1636 DEFINE_STATIC_STRING(TorsoSkinToTorsoVenules);
1637 DEFINE_STATIC_STRING(TorsoMuscleToTorsoVenules);
1638 DEFINE_STATIC_STRING(TorsoMicrovasculatureToTorsoVenules);
1639 DEFINE_STATIC_STRING(TorsoFatToTorsoVenules);
1640 DEFINE_STATIC_STRING(TorsoBoneToTorsoVenules);
1641 DEFINE_STATIC_STRING(TorsoVenulesToVenaCava);
1642
1643 // Vascular To Tissue Links
1644 DEFINE_STATIC_STRING(TorsoBoneVascularToTissue);
1645 DEFINE_STATIC_STRING(LeftArmBoneVascularToTissue);
1646 DEFINE_STATIC_STRING(LeftLegBoneVascularToTissue);
1647 DEFINE_STATIC_STRING(RightArmBoneVascularToTissue);
1648 DEFINE_STATIC_STRING(RightLegBoneVascularToTissue);
1649 DEFINE_STATIC_STRING(BrainVascularToTissue);
1650 DEFINE_STATIC_STRING(TorsoFatVascularToTissue);
1651 DEFINE_STATIC_STRING(LeftArmFatVascularToTissue);
1652 DEFINE_STATIC_STRING(LeftLegFatVascularToTissue);
1653 DEFINE_STATIC_STRING(RightArmFatVascularToTissue);
1654 DEFINE_STATIC_STRING(RightLegFatVascularToTissue);
1655 DEFINE_STATIC_STRING(SmallIntestineVascularToTissue);
1656 DEFINE_STATIC_STRING(LargeIntestineVascularToTissue);
1657 DEFINE_STATIC_STRING(SplanchnicVascularToTissue);
1658 DEFINE_STATIC_STRING(LeftKidneyVascularToTissue);
1659 DEFINE_STATIC_STRING(LeftLungVascularToTissue);
1660 DEFINE_STATIC_STRING(LiverVascularToTissue);
1661 DEFINE_STATIC_STRING(TorsoMuscleVascularToTissue);
1662 DEFINE_STATIC_STRING(LeftArmMuscleVascularToTissue);
1663 DEFINE_STATIC_STRING(LeftLegMuscleVascularToTissue);
1664 DEFINE_STATIC_STRING(RightArmMuscleVascularToTissue);
1665 DEFINE_STATIC_STRING(RightLegMuscleVascularToTissue);
1666 DEFINE_STATIC_STRING(MyocardiumVascularToTissue);
1667 DEFINE_STATIC_STRING(RightKidneyVascularToTissue);
1668 DEFINE_STATIC_STRING(RightLungVascularToTissue);
1669 DEFINE_STATIC_STRING(TorsoSkinVascularToTissue);
1670 DEFINE_STATIC_STRING(LeftArmSkinVascularToTissue);
1671 DEFINE_STATIC_STRING(LeftLegSkinVascularToTissue);
1672 DEFINE_STATIC_STRING(RightArmSkinVascularToTissue);
1673 DEFINE_STATIC_STRING(RightLegSkinVascularToTissue);
1674 DEFINE_STATIC_STRING(SpleenVascularToTissue);
1675
1676 static const std::vector<std::string>& GetValues()
1677 {
1678 ScopedMutex lock;
1679 if (_values.empty())
1680 {
1681 _values.push_back(AortaToIntracranial);
1682 _values.push_back(IntracranialToVenaCava);
1683 _values.push_back(AortaToExtracranial);
1684 _values.push_back(ExtracranialToVenaCava);
1685
1686 _values.push_back(LeftArmArteriolesToLeftArmBone);
1687 _values.push_back(LeftArmArteriolesToLeftArmFat);
1688 _values.push_back(LeftArmArteriolesToLeftArmMicrovasculature);
1689 _values.push_back(LeftArmArteriolesToLeftArmMuscle);
1690 _values.push_back(LeftArmArteriolesToLeftArmSkin);
1691
1692 _values.push_back(LeftLegArteriolesToLeftLegBone);
1693 _values.push_back(LeftLegArteriolesToLeftLegFat);
1694 _values.push_back(LeftLegArteriolesToLeftLegMicrovasculature);
1695 _values.push_back(LeftLegArteriolesToLeftLegMuscle);
1696 _values.push_back(LeftLegArteriolesToLeftLegSkin);
1697
1698 _values.push_back(RightArmArteriolesToRightArmBone);
1699 _values.push_back(RightArmArteriolesToRightArmFat);
1700 _values.push_back(RightArmArteriolesToRightArmMicrovasculature);
1701 _values.push_back(RightArmArteriolesToRightArmMuscle);
1702 _values.push_back(RightArmArteriolesToRightArmSkin);
1703
1704 _values.push_back(RightLegArteriolesToRightLegBone);
1705 _values.push_back(RightLegArteriolesToRightLegFat);
1706 _values.push_back(RightLegArteriolesToRightLegMicrovasculature);
1707 _values.push_back(RightLegArteriolesToRightLegMuscle);
1708 _values.push_back(RightLegArteriolesToRightLegSkin);
1709
1710 _values.push_back(AortaToTorsoArterioles);
1711 _values.push_back(TorsoArteriolesToTorsoBone);
1712 _values.push_back(TorsoArteriolesToTorsoFat);
1713 _values.push_back(TorsoArteriolesToTorsoMicrovasculature);
1714 _values.push_back(TorsoArteriolesToTorsoMuscle);
1715 _values.push_back(TorsoArteriolesToTorsoSkin);
1716
1717 _values.push_back(RightArmBoneToRightArmVenules);
1718 _values.push_back(RightArmFatToRightArmVenules);
1719 _values.push_back(RightArmMicrovasculatureToRightArmVenules);
1720 _values.push_back(RightArmMuscleToRightArmVenules);
1721 _values.push_back(RightArmSkinToRightArmVenules);
1722 _values.push_back(RightLegBoneToRightLegVenules);
1723 _values.push_back(RightLegFatToRightLegVenules);
1724 _values.push_back(RightLegMicrovasculatureToRightLegVenules);
1725 _values.push_back(RightLegMuscleToRightLegVenules);
1726 _values.push_back(RightLegSkinToRightLegVenules);
1727 _values.push_back(LeftArmBoneToLeftArmVenules);
1728 _values.push_back(LeftArmFatToLeftArmVenules);
1729 _values.push_back(LeftArmMicrovasculatureToLeftArmVenules);
1730 _values.push_back(LeftArmMuscleToLeftArmVenules);
1731 _values.push_back(LeftArmSkinToLeftArmVenules);
1732 _values.push_back(LeftLegBoneToLeftLegVenules);
1733 _values.push_back(LeftLegFatToLeftLegVenules);
1734 _values.push_back(LeftLegMicrovasculatureToLeftLegVenules);
1735 _values.push_back(LeftLegMuscleToLeftLegVenules);
1736 _values.push_back(LeftLegSkinToLeftLegVenules);
1737 _values.push_back(TorsoSkinToTorsoVenules);
1738 _values.push_back(TorsoMuscleToTorsoVenules);
1739 _values.push_back(TorsoMicrovasculatureToTorsoVenules);
1740 _values.push_back(TorsoFatToTorsoVenules);
1741 _values.push_back(TorsoBoneToTorsoVenules);
1742 _values.push_back(TorsoVenulesToVenaCava);
1743
1744
1745 _values.push_back(TorsoBoneVascularToTissue);
1746 _values.push_back(LeftArmBoneVascularToTissue);
1747 _values.push_back(LeftLegBoneVascularToTissue);
1748 _values.push_back(RightArmBoneVascularToTissue);
1749 _values.push_back(RightLegBoneVascularToTissue);
1750 _values.push_back(BrainVascularToTissue);
1751 _values.push_back(TorsoFatVascularToTissue);
1752 _values.push_back(LeftArmFatVascularToTissue);
1753 _values.push_back(LeftLegFatVascularToTissue);
1754 _values.push_back(RightArmFatVascularToTissue);
1755 _values.push_back(RightLegFatVascularToTissue);
1756 _values.push_back(SmallIntestineVascularToTissue);
1757 _values.push_back(LargeIntestineVascularToTissue);
1758 _values.push_back(SplanchnicVascularToTissue);
1759 _values.push_back(LeftKidneyVascularToTissue);
1760 _values.push_back(LeftLungVascularToTissue);
1761 _values.push_back(LiverVascularToTissue);
1762 _values.push_back(TorsoMuscleVascularToTissue);
1763 _values.push_back(LeftArmMuscleVascularToTissue);
1764 _values.push_back(LeftLegMuscleVascularToTissue);
1765 _values.push_back(RightArmMuscleVascularToTissue);
1766 _values.push_back(RightLegMuscleVascularToTissue);
1767 _values.push_back(MyocardiumVascularToTissue);
1768 _values.push_back(RightKidneyVascularToTissue);
1769 _values.push_back(RightLungVascularToTissue);
1770 _values.push_back(TorsoSkinVascularToTissue);
1771 _values.push_back(LeftArmSkinVascularToTissue);
1772 _values.push_back(LeftLegSkinVascularToTissue);
1773 _values.push_back(RightArmSkinVascularToTissue);
1774 _values.push_back(RightLegSkinVascularToTissue);
1775 _values.push_back(SpleenVascularToTissue);
1776 }
1777 return _values;
1778 }
1779 static bool HasValue(const std::string& v)
1780 {
1781 return std::find(_values.begin(), _values.end(), v) != _values.end();
1782 }
1783 static void AddValue(const std::string& v)
1784 {
1785 if (!HasValue(v))
1786 {
1787 ScopedMutex lock;
1788 _values.push_back(v);
1789 }
1790 }
1791 protected:
1792 static std::vector<std::string> _values;
1793 };
1794
1795 class UrineCompartment
1796 {
1797 public:
1798 DEFINE_STATIC_STRING(Ureters);
1799 /*****/DEFINE_STATIC_STRING(LeftUreter);
1800 /*****/DEFINE_STATIC_STRING(RightUreter);
1801 DEFINE_STATIC_STRING(Bladder);
1802
1803 static const std::vector<std::string>& GetValues()
1804 {
1805 ScopedMutex lock;
1806 if (_values.empty())
1807 {
1808 _values.push_back(Ureters);
1809 _values.push_back(LeftUreter);
1810 _values.push_back(RightUreter);
1811 _values.push_back(Bladder);
1812 }
1813 return _values;
1814 }
1815 static bool HasValue(const std::string& v)
1816 {
1817 return std::find(_values.begin(), _values.end(), v) != _values.end();
1818 }
1819 static void AddValue(const std::string& v)
1820 {
1821 if (!HasValue(v))
1822 {
1823 ScopedMutex lock;
1824 _values.push_back(v);
1825 }
1826 }
1827 protected:
1828 static std::vector<std::string> _values;
1829 };
1830
1831 class UrineLink
1832 {
1833 public:
1834 DEFINE_STATIC_STRING(LeftTubulesToUreter);
1835 DEFINE_STATIC_STRING(LeftUreterToBladder);
1836
1837 DEFINE_STATIC_STRING(RightTubulesToUreter);
1838 DEFINE_STATIC_STRING(RightUreterToBladder);
1839
1840 DEFINE_STATIC_STRING(BladderToGround);
1841 DEFINE_STATIC_STRING(BladderToGroundSource);
1842
1843 static const std::vector<std::string>& GetValues()
1844 {
1845 ScopedMutex lock;
1846 if (_values.empty())
1847 {
1848 _values.push_back(LeftTubulesToUreter);
1849 _values.push_back(LeftUreterToBladder);
1850 _values.push_back(RightTubulesToUreter);
1851 _values.push_back(RightUreterToBladder);
1852 _values.push_back(BladderToGround);
1853 _values.push_back(BladderToGroundSource);
1854 }
1855 return _values;
1856 }
1857 static bool HasValue(const std::string& v)
1858 {
1859 return std::find(_values.begin(), _values.end(), v) != _values.end();
1860 }
1861 static void AddValue(const std::string& v)
1862 {
1863 if (!HasValue(v))
1864 {
1865 ScopedMutex lock;
1866 _values.push_back(v);
1867 }
1868 }
1869 protected:
1870 static std::vector<std::string> _values;
1871 };
1872
1873 class LymphCompartment
1874 {
1875 public:
1876 DEFINE_STATIC_STRING(Lymph);
1877
1878 static const std::vector<std::string>& GetValues()
1879 {
1880 ScopedMutex lock;
1881 if (_values.empty())
1882 {
1883 _values.push_back(Lymph);
1884 }
1885 return _values;
1886 }
1887 static bool HasValue(const std::string& v)
1888 {
1889 return std::find(_values.begin(), _values.end(), v) != _values.end();
1890 }
1891 static void AddValue(const std::string& v)
1892 {
1893 if (!HasValue(v))
1894 {
1895 ScopedMutex lock;
1896 _values.push_back(v);
1897 }
1898 }
1899 protected:
1900 static std::vector<std::string> _values;
1901 };
1902
1903 class LymphLink
1904 {
1905 public:
1906 DEFINE_STATIC_STRING(BoneTissueToLymph);
1907 DEFINE_STATIC_STRING(BrainTissueToLymph);
1908 DEFINE_STATIC_STRING(FatTissueToLymph);
1909 DEFINE_STATIC_STRING(GutTissueToLymph);
1910 DEFINE_STATIC_STRING(LeftKidneyTissueToLymph);
1911 DEFINE_STATIC_STRING(LeftLungTissueToLymph);
1912 DEFINE_STATIC_STRING(LiverTissueToLymph);
1913 DEFINE_STATIC_STRING(MuscleTissueToLymph);
1914 DEFINE_STATIC_STRING(MyocardiumTissueToLymph);
1915 DEFINE_STATIC_STRING(RightKidneyTissueToLymph);
1916 DEFINE_STATIC_STRING(RightLungTissueToLymph);
1917 DEFINE_STATIC_STRING(SkinTissueToLymph);
1918 DEFINE_STATIC_STRING(SpleenTissueToLymph);
1919
1920 DEFINE_STATIC_STRING(LymphToVenaCava);
1921
1922 static const std::vector<std::string>& GetValues()
1923 {
1924 ScopedMutex lock;
1925 if (_values.empty())
1926 {
1927 _values.push_back(BoneTissueToLymph);
1928 _values.push_back(BrainTissueToLymph);
1929 _values.push_back(FatTissueToLymph);
1930 _values.push_back(GutTissueToLymph);
1931 _values.push_back(LeftKidneyTissueToLymph);
1932 _values.push_back(LeftLungTissueToLymph);
1933 _values.push_back(LiverTissueToLymph);
1934 _values.push_back(MuscleTissueToLymph);
1935 _values.push_back(MyocardiumTissueToLymph);
1936 _values.push_back(RightKidneyTissueToLymph);
1937 _values.push_back(RightLungTissueToLymph);
1938 _values.push_back(SkinTissueToLymph);
1939 _values.push_back(SpleenTissueToLymph);
1940 _values.push_back(LymphToVenaCava);
1941 }
1942 return _values;
1943 }
1944 static bool HasValue(const std::string& v)
1945 {
1946 return std::find(_values.begin(), _values.end(), v) != _values.end();
1947 }
1948 static void AddValue(const std::string& v)
1949 {
1950 if (!HasValue(v))
1951 {
1952 ScopedMutex lock;
1953 _values.push_back(v);
1954 }
1955 }
1956 protected:
1957 static std::vector<std::string> _values;
1958 };
1959
1960 class TemperatureCompartment
1961 {
1962 public:
1963 DEFINE_STATIC_STRING(Active);
1964 DEFINE_STATIC_STRING(Ambient);
1965 DEFINE_STATIC_STRING(Clothing);
1966 DEFINE_STATIC_STRING(Enclosure);
1967 DEFINE_STATIC_STRING(ExternalCore);
1968 DEFINE_STATIC_STRING(ExternalSkin);
1969 DEFINE_STATIC_STRING(ExternalGround);
1970 DEFINE_STATIC_STRING(InternalCore);
1971 DEFINE_STATIC_STRING(InternalSkin);
1972 DEFINE_STATIC_STRING(InternalGround);
1973
1974 static const std::vector<std::string>& GetValues()
1975 {
1976 ScopedMutex lock;
1977 if (_values.empty())
1978 {
1979 _values.push_back(Active);
1980 _values.push_back(Ambient);
1981 _values.push_back(Clothing);
1982 _values.push_back(Enclosure);
1983 _values.push_back(ExternalCore);
1984 _values.push_back(ExternalSkin);
1985 _values.push_back(ExternalGround);
1986 _values.push_back(InternalCore);
1987 _values.push_back(InternalSkin);
1988 _values.push_back(InternalGround);
1989 }
1990 return _values;
1991 }
1992 static bool HasValue(const std::string& v)
1993 {
1994 return std::find(_values.begin(), _values.end(), v) != _values.end();
1995 }
1996 static void AddValue(const std::string& v)
1997 {
1998 if (!HasValue(v))
1999 {
2000 ScopedMutex lock;
2001 _values.push_back(v);
2002 }
2003 }
2004 protected:
2005 static std::vector<std::string> _values;
2006 };
2007
2008 class TemperatureLink
2009 {
2010 public:
2011
2012 DEFINE_STATIC_STRING(ActiveToClothing);
2013 DEFINE_STATIC_STRING(ClothingToEnclosure);
2014 DEFINE_STATIC_STRING(ClothingToEnvironment);
2015 DEFINE_STATIC_STRING(ExternalCoreToGround);
2016 DEFINE_STATIC_STRING(GroundToActive);
2017 DEFINE_STATIC_STRING(GroundToClothing);
2018 DEFINE_STATIC_STRING(GroundToEnclosure);
2019 DEFINE_STATIC_STRING(GroundToEnvironment);
2020 DEFINE_STATIC_STRING(ExternalSkinToGround);
2021 DEFINE_STATIC_STRING(ExternalSkinToClothing);
2022 DEFINE_STATIC_STRING(GroundToInternalCore);
2023 DEFINE_STATIC_STRING(InternalCoreToInternalSkin);
2024 DEFINE_STATIC_STRING(InternalCoreToGround);
2025 DEFINE_STATIC_STRING(InternalSkinToGround);
2026 DEFINE_STATIC_STRING(InternalCoreToExternalCore);
2027 DEFINE_STATIC_STRING(InternalSkinToExternalSkin);
2028
2029 static const std::vector<std::string>& GetValues()
2030 {
2031 ScopedMutex lock;
2032 if (_values.empty())
2033 {
2034 _values.push_back(ActiveToClothing);
2035 _values.push_back(ClothingToEnclosure);
2036 _values.push_back(ClothingToEnvironment);
2037 _values.push_back(ExternalCoreToGround);
2038 _values.push_back(GroundToActive);
2039 _values.push_back(GroundToClothing);
2040 _values.push_back(GroundToEnclosure);
2041 _values.push_back(GroundToEnvironment);
2042 _values.push_back(ExternalSkinToGround);
2043 _values.push_back(ExternalSkinToClothing);
2044 _values.push_back(GroundToInternalCore);
2045 _values.push_back(InternalCoreToInternalSkin);
2046 _values.push_back(InternalCoreToGround);
2047 _values.push_back(InternalSkinToGround);
2048 _values.push_back(InternalCoreToExternalCore);
2049 _values.push_back(InternalSkinToExternalSkin);
2050 }
2051 return _values;
2052 }
2053 static bool HasValue(const std::string& v)
2054 {
2055 return std::find(_values.begin(), _values.end(), v) != _values.end();
2056 }
2057 static void AddValue(const std::string& v)
2058 {
2059 if (!HasValue(v))
2060 {
2061 ScopedMutex lock;
2062 _values.push_back(v);
2063 }
2064 }
2065 protected:
2066 static std::vector<std::string> _values;
2067 };
2068
2069 class EnvironmentCompartment
2070 {
2071 public:
2072 DEFINE_STATIC_STRING(Ambient);
2073
2074 static const std::vector<std::string>& GetValues()
2075 {
2076 ScopedMutex lock;
2077 if (_values.empty())
2078 {
2079 _values.push_back(Ambient);
2080 }
2081 return _values;
2082 }
2083 static bool HasValue(const std::string& v)
2084 {
2085 return std::find(_values.begin(), _values.end(), v) != _values.end();
2086 }
2087 static void AddValue(const std::string& v)
2088 {
2089 if (!HasValue(v))
2090 {
2091 ScopedMutex lock;
2092 _values.push_back(v);
2093 }
2094 }
2095 protected:
2096 static std::vector<std::string> _values;
2097 };
2098
2099 class AnesthesiaMachineCompartment
2100 {
2101 public:
2102 DEFINE_STATIC_STRING_EX(Connection, AnesthesiaMachineConnection);
2103 DEFINE_STATIC_STRING_EX(ExpiratoryLimb, AnesthesiaMachineExpiratoryLimb);
2104 DEFINE_STATIC_STRING_EX(GasInlet, AnesthesiaMachineGasInlet);
2105 DEFINE_STATIC_STRING_EX(GasSource, AnesthesiaMachineGasSource);
2106 DEFINE_STATIC_STRING_EX(InspiratoryLimb, AnesthesiaMachineInspiratoryLimb);
2107 DEFINE_STATIC_STRING_EX(ReliefValve, AnesthesiaMachineReliefValve);
2108 DEFINE_STATIC_STRING_EX(Scrubber, AnesthesiaMachineScrubber);
2109 DEFINE_STATIC_STRING_EX(Selector, AnesthesiaMachineSelector);
2110 DEFINE_STATIC_STRING_EX(Ventilator, AnesthesiaMachineVentilator);
2111 DEFINE_STATIC_STRING_EX(YPiece, AnesthesiaMachineYPiece);
2112
2113 static const std::vector<std::string>& GetValues()
2114 {
2115 ScopedMutex lock;
2116 if (_values.empty())
2117 {
2118 _values.push_back(Connection);
2119 _values.push_back(ExpiratoryLimb);
2120 _values.push_back(GasInlet);
2121 _values.push_back(GasSource);
2122 _values.push_back(InspiratoryLimb);
2123 _values.push_back(ReliefValve);
2124 _values.push_back(Scrubber);
2125 _values.push_back(Selector);
2126 _values.push_back(Ventilator);
2127 _values.push_back(YPiece);
2128 }
2129 return _values;
2130 }
2131 static bool HasValue(const std::string& v)
2132 {
2133 return std::find(_values.begin(), _values.end(), v) != _values.end();
2134 }
2135 static void AddValue(const std::string& v)
2136 {
2137 if (!HasValue(v))
2138 {
2139 ScopedMutex lock;
2140 _values.push_back(v);
2141 }
2142 }
2143 protected:
2144 static std::vector<std::string> _values;
2145 };
2146
2147 class AnesthesiaMachineLink
2148 {
2149 public:
2150 DEFINE_STATIC_STRING_EX(EnvironmentToReliefValve, EnvironmentToAnesthesiaMachineReliefValve);
2151 DEFINE_STATIC_STRING_EX(VentilatorToSelector, AnesthesiaMachineVentilatorToSelector);
2152 DEFINE_STATIC_STRING_EX(SelectorToReliefValve, AnesthesiaMachineSelectorToReliefValve);
2153 DEFINE_STATIC_STRING_EX(SelectorToScrubber, AnesthesiaMachineSelectorToScrubber);
2154 DEFINE_STATIC_STRING_EX(ScrubberToGasInlet, AnesthesiaMachineScrubberToGasInlet);
2155 DEFINE_STATIC_STRING_EX(GasSourceToGasInlet, AnesthesiaMachineGasSourceToGasInlet);
2156 DEFINE_STATIC_STRING_EX(GasInletToInspiratoryLimb, AnesthesiaMachineGasInletToInspiratoryLimb);
2157 DEFINE_STATIC_STRING_EX(InspiratoryLimbToYPiece, AnesthesiaMachineInspiratoryLimbToYPiece);
2158 DEFINE_STATIC_STRING_EX(YPieceToExpiratoryLimb, AnesthesiaMachineYPieceToExpiratoryLimb);
2159 DEFINE_STATIC_STRING_EX(ExpiratoryLimbToSelector, AnesthesiaMachineExpiratoryLimbToSelector);
2160 DEFINE_STATIC_STRING_EX(YPieceToConnection, AnesthesiaMachineYPieceToConnection);
2161 DEFINE_STATIC_STRING_EX(ConnectionLeak, AnesthesiaMachineConnectionLeak);
2162 DEFINE_STATIC_STRING_EX(ConnectionToMouth, AnesthesiaMachineConnectionToMouth);
2163 DEFINE_STATIC_STRING_EX(ConnectionToNasalCavity, AnesthesiaMachineConnectionToNasalCavity);
2164
2165 static const std::vector<std::string>& GetValues()
2166 {
2167 ScopedMutex lock;
2168 if (_values.empty())
2169 {
2170 _values.push_back(EnvironmentToReliefValve);
2171 _values.push_back(VentilatorToSelector);
2172 _values.push_back(SelectorToReliefValve);
2173 _values.push_back(SelectorToScrubber);
2174 _values.push_back(ScrubberToGasInlet);
2175 _values.push_back(GasSourceToGasInlet);
2176 _values.push_back(GasInletToInspiratoryLimb);
2177 _values.push_back(InspiratoryLimbToYPiece);
2178 _values.push_back(YPieceToExpiratoryLimb);
2179 _values.push_back(ExpiratoryLimbToSelector);
2180 _values.push_back(YPieceToConnection);
2181 _values.push_back(ConnectionLeak);
2182 _values.push_back(ConnectionToMouth);
2183 _values.push_back(ConnectionToNasalCavity);
2184 }
2185 return _values;
2186 }
2187 static bool HasValue(const std::string& v)
2188 {
2189 return std::find(_values.begin(), _values.end(), v) != _values.end();
2190 }
2191 static void AddValue(const std::string& v)
2192 {
2193 if (!HasValue(v))
2194 {
2195 ScopedMutex lock;
2196 _values.push_back(v);
2197 }
2198 }
2199 protected:
2200 static std::vector<std::string> _values;
2201 };
2202
2203 class BagValveMaskCompartment
2204 {
2205 public:
2206 DEFINE_STATIC_STRING_EX(Reservoir, BagValveMaskReservoir);
2207 DEFINE_STATIC_STRING_EX(Bag, BagValveMaskBag);
2208 DEFINE_STATIC_STRING_EX(Valve, BagValveMaskValve);
2209 DEFINE_STATIC_STRING_EX(Filter, BagValveMaskFilter);
2210 DEFINE_STATIC_STRING_EX(Connection, BagValveMaskConnection);
2211
2212 static const std::vector<std::string>& GetValues()
2213 {
2214 ScopedMutex lock;
2215 if (_values.empty())
2216 {
2217 _values.push_back(Reservoir);
2218 _values.push_back(Bag);
2219 _values.push_back(Valve);
2220 _values.push_back(Filter);
2221 _values.push_back(Connection);
2222 }
2223 return _values;
2224 }
2225 protected:
2226 static std::vector<std::string> _values;
2227 };
2228
2229 class BagValveMaskLink
2230 {
2231 public:
2232 DEFINE_STATIC_STRING_EX(ReservoirToBag, BagValveMaskReservoirToBag);
2233 DEFINE_STATIC_STRING_EX(BagToValve, BagValveMaskBagToValve);
2234 DEFINE_STATIC_STRING_EX(ValveToFilter, BagValveMaskValveToFilter);
2235 DEFINE_STATIC_STRING_EX(FilterToConnection, BagValveMaskFilterToConnection);
2236 DEFINE_STATIC_STRING_EX(ConnectionToEnvironment, BagValveMaskConnectionToEnvironment);
2237 DEFINE_STATIC_STRING_EX(ConnectionToMouth, BagValveMaskConnectionToMouth);
2238 DEFINE_STATIC_STRING_EX(ConnectionToNasalCavity, BagValveMaskConnectionToNasalCavity);
2239
2240 static const std::vector<std::string>& GetValues()
2241 {
2242 ScopedMutex lock;
2243 if (_values.empty())
2244 {
2245 _values.push_back(ReservoirToBag);
2246 _values.push_back(BagToValve);
2247 _values.push_back(ValveToFilter);
2248 _values.push_back(FilterToConnection);
2249 _values.push_back(ConnectionToEnvironment);
2250 _values.push_back(ConnectionToMouth);
2251 _values.push_back(ConnectionToNasalCavity);
2252 }
2253 return _values;
2254 }
2255 protected:
2256 static std::vector<std::string> _values;
2257 };
2258
2259 class ExtracorporealMembraneOxygenationDeviceCompartment
2260 {
2261 public:
2262 // Liquid
2263 DEFINE_STATIC_STRING_EX(DrainageCannula, ExtracorporealMembraneOxygenationDeviceDrainageCannula);
2264 DEFINE_STATIC_STRING_EX(ReturnCannula, ExtracorporealMembraneOxygenationDeviceReturnCannula);
2265 DEFINE_STATIC_STRING_EX(DrainageLimb, ExtracorporealMembraneOxygenationDeviceDrainageLimb);
2266 DEFINE_STATIC_STRING_EX(ReturnLimb, ExtracorporealMembraneOxygenationDeviceReturnLimb);
2267 DEFINE_STATIC_STRING_EX(Infuser, ExtracorporealMembraneOxygenationDeviceInfuser);
2268 DEFINE_STATIC_STRING_EX(Pump, ExtracorporealMembraneOxygenationDevicePump);
2269 DEFINE_STATIC_STRING_EX(OxygenatorLiquid, ExtracorporealMembraneOxygenationDeviceOxygenatorLiquid);
2270 DEFINE_STATIC_STRING_EX(InletProbe, ExtracorporealMembraneOxygenationDeviceInletProbe);
2271 DEFINE_STATIC_STRING_EX(OutletProbe, ExtracorporealMembraneOxygenationDeviceOutletProbe);
2272 DEFINE_STATIC_STRING_EX(Bag, ExtracorporealMembraneOxygenationDeviceBag);
2273
2274 // Gas
2275 DEFINE_STATIC_STRING_EX(Blender, ExtracorporealMembraneOxygenationDeviceBlender);
2276 DEFINE_STATIC_STRING_EX(OxygenatorGas, ExtracorporealMembraneOxygenationDeviceOxygenatorGas);
2277 DEFINE_STATIC_STRING_EX(Ambient, ExtracorporealMembraneOxygenationDeviceAmbient);
2278
2279 static const std::vector<std::string>& GetValues()
2280 {
2281 ScopedMutex lock;
2282 if (_values.empty())
2283 {
2284 // Liquid
2285 _values.push_back(DrainageCannula);
2286 _values.push_back(ReturnCannula);
2287 _values.push_back(DrainageLimb);
2288 _values.push_back(ReturnLimb);
2289 _values.push_back(Infuser);
2290 _values.push_back(Pump);
2291 _values.push_back(OxygenatorLiquid);
2292 _values.push_back(InletProbe);
2293 _values.push_back(OutletProbe);
2294 _values.push_back(Bag);
2295
2296 // Gas
2297 _values.push_back(Blender);
2298 _values.push_back(OxygenatorGas);
2299 _values.push_back(Ambient);
2300 }
2301 return _values;
2302 }
2303 static bool HasValue(const std::string& v)
2304 {
2305 return std::find(_values.begin(), _values.end(), v) != _values.end();
2306 }
2307 static void AddValue(const std::string& v)
2308 {
2309 if (!HasValue(v))
2310 {
2311 ScopedMutex lock;
2312 _values.push_back(v);
2313 }
2314 }
2315 protected:
2316 static std::vector<std::string> _values;
2317 };
2318
2319 class ExtracorporealMembraneOxygenationDeviceLink
2320 {
2321 public:
2322 // Liquid
2323 DEFINE_STATIC_STRING(DrainageCannulaToDrainageLimb);
2324 DEFINE_STATIC_STRING(DrainageLimbToInfuser);
2325 DEFINE_STATIC_STRING(InfuserToPump);
2326 DEFINE_STATIC_STRING(PumpToInletProbe);
2327 DEFINE_STATIC_STRING(InletProbeToOxygenator);
2328 DEFINE_STATIC_STRING(OxygenatorToOutletProbe);
2329 DEFINE_STATIC_STRING(OutletProbeToReturnLimb);
2330 DEFINE_STATIC_STRING(ReturnLimbToReturnCannula);
2331 DEFINE_STATIC_STRING(GroundToBag);
2332 DEFINE_STATIC_STRING(BagToInfuser);
2333
2334 // Gas
2335 DEFINE_STATIC_STRING(BlenderToOxygenator);
2336 DEFINE_STATIC_STRING(AmbientToOxygenator);
2337
2338 static const std::vector<std::string>& GetValues()
2339 {
2340 ScopedMutex lock;
2341 if (_values.empty())
2342 {
2343 // Liquid
2344 _values.push_back(DrainageCannulaToDrainageLimb);
2345 _values.push_back(DrainageLimbToInfuser);
2346 _values.push_back(InfuserToPump);
2347 _values.push_back(PumpToInletProbe);
2348 _values.push_back(InletProbeToOxygenator);
2349 _values.push_back(OxygenatorToOutletProbe);
2350 _values.push_back(OutletProbeToReturnLimb);
2351 _values.push_back(ReturnLimbToReturnCannula);
2352 _values.push_back(GroundToBag);
2353 _values.push_back(BagToInfuser);
2354
2355 // Gas
2356 _values.push_back(BlenderToOxygenator);
2357 _values.push_back(AmbientToOxygenator);
2358 }
2359 return _values;
2360 }
2361 static bool HasValue(const std::string& v)
2362 {
2363 return std::find(_values.begin(), _values.end(), v) != _values.end();
2364 }
2365 static void AddValue(const std::string& v)
2366 {
2367 if (!HasValue(v))
2368 {
2369 ScopedMutex lock;
2370 _values.push_back(v);
2371 }
2372 }
2373 protected:
2374 static std::vector<std::string> _values;
2375 };
2376
2377 class InhalerCompartment
2378 {
2379 public:
2380 DEFINE_STATIC_STRING_EX(Mouthpiece, InhalerMouthpiece);
2381
2382 static const std::vector<std::string>& GetValues()
2383 {
2384 ScopedMutex lock;
2385 if (_values.empty())
2386 {
2387 _values.push_back(Mouthpiece);
2388 }
2389 return _values;
2390 }
2391 static bool HasValue(const std::string& v)
2392 {
2393 return std::find(_values.begin(), _values.end(), v) != _values.end();
2394 }
2395 static void AddValue(const std::string& v)
2396 {
2397 if (!HasValue(v))
2398 {
2399 ScopedMutex lock;
2400 _values.push_back(v);
2401 }
2402 }
2403 protected:
2404 static std::vector<std::string> _values;
2405 };
2406
2407 class InhalerLink
2408 {
2409 public:
2410 DEFINE_STATIC_STRING_EX(EnvironmentToMouthpiece, EnvironmentToInhalerMouthpiece);
2411 DEFINE_STATIC_STRING_EX(MouthpieceToMouth, InhalerMouthpieceToMouth);
2412
2413 static const std::vector<std::string>& GetValues()
2414 {
2415 ScopedMutex lock;
2416 if (_values.empty())
2417 {
2418 _values.push_back(EnvironmentToMouthpiece);
2419 _values.push_back(MouthpieceToMouth);
2420 }
2421 return _values;
2422 }
2423 static bool HasValue(const std::string& v)
2424 {
2425 return std::find(_values.begin(), _values.end(), v) != _values.end();
2426 }
2427 static void AddValue(const std::string& v)
2428 {
2429 if (!HasValue(v))
2430 {
2431 ScopedMutex lock;
2432 _values.push_back(v);
2433 }
2434 }
2435 protected:
2436 static std::vector<std::string> _values;
2437 };
2438
2439 class MechanicalVentilationCompartment
2440 {
2441 public:
2442 DEFINE_STATIC_STRING_EX(Connection, MechanicalVentilationConnection);
2443 DEFINE_STATIC_STRING_EX(DeadSpace, MechanicalVentilationDeadSpace);
2444
2445 static const std::vector<std::string>& GetValues()
2446 {
2447 ScopedMutex lock;
2448 if (_values.empty())
2449 {
2450 _values.push_back(Connection);
2451 _values.push_back(DeadSpace);
2452 }
2453 return _values;
2454 }
2455 static bool HasValue(const std::string& v)
2456 {
2457 return std::find(_values.begin(), _values.end(), v) != _values.end();
2458 }
2459 static void AddValue(const std::string& v)
2460 {
2461 if (!HasValue(v))
2462 {
2463 ScopedMutex lock;
2464 _values.push_back(v);
2465 }
2466 }
2467 protected:
2468 static std::vector<std::string> _values;
2469 };
2470
2471 class MechanicalVentilationLink
2472 {
2473 public:
2474 DEFINE_STATIC_STRING_EX(ConnectionToDeadSpace, MechanicalVentilationConnectionToDeadSpace);
2475 DEFINE_STATIC_STRING_EX(DeadSpaceToMouth, MechanicalVentilationDeadSpaceToMouth);
2476 DEFINE_STATIC_STRING_EX(DeadSpaceToNasalCavity, MechanicalVentilationDeadSpaceToNasalCavity);
2477
2478 static const std::vector<std::string>& GetValues()
2479 {
2480 ScopedMutex lock;
2481 if (_values.empty())
2482 {
2483 _values.push_back(ConnectionToDeadSpace);
2484 _values.push_back(DeadSpaceToMouth);
2485 _values.push_back(DeadSpaceToNasalCavity);
2486 }
2487 return _values;
2488 }
2489 static bool HasValue(const std::string& v)
2490 {
2491 return std::find(_values.begin(), _values.end(), v) != _values.end();
2492 }
2493 static void AddValue(const std::string& v)
2494 {
2495 if (!HasValue(v))
2496 {
2497 ScopedMutex lock;
2498 _values.push_back(v);
2499 }
2500 }
2501 protected:
2502 static std::vector<std::string> _values;
2503 };
2504
2505 class MechanicalVentilatorCompartment
2506 {
2507 public:
2508 DEFINE_STATIC_STRING(MechanicalVentilator);
2509 DEFINE_STATIC_STRING_EX(ExpiratoryValve, MechanicalVentilatorExpiratoryValve);
2510 DEFINE_STATIC_STRING_EX(InspiratoryValve, MechanicalVentilatorInspiratoryValve);
2511 DEFINE_STATIC_STRING_EX(ExpiratoryLimb, MechanicalVentilatorExpiratoryLimb);
2512 DEFINE_STATIC_STRING_EX(InspiratoryLimb, MechanicalVentilatorInspiratoryLimb);
2513 DEFINE_STATIC_STRING_EX(YPiece, MechanicalVentilatorYPiece);
2514 DEFINE_STATIC_STRING_EX(ReliefValve, MechanicalVentilatorReliefValve);
2515 DEFINE_STATIC_STRING_EX(Connection, MechanicalVentilatorConnection);
2516
2517 static const std::vector<std::string>& GetValues()
2518 {
2519 ScopedMutex lock;
2520 if (_values.empty())
2521 {
2522 _values.push_back(MechanicalVentilator);
2523 _values.push_back(ExpiratoryValve);
2524 _values.push_back(InspiratoryValve);
2525 _values.push_back(ExpiratoryLimb);
2526 _values.push_back(InspiratoryLimb);
2527 _values.push_back(YPiece);
2528 _values.push_back(ReliefValve);
2529 _values.push_back(Connection);
2530 }
2531 return _values;
2532 }
2533 static bool HasValue(const std::string& v)
2534 {
2535 return std::find(_values.begin(), _values.end(), v) != _values.end();
2536 }
2537 static void AddValue(const std::string& v)
2538 {
2539 if (!HasValue(v))
2540 {
2541 ScopedMutex lock;
2542 _values.push_back(v);
2543 }
2544 }
2545 protected:
2546 static std::vector<std::string> _values;
2547 };
2548
2549 class MechanicalVentilatorLink
2550 {
2551 public:
2552 DEFINE_STATIC_STRING(MechanicalVentilatorToExpiratoryValve);
2553 DEFINE_STATIC_STRING(MechanicalVentilatorToInspiratoryValve);
2554 DEFINE_STATIC_STRING_EX(ExpiratoryLimbToExpiratoryValve, MechanicalVentilatorExpiratoryLimbToExpiratoryValve);
2555 DEFINE_STATIC_STRING_EX(InspiratoryValveToInspiratoryLimb, MechanicalVentilatorInspiratoryValveToInspiratoryLimb);
2556 DEFINE_STATIC_STRING_EX(ExpiratoryLimbToYPiece, MechanicalVentilatorExpiratoryLimbToYPiece);
2557 DEFINE_STATIC_STRING_EX(InspiratoryLimbToYPiece, MechanicalVentilatorInspiratoryLimbToYPiece);
2558 DEFINE_STATIC_STRING_EX(YPieceToConnection, MechanicalVentilatorYPieceToConnection);
2559 DEFINE_STATIC_STRING_EX(LeakConnectionToEnvironment, MechanicalVentilatorLeakConnectionToEnvironment);
2560 DEFINE_STATIC_STRING_EX(ConnectionToReliefValve, MechanicalVentilatorConnectionToReliefValve);
2561 DEFINE_STATIC_STRING_EX(EnvironmentToReliefValve, MechanicalVentilatorEnvironmentToReliefValve);
2562 DEFINE_STATIC_STRING_EX(ConnectionToEnvironment, MechanicalVentilatorConnectionToEnvironment);
2563 DEFINE_STATIC_STRING_EX(ConnectionToMouth, MechanicalVentilatorConnectionToMouth);
2564 DEFINE_STATIC_STRING_EX(ConnectionToNasalCavity, MechanicalVentilatorConnectionToNasalCavity);
2565
2566 static const std::vector<std::string>& GetValues()
2567 {
2568 ScopedMutex lock;
2569 if (_values.empty())
2570 {
2571 _values.push_back(MechanicalVentilatorToExpiratoryValve);
2572 _values.push_back(MechanicalVentilatorToInspiratoryValve);
2573 _values.push_back(ExpiratoryLimbToExpiratoryValve);
2574 _values.push_back(InspiratoryValveToInspiratoryLimb);
2575 _values.push_back(ExpiratoryLimbToYPiece);
2576 _values.push_back(InspiratoryLimbToYPiece);
2577 _values.push_back(YPieceToConnection);
2578 _values.push_back(LeakConnectionToEnvironment);
2579 _values.push_back(ConnectionToReliefValve);
2580 _values.push_back(EnvironmentToReliefValve);
2581 _values.push_back(ConnectionToEnvironment);
2582 _values.push_back(ConnectionToMouth);
2583 _values.push_back(ConnectionToNasalCavity);
2584 }
2585 return _values;
2586 }
2587 static bool HasValue(const std::string& v)
2588 {
2589 return std::find(_values.begin(), _values.end(), v) != _values.end();
2590 }
2591 static void AddValue(const std::string& v)
2592 {
2593 if (!HasValue(v))
2594 {
2595 ScopedMutex lock;
2596 _values.push_back(v);
2597 }
2598 }
2599 protected:
2600 static std::vector<std::string> _values;
2601 };
2602
2603 class NasalCannulaCompartment
2604 {
2605 public:
2606 DEFINE_STATIC_STRING(NasalCannulaOxygenSource);
2607 DEFINE_STATIC_STRING(NasalCannula);
2608
2609 static const std::vector<std::string>& GetValues()
2610 {
2611 ScopedMutex lock;
2612 if (_values.empty())
2613 {
2614 _values.push_back(NasalCannulaOxygenSource);
2615 _values.push_back(NasalCannula);
2616 }
2617 return _values;
2618 }
2619 static bool HasValue(const std::string& v)
2620 {
2621 return std::find(_values.begin(), _values.end(), v) != _values.end();
2622 }
2623 static void AddValue(const std::string& v)
2624 {
2625 if (!HasValue(v))
2626 {
2627 ScopedMutex lock;
2628 _values.push_back(v);
2629 }
2630 }
2631 protected:
2632 static std::vector<std::string> _values;
2633 };
2634
2635 class NasalCannulaLink
2636 {
2637 public:
2638 DEFINE_STATIC_STRING(NasalCannulaOxygenInlet);
2639 DEFINE_STATIC_STRING(NasalCannulaSeal);
2640 DEFINE_STATIC_STRING(NasalCannulaToNasalCavity);
2641
2642 static const std::vector<std::string>& GetValues()
2643 {
2644 ScopedMutex lock;
2645 if (_values.empty())
2646 {
2647 _values.push_back(NasalCannulaOxygenInlet);
2648 _values.push_back(NasalCannulaSeal);
2649 _values.push_back(NasalCannulaToNasalCavity);
2650 }
2651 return _values;
2652 }
2653 static bool HasValue(const std::string& v)
2654 {
2655 return std::find(_values.begin(), _values.end(), v) != _values.end();
2656 }
2657 static void AddValue(const std::string& v)
2658 {
2659 if (!HasValue(v))
2660 {
2661 ScopedMutex lock;
2662 _values.push_back(v);
2663 }
2664 }
2665 protected:
2666 static std::vector<std::string> _values;
2667 };
2668
2669 class NonRebreatherMaskCompartment
2670 {
2671 public:
2672 DEFINE_STATIC_STRING(NonRebreatherMaskOxygenSource);
2673 DEFINE_STATIC_STRING(NonRebreatherMaskPorts);
2674 DEFINE_STATIC_STRING(NonRebreatherMaskBag);
2675 DEFINE_STATIC_STRING(NonRebreatherMask);
2676
2677 static const std::vector<std::string>& GetValues()
2678 {
2679 ScopedMutex lock;
2680 if (_values.empty())
2681 {
2682 _values.push_back(NonRebreatherMaskOxygenSource);
2683 _values.push_back(NonRebreatherMaskPorts);
2684 _values.push_back(NonRebreatherMaskBag);
2685 _values.push_back(NonRebreatherMask);
2686 }
2687 return _values;
2688 }
2689 static bool HasValue(const std::string& v)
2690 {
2691 return std::find(_values.begin(), _values.end(), v) != _values.end();
2692 }
2693 static void AddValue(const std::string& v)
2694 {
2695 if (!HasValue(v))
2696 {
2697 ScopedMutex lock;
2698 _values.push_back(v);
2699 }
2700 }
2701 protected:
2702 static std::vector<std::string> _values;
2703 };
2704
2705 class NonRebreatherMaskLink
2706 {
2707 public:
2708 DEFINE_STATIC_STRING(NonRebreatherMaskOxygenInlet);
2709 DEFINE_STATIC_STRING(NonRebreatherMaskReservoirValve);
2710 DEFINE_STATIC_STRING(NonRebreatherMaskSeal);
2711 DEFINE_STATIC_STRING(NonRebreatherMaskExhalationValves);
2712 DEFINE_STATIC_STRING(NonRebreatherMaskExhalation);
2713 DEFINE_STATIC_STRING(NonRebreatherMaskToMouth);
2714 DEFINE_STATIC_STRING(NonRebreatherMaskToNasalCavity);
2715
2716 static const std::vector<std::string>& GetValues()
2717 {
2718 ScopedMutex lock;
2719 if (_values.empty())
2720 {
2721 _values.push_back(NonRebreatherMaskOxygenInlet);
2722 _values.push_back(NonRebreatherMaskReservoirValve);
2723 _values.push_back(NonRebreatherMaskSeal);
2724 _values.push_back(NonRebreatherMaskExhalationValves);
2725 _values.push_back(NonRebreatherMaskExhalation);
2726 _values.push_back(NonRebreatherMaskToMouth);
2727 _values.push_back(NonRebreatherMaskToNasalCavity);
2728 }
2729 return _values;
2730 }
2731 static bool HasValue(const std::string& v)
2732 {
2733 return std::find(_values.begin(), _values.end(), v) != _values.end();
2734 }
2735 static void AddValue(const std::string& v)
2736 {
2737 if (!HasValue(v))
2738 {
2739 ScopedMutex lock;
2740 _values.push_back(v);
2741 }
2742 }
2743 protected:
2744 static std::vector<std::string> _values;
2745 };
2746
2747 class SimpleMaskCompartment
2748 {
2749 public:
2750 DEFINE_STATIC_STRING(SimpleMaskOxygenSource);
2751 DEFINE_STATIC_STRING(SimpleMask);
2752
2753 static const std::vector<std::string>& GetValues()
2754 {
2755 ScopedMutex lock;
2756 if (_values.empty())
2757 {
2758 _values.push_back(SimpleMaskOxygenSource);
2759 _values.push_back(SimpleMask);
2760 }
2761 return _values;
2762 }
2763 static bool HasValue(const std::string& v)
2764 {
2765 return std::find(_values.begin(), _values.end(), v) != _values.end();
2766 }
2767 static void AddValue(const std::string& v)
2768 {
2769 if (!HasValue(v))
2770 {
2771 ScopedMutex lock;
2772 _values.push_back(v);
2773 }
2774 }
2775 protected:
2776 static std::vector<std::string> _values;
2777 };
2778
2779 class SimpleMaskLink
2780 {
2781 public:
2782 DEFINE_STATIC_STRING(SimpleMaskOxygenInlet);
2783 DEFINE_STATIC_STRING(SimpleMaskSeal);
2784 DEFINE_STATIC_STRING(SimpleMaskPorts);
2785 DEFINE_STATIC_STRING(SimpleMaskToMouth);
2786 DEFINE_STATIC_STRING(SimpleMaskToNasalCavity);
2787
2788 static const std::vector<std::string>& GetValues()
2789 {
2790 ScopedMutex lock;
2791 if (_values.empty())
2792 {
2793 _values.push_back(SimpleMaskOxygenInlet);
2794 _values.push_back(SimpleMaskSeal);
2795 _values.push_back(SimpleMaskPorts);
2796 _values.push_back(SimpleMaskToMouth);
2797 _values.push_back(SimpleMaskToNasalCavity);
2798 }
2799 return _values;
2800 }
2801 static bool HasValue(const std::string& v)
2802 {
2803 return std::find(_values.begin(), _values.end(), v) != _values.end();
2804 }
2805 static void AddValue(const std::string& v)
2806 {
2807 if (!HasValue(v))
2808 {
2809 ScopedMutex lock;
2810 _values.push_back(v);
2811 }
2812 }
2813 protected:
2814 static std::vector<std::string> _values;
2815 };
2816END_NAMESPACE
Definition: Logger.h:71
Definition: ScopedMutex.h:7
Definition: Logger.h:14
Definition: PulseEngine.h:11
static std::string Version()
static std::string Time()
static std::string Hash()

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.