libbio
Loading...
Searching...
No Matches
Hormone.h
Go to the documentation of this file.
1/*
2 * This file is a part of the Biology project by eons LLC.
3 * Biology (aka Develop Biology) is a framework for approaching software
4 * development from a natural sciences perspective.
5 *
6 * Copyright (C) 2023 Séon O'Shannon & eons LLC
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as
10 * published by the Free Software Foundation, either version 3 of the
11 * License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Affero General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
22#pragma once
23
30#include "bio/physical/Time.h"
31#include <map>
32
33namespace bio {
34namespace circulatory {
35
49class Hormone :
50 public circulatory::Class< Hormone >,
51 public chemical::Solute
52{
53public:
55
56
59 // _WITH_COMMON_CONSTRUCTOR (not the plain variant): the macro-generated
60 // ctors — Hormone(), Hormone(Id), Hormone(Name), the path CortexBrainRuntime
61 // builds through — MUST run CommonConstructor() so mValue/mMinValue/mMaxValue
62 // are initialised. Without it those floats are raw and Clamp()'s
63 // `if (mValue < mMinValue)` reads uninitialised memory (mira valgrind,
64 // 2026-06-16). In-class initialisers would be cleaner but are C++11-only and
65 // libbio also builds cpp98.
67 circulatory,
68 Hormone,
70 )
71
72
76 Hormone(
78 float initialValue = 0.0f
79 );
80
84 virtual ~Hormone();
85
90 virtual float GetValue() const;
91
97 virtual void SetValue(float value);
98
103 virtual float GetMinValue() const;
104
110 virtual void SetMinValue(float minValue);
111
116 virtual float GetMaxValue() const;
117
123 virtual void SetMaxValue(float maxValue);
124
131 virtual bool AddRateChange(const Name& changeName, float ratePerSecond);
132
139 virtual bool AddStimulusChange(const Name& changeName, float changeValue);
140
146 virtual bool EnableRateChange(const Name& changeName);
147
153 virtual bool DisableRateChange(const Name& changeName);
154
161 virtual bool ApplyStimulus(const Name& changeName, unsigned int multiplier = 1);
162
169
174 virtual Name GetHighestActiveChange() const;
175
181 virtual bool IsRateChangeActive(const Name& changeName) const;
182
187 virtual std::vector<Name> GetActiveRateChanges() const;
188
189protected:
190 typedef std::map<Name, float> Changes;
191
192 float mValue;
195
196 Changes mRateChanges; // name -> rate per second
197 Changes mActiveRateChanges; // name -> rate per second (subset of mRateChanges)
198 Changes mStimulusChanges; // name -> immediate change value
199
200private:
201 void Clamp();
202 void CommonConstructor();
203};
204
205} //circulatory namespace
206} //bio namespace
#define BIO_DISAMBIGUATE_ALL_CLASS_METHODS(ns, caller)
Definition ClassMethodMacros.h:112
double value
Definition Potential.cpp:41
#define BIO_DEFAULT_IDENTIFIABLE_CONSTRUCTORS_WITH_COMMON_CONSTRUCTOR(ns, class,...)
Definition chemical/macro/ConstructorMacros.h:65
Definition Pointer.h:115
Definition String.h:55
Definition Solute.h:77
Definition circulatory/common/Class.h:38
Definition Hormone.h:52
virtual bool ApplyStimulus(const Name &changeName, unsigned int multiplier=1)
Definition Hormone.cpp:135
float mMaxValue
Definition Hormone.h:194
virtual bool AddStimulusChange(const Name &changeName, float changeValue)
Definition Hormone.cpp:99
virtual void SetMaxValue(float maxValue)
Definition Hormone.cpp:83
Changes mStimulusChanges
Definition Hormone.h:198
virtual void ApplyRateChanges(Timestamp deltaTimeMs)
Definition Hormone.cpp:149
virtual float GetValue() const
Definition Hormone.cpp:56
virtual bool AddRateChange(const Name &changeName, float ratePerSecond)
Definition Hormone.cpp:89
virtual void SetValue(float value)
Definition Hormone.cpp:61
Changes mRateChanges
Definition Hormone.h:196
virtual float GetMinValue() const
Definition Hormone.cpp:67
float mMinValue
Definition Hormone.h:193
virtual void SetMinValue(float minValue)
Definition Hormone.cpp:72
virtual bool DisableRateChange(const Name &changeName)
Definition Hormone.cpp:124
virtual Name GetHighestActiveChange() const
Definition Hormone.cpp:169
virtual std::vector< Name > GetActiveRateChanges() const
Definition Hormone.cpp:195
float mValue
Definition Hormone.h:192
virtual float GetMaxValue() const
Definition Hormone.cpp:78
Changes mActiveRateChanges
Definition Hormone.h:197
virtual bool IsRateChangeActive(const Name &changeName) const
Definition Hormone.cpp:190
virtual bool EnableRateChange(const Name &changeName)
Definition Hormone.cpp:109
virtual BIO_DEFAULT_IDENTIFIABLE_CONSTRUCTORS_WITH_COMMON_CONSTRUCTOR(circulatory, Hormone, filter::Circulatory()) Hormone(Pointer< chemical ~Hormone()
Definition Hormone.cpp:52
std::map< Name, float > Changes
Definition Hormone.h:190
Filter Circulatory()
Definition FinalCell.h:29
uint64_t Timestamp
Definition common/Types.h:52