What’s New in the Pulse Physiology Engine 4.4.0
×
SESubstanceManager.h
1/* Distributed under the Apache License, Version 2.0.
2 See accompanying NOTICE file for details.*/
3
4#pragma once
5class SESubstance;
8
9class CDM_DECL SESubstanceManager : public Loggable
10{
11public:
13 virtual ~SESubstanceManager();
14
15 // Will clear (see below) and refresh all substance to their original content
16 // *NOTE* If you have added custom substances (not on disk)
17 // They will still be in the sub mgr, but all properties will be invalid
18 // It is your responsibility to reset them to their original values
19 virtual bool LoadSubstanceDirectory(const std::string& data_dir="./");
20
21 virtual const std::vector<SESubstance*>& GetSubstances();
22 virtual const std::vector<SESubstance*>& GetSubstances() const;
23 virtual bool HasSubstance(const std::string& name) const;
24 virtual SESubstance* GetSubstance(const std::string& name);
25 virtual const SESubstance* GetSubstance(const std::string& name) const;
26
27 virtual bool IsActive(const SESubstance& substance) const;
28 virtual const std::vector<SESubstance*>& GetActiveSubstances();
29 virtual const std::vector<SESubstance*>& GetActiveSubstances() const;
30 virtual void AddActiveSubstance(const SESubstance& substance);
31 virtual void RemoveActiveSubstance(const SESubstance& substance);
32 virtual void RemoveActiveSubstances();
33
34
35 virtual const std::vector<SESubstance*>& GetActiveGases();
36 virtual const std::vector<SESubstance*>& GetActiveGases() const;
37 virtual const std::vector<SESubstance*>& GetActiveLiquids();
38 virtual const std::vector<SESubstance*>& GetActiveLiquids() const;
39 virtual const std::vector<SESubstance*>& GetActiveAerosols();
40 virtual const std::vector<SESubstance*>& GetActiveAerosols() const;
41 virtual bool IsActiveAerosol(const SESubstance& substance) const;
42 virtual void AddActiveAerosol(const SESubstance& substance);
43 virtual const SESubstance* GetAerosolizedSubstance(const SESubstanceAerosol& a);
44
45 virtual const std::vector<SESubstanceCompound*>& GetCompounds();
46 virtual const std::vector<SESubstanceCompound*>& GetCompounds() const;
47 virtual bool HasCompound(const std::string& name) const;
48 virtual SESubstanceCompound* GetCompound(const std::string& name);
49 virtual const SESubstanceCompound* GetCompound(const std::string& name) const;
50
51 virtual bool IsActive(const SESubstanceCompound& compound) const;
52 virtual const std::vector<SESubstanceCompound*>& GetActiveCompounds();
53 virtual const std::vector<SESubstanceCompound*>& GetActiveCompounds() const;
54 virtual void AddActiveCompound(const SESubstanceCompound& compound);
55 virtual void RemoveActiveCompound(const SESubstanceCompound& compound);
56 virtual void RemoveActiveCompounds(const std::vector<SESubstanceCompound*>& compounds);
57
58protected:
59 // The sub mgr is designed to keep the pointers of all subs (and their components)
60 // at the same address as when they were first allocated.
61 // This clear preserves all addresses.
62 // This clear method will just invalidate all properties of all substances.
63 // Substances will keep their name and have "no properties"
64 // All substance component (ex. clearance) properties will also be invalidated.
65 //
66 // It is your responsibility to set the substance properties back to something
67 // (i.e. Just use LoadSubstanceDirectory)
68 virtual void Clear();
69
70 // I am making all these vectors of SESubstances,
71 // Usually these are passed to methods that take a
72 // vector of substances, and a vector of drugs won't be accepted
73 // I could do some crazy template methods that will auto convert
74 // these to substance vectors, but I think that would be too
75 // slow for the amount of times we call stuff
76 // So for now, these will just be substance vectors
77 // If we want drug vectors, I can rename methods to
78 // std::vector<SESubstance*>* GetActiveDrugSubstances
79 // std::vector<SEDrug*>* GetActiveDrugs()
80 // But I don't see a need for that yet...
81 // So will just leave it as it now
82
83 std::vector<SESubstance*> m_Substances;
84 std::vector<SESubstance*> m_ActiveSubstances;
85 std::vector<SESubstance*> m_ActiveGases;
86 std::vector<SESubstance*> m_ActiveLiquids;
87 std::vector<SESubstance*> m_ActiveAerosols;
88
89 std::vector<SESubstanceCompound*> m_Compounds;
90 std::vector<SESubstanceCompound*> m_ActiveCompounds;
91};
Definition: Logger.h:23
Definition: Logger.h:71
Definition: SESubstanceAerosol.h:9
Definition: SESubstanceCompound.h:10
Definition: SESubstance.h:16
Definition: SESubstanceManager.h:10
std::vector< SESubstance * > m_ActiveSubstances
Definition: SESubstanceManager.h:84
std::vector< SESubstance * > m_Substances
Definition: SESubstanceManager.h:83
std::vector< SESubstance * > m_ActiveAerosols
Definition: SESubstanceManager.h:87
std::vector< SESubstanceCompound * > m_Compounds
Definition: SESubstanceManager.h:89
std::vector< SESubstance * > m_ActiveLiquids
Definition: SESubstanceManager.h:86
std::vector< SESubstanceCompound * > m_ActiveCompounds
Definition: SESubstanceManager.h:90
std::vector< SESubstance * > m_ActiveGases
Definition: SESubstanceManager.h:85

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.