|
| | BIO_DEFAULT_IDENTIFIABLE_CONSTRUCTORS_WITH_COMMON_CONSTRUCTOR (chemical, Solute, filter::Chemical()) Solute(const Solute &other) |
| |
| | Solute (Pointer< Substance > dissolvedSubstance, const DiffusionTime &diffusionTime=diffusion::time::Destruction(), const DiffusionEffort &diffusionEffort=diffusion::effort::Active()) |
| |
| virtual | ~Solute () |
| |
| Solute & | operator= (const Solute &other) |
| |
| | operator Pointer< Substance > () |
| |
| | operator Pointer< const Substance > () const |
| |
| Pointer< Substance > | GetDissolvedSubstance () |
| |
| Pointer< const Substance > | GetDissolvedSubstance () const |
| |
| virtual Concentration | GetConcentration () const |
| |
| virtual void | Diffuse () const |
| |
| virtual Code | Crest () |
| |
| virtual Code | MixWith (const Solute &other) |
| |
| virtual Code | MixWith (Pointer< const Substance > other) |
| |
| virtual void | SetEnvironment (Pointer< Solution > environment) |
| |
| virtual Index | GetIndexInParentSolution () const |
| |
| virtual void | SetIndexInParentSolution (Index indexInParentSolution) |
| |
| virtual void | SetDiffusionTime (const DiffusionTime &diffusionTime) |
| |
| virtual DiffusionTime | GetDiffusionTime () const |
| |
| virtual void | SetDiffusionEffort (const DiffusionEffort &diffusionEffort) |
| |
| virtual DiffusionEffort | GetDiffusionEffort () const |
| |
| virtual Pointer< ::bio::physical::Wave > | Clone () const |
| |
| Pointer< ::bio::physical::Wave > | AsWave () |
| |
| Pointer< const ::bio::physical::Wave > | AsWave () const |
| |
| | operator Pointer< ::bio::physical::Wave > () |
| |
| virtual Pointer< ::bio::physical::Wave > | Modulate (Pointer< ::bio::physical::Wave > signal) |
| |
| virtual Pointer< ::bio::physical::Wave > | Demodulate () |
| |
| virtual Pointer< const ::bio::physical::Wave > | Demodulate () const |
| |
| virtual Pointer< ::bio::physical::Wave > | Superpose (const ::bio::physical::ConstWaves &displacement, Pointer< ::bio::physical::Interference > pattern) |
| |
| virtual bool | Superpose (Pointer< const ::bio::physical::Wave > displacement, Pointer< ::bio::physical::Interference > pattern) |
| |
| | Class (Pointer< Solute > object, Filter filter=filter::Default(), SymmetryType symmetryType=symmetry_type::Object()) |
| |
| | Class (Pointer< Solute > object, const Name &name, Filter filter=filter::Default(), SymmetryType symmetryType=symmetry_type::Object()) |
| |
| | Class (Pointer< Solute > object, const Id &id, Filter filter=filter::Default(), SymmetryType symmetryType=symmetry_type::Object()) |
| |
| | Class (const Class &other) |
| |
| virtual | ~Class () |
| |
| virtual bool | RegisterProperties (const Properties &properties) |
| |
| virtual Properties | GetProperties () const |
| |
| virtual Pointer< Atom > | AsAtom () |
| |
| virtual Pointer< const Atom > | AsAtom () const |
| |
| virtual Code | Attenuate (Pointer< const physical::Wave > other) |
| |
| virtual Code | Disattenuate (Pointer< const physical::Wave > other) |
| |
| | Class (Pointer< T > object, Pointer< Symmetry > symmetry=NULL) |
| |
| | Class (Pointer< T > object, SymmetryFactory symmetryFactory) |
| |
| | Class (const Class &other) |
| |
| virtual Pointer< T > | GetWaveObject () |
| |
| virtual Pointer< const T > | GetWaveObject () const |
| |
| virtual | operator T& () |
| |
| virtual | operator const T & () const |
| |
| Pointer< Wave > | AsWave () |
| |
| Pointer< const Wave > | AsWave () const |
| |
| virtual | operator Pointer< Wave > () |
| |
| | Wave (Pointer< Symmetry > symmetry=NULL) |
| |
| | Wave (const Wave &other) |
| |
| Wave & | operator= (const Wave &other) |
| |
| virtual | ~Wave () |
| |
| Pointer< const Symmetry > | GetSymmetry () const |
| |
| virtual bool | Superpose (Pointer< const Wave > displacement, Pointer< Interference > pattern) |
| |
| virtual Pointer< Wave > | Superpose (const ConstWaves &displacement, Pointer< Interference > pattern) |
| |
| virtual Pointer< Wave > | Modulate (Pointer< Wave > signal) |
| |
| Pointer< Wave > | AsWave () |
| |
| Pointer< const Wave > | AsWave () const |
| |
| virtual void | operator| (Pointer< Symmetry > symmetry) |
| |
| virtual Pointer< Wave > | operator* (Pointer< Wave > signal) |
| |
| virtual Pointer< Wave > | operator* () |
| |
| virtual Pointer< const Wave > | operator* () const |
| |
| virtual void | operator+ (Pointer< const Wave > other) |
| |
| virtual void | operator- (Pointer< const Wave > other) |
| |
| uint16_t | GetTypeId () const |
| |
| void | SetTypeId (uint16_t typeId) |
| |
| | Identifiable (Pointer< Perspective< Id > > perspective=NULL) |
| |
| | Identifiable (const Name &name, Pointer< Perspective< Id > > perspective=NULL) |
| |
| | Identifiable (Identifier id, Pointer< Perspective< Id > > perspective=NULL) |
| |
| | Identifiable (const Identifiable &other) |
| |
| virtual | ~Identifiable () |
| |
| virtual | operator Id () const |
| |
| virtual bool | operator== (const Identifier id) const |
| |
| virtual bool | operator== (const Name &name) const |
| |
| virtual bool | operator== (const Identifiable< Id > &other) const |
| |
| virtual Name | GetName () const |
| |
| virtual Identifier | GetId () const |
| |
| virtual bool | SetName (const Name &name) |
| |
| virtual bool | SetId (Identifier id) |
| |
| virtual bool | IsName (const Name &name) const |
| |
| virtual bool | IsNameInsensitive (const Name &name) const |
| |
| virtual bool | IsId (Identifier id) const |
| |
| virtual void | SetPerspective (Pointer< Perspective< Id > > perspective) |
| |
| | Observer (Pointer< Perspective > perspective=NULL) |
| |
| | Observer (const Observer &other) |
| |
| virtual | ~Observer () |
| |
| virtual void | SetPerspective (Pointer< Perspective > perspective) |
| |
| virtual Pointer< Perspective > | GetPerspective () const |
| |
| | Writer () |
| |
| | Writer (Filter logFilter) |
| |
| virtual | ~Writer () |
| |
| virtual Pointer< const Writer > | AsLogWriter () const |
| |
| bool | IsEnabled (LogLevel level) const |
| |
| virtual void | Log (LogLevel level, const char *format, va_list args) const |
| |
| | Class (Pointer< Writer > object, Pointer< Symmetry > symmetry=NULL) |
| |
| | Class (Pointer< Writer > object, SymmetryFactory symmetryFactory) |
| |
| | Class (const Class &other) |
| |
| virtual Pointer< Writer > | GetWaveObject () |
| |
| virtual Pointer< const Writer > | GetWaveObject () const |
| |
| virtual | operator Writer & () |
| |
| virtual | operator const Writer & () const |
| |
| Pointer< Wave > | AsWave () |
| |
| Pointer< const Wave > | AsWave () const |
| |
| virtual | operator Pointer< Wave > () |
| |
| | Filterable () |
| |
| | Filterable (Filter filter) |
| |
| virtual | ~Filterable () |
| |
| virtual void | InitializeImplementation (ByteStreams &args) |
| |
| virtual void | SetFilter (Filter filter) |
| |
| Filter | GetFilter () const |
| |
| virtual Pointer< const Symmetry > | Spin () const |
| |
| virtual Code | Reify (Pointer< const Symmetry > symmetry) |
| |
| | Class (Pointer< Filterable > object, Pointer< Symmetry > symmetry=NULL) |
| |
| | Class (Pointer< Filterable > object, SymmetryFactory symmetryFactory) |
| |
| | Class (const Class &other) |
| |
| virtual Pointer< Filterable > | GetWaveObject () |
| |
| virtual Pointer< const Filterable > | GetWaveObject () const |
| |
| virtual | operator Filterable & () |
| |
| virtual | operator const Filterable & () const |
| |
| Pointer< Wave > | AsWave () |
| |
| Pointer< const Wave > | AsWave () const |
| |
| virtual | operator Pointer< Wave > () |
| |
| | Atom () |
| |
| | Atom (const Atom &other) |
| |
| virtual | ~Atom () |
| |
| void | CloneBondsFrom (const Atom &other, BondClonePolicy policy=&Atom::DefaultBondClonePolicy) |
| |
| virtual Pointer< const physical::Symmetry > | Spin () const |
| |
| virtual Code | Reify (Pointer< const physical::Symmetry > symmetry) |
| |
| Pointer< physical::Wave > | GetBonded (Valence position) |
| |
| Pointer< const physical::Wave > | GetBonded (Valence position) const |
| |
| Pointer< const physical::Wave > | ResolveBondedForReadById (AtomicNumber bondId) const |
| |
| Pointer< physical::Wave > | ResolveBondedForWriteById (AtomicNumber bondId) |
| |
| template<typename T > |
| Cow< T > | AsBonded () const |
| |
| template<typename T > |
| Pointer< T > | AsBondedQuantum () const |
| |
| template<typename T > |
| atom_detail::AsResultType< T, type::IsWaveImplementation< typenametype::RemovePointer< T >::Type >::sValue >::Type | As () const |
| |
| template<typename T > |
| | operator T () const |
| |
| template<typename T > |
| Valence | FormBond (T toBond, BondType type=bond_type::Unknown()) |
| |
| template<typename T > |
| bool | BreakBond (T toDisassociate, BondType type=bond_type::Unknown()) |
| |
| Valence | GetBondPosition (AtomicNumber bondedId) const |
| |
| Valence | GetBondPosition (const Name &typeName) const |
| |
| Valence | GetBondPositionLocked (AtomicNumber bondedId) const |
| |
| template<typename T > |
| Valence | GetBondPosition () const |
| |
| BondType | GetBondType (Valence position) const |
| |
| template<typename T > |
| BondType | GetBondType () const |
| |
| Pointer< Bonds > | GetAllBonds () |
| |
| Pointer< const Bonds > | GetAllBonds () const |
| |
| void | ForEachBond (BondVisitor visitor, void *context=NULL) const |
| |
| void | ForEachBondMutable (BondMutator mutator, void *context=NULL) |
| |
| virtual Valence | FormBondImplementation (Pointer< physical::Wave > toBond, AtomicNumber id, BondType type) |
| |
| Valence | FormBondImplementation (Pointer< physical::Wave > toBond, AtomicNumber id, BondType type, bool ownsBonded) |
| |
| Valence | FormBondImplementationLocked (Pointer< physical::Wave > toBond, AtomicNumber id, BondType type, bool ownsBonded) |
| |
| virtual bool | BreakBondImplementation (AtomicNumber id, BondType type) |
| |
| bool | BreakBondImplementationLocked (AtomicNumber id, BondType type) |
| |
| | Class (Pointer< Atom > object, Pointer< Symmetry > symmetry=NULL) |
| |
| | Class (Pointer< Atom > object, SymmetryFactory symmetryFactory) |
| |
| | Class (const Class &other) |
| |
| virtual Pointer< Atom > | GetWaveObject () |
| |
| virtual Pointer< const Atom > | GetWaveObject () const |
| |
| virtual | operator Atom & () |
| |
| virtual | operator const Atom & () const |
| |
| Pointer< Wave > | AsWave () |
| |
| Pointer< const Wave > | AsWave () const |
| |
| virtual | operator Pointer< Wave > () |
| |
| | ThreadSafe () |
| |
| | ThreadSafe (const ThreadSafe &toCopy) |
| |
| ThreadSafe & | operator= (const ThreadSafe &toCopy) |
| |
| | ~ThreadSafe () |
| |
| void | LockThread () const |
| |
| void | UnlockThread () const |
| |
| void | LockMutexShared () const |
| |
| void | UnlockMutexShared () const |
| |
| | EnvironmentDependent (EnvironmentPointer environment=NULL) |
| |
| virtual | ~EnvironmentDependent () |
| |
| virtual EnvironmentPointer | GetEnvironment () |
| |
| virtual const EnvironmentPointer | GetEnvironment () const |
| |
| virtual void | SetEnvironment (EnvironmentPointer environment) |
| |
| | Periodic (Milliseconds interval=GetDefaultInterval()) |
| |
| virtual | ~Periodic () |
| |
| virtual void | InitializeImplementation (ByteStreams &args) |
| |
| virtual bool | CheckIn () |
| |
| virtual Code | SetInterval (Milliseconds interval) |
| |
| Milliseconds | GetInterval () const |
| |
| Timestamp | GetTimeLastCrested () const |
| |
| float | GetIntervalInSeconds () const |
| |
| virtual void | SetLastCrestTimestamp (Timestamp lastCrest) |
| |
| virtual Pointer< const Symmetry > | Spin () const |
| |
| virtual Code | Reify (Pointer< const Symmetry > symmetry) |
| |
| virtual Properties | GetProperties () const |
| |
| | Class (Pointer< Periodic > object, Pointer< Symmetry > symmetry=NULL) |
| |
| | Class (Pointer< Periodic > object, SymmetryFactory symmetryFactory) |
| |
| | Class (const Class &other) |
| |
| virtual | ~Class () |
| |
| virtual Pointer< Periodic > | GetWaveObject () |
| |
| virtual Pointer< const Periodic > | GetWaveObject () const |
| |
| virtual | operator Periodic & () |
| |
| virtual | operator const Periodic & () const |
| |
| virtual Pointer< Wave > | Clone () const |
| |
| Pointer< Wave > | AsWave () |
| |
| Pointer< const Wave > | AsWave () const |
| |
| virtual | operator Pointer< Wave > () |
| |
|
| virtual void | Destructor () |
| |
| void | RegisterType () |
| |
| | Elementary (const Properties properties) |
| |
| | Elementary () |
| |
| virtual | ~Elementary () |
| |
| virtual void | InitializeImplementation (ByteStreams &args) |
| |
| friend::std::ostream & | operator<< (std::ostream &out, const Identifiable< Id > &t) |
| |
| | Identifiable (Pointer< Perspective< Id > > perspective=NULL) |
| |
| | Identifiable (const Name &name, Pointer< Perspective< Id > > perspective=NULL) |
| |
| | Identifiable (Identifier id, Pointer< Perspective< Id > > perspective=NULL) |
| |
| | Identifiable (const Identifiable &other) |
| |
| virtual | ~Identifiable () |
| |
| virtual | operator Id () const |
| |
| virtual bool | operator== (const Identifier id) const |
| |
| virtual bool | operator== (const Name &name) const |
| |
| virtual bool | operator== (const Identifiable< Id > &other) const |
| |
| virtual Name | GetName () const |
| |
| virtual Identifier | GetId () const |
| |
| virtual bool | SetName (const Name &name) |
| |
| virtual bool | SetId (Identifier id) |
| |
| virtual bool | IsName (const Name &name) const |
| |
| virtual bool | IsNameInsensitive (const Name &name) const |
| |
| virtual bool | IsId (Identifier id) const |
| |
| virtual void | SetPerspective (Pointer< Perspective< Id > > perspective) |
| |
| | Observer (Pointer< Perspective > perspective=NULL) |
| |
| | Observer (const Observer &other) |
| |
| virtual | ~Observer () |
| |
| virtual void | SetPerspective (Pointer< Perspective > perspective) |
| |
| virtual Pointer< Perspective > | GetPerspective () const |
| |
| | VirtualBase () |
| |
| virtual | ~VirtualBase () |
| |
| void | Initialize (ByteStreams &args) |
| |
| void | Initialize (ByteStream arg1) |
| |
| void | Initialize (ByteStream arg1, ByteStream arg2) |
| |
| void | Initialize (ByteStream arg1, ByteStream arg2, ByteStream arg3) |
| |
| | Writer () |
| |
| | Writer (Filter logFilter) |
| |
| virtual | ~Writer () |
| |
| virtual Pointer< const Writer > | AsLogWriter () const |
| |
| bool | IsEnabled (LogLevel level) const |
| |
| virtual void | Log (LogLevel level, const char *format, va_list args) const |
| |
| | Class (Pointer< Writer > object, Pointer< Symmetry > symmetry=NULL) |
| |
| | Class (Pointer< Writer > object, SymmetryFactory symmetryFactory) |
| |
| | Class (const Class &other) |
| |
| virtual Pointer< Writer > | GetWaveObject () |
| |
| virtual Pointer< const Writer > | GetWaveObject () const |
| |
| virtual | operator Writer & () |
| |
| virtual | operator const Writer & () const |
| |
| Pointer< Wave > | AsWave () |
| |
| Pointer< const Wave > | AsWave () const |
| |
| virtual | operator Pointer< Wave > () |
| |
| | Filterable () |
| |
| | Filterable (Filter filter) |
| |
| virtual | ~Filterable () |
| |
| virtual void | InitializeImplementation (ByteStreams &args) |
| |
| virtual void | SetFilter (Filter filter) |
| |
| Filter | GetFilter () const |
| |
| virtual Pointer< const Symmetry > | Spin () const |
| |
| virtual Code | Reify (Pointer< const Symmetry > symmetry) |
| |
| | Class (Pointer< Filterable > object, Pointer< Symmetry > symmetry=NULL) |
| |
| | Class (Pointer< Filterable > object, SymmetryFactory symmetryFactory) |
| |
| | Class (const Class &other) |
| |
| virtual Pointer< Filterable > | GetWaveObject () |
| |
| virtual Pointer< const Filterable > | GetWaveObject () const |
| |
| virtual | operator Filterable & () |
| |
| virtual | operator const Filterable & () const |
| |
| Pointer< Wave > | AsWave () |
| |
| Pointer< const Wave > | AsWave () const |
| |
| virtual | operator Pointer< Wave > () |
| |
| void | IndexBond (AtomicNumber bondedId, Valence position) |
| |
| void | UnindexBond (AtomicNumber bondedId) |
| |
| | Atom () |
| |
| | Atom (const Atom &other) |
| |
| virtual | ~Atom () |
| |
| void | CloneBondsFrom (const Atom &other, BondClonePolicy policy=&Atom::DefaultBondClonePolicy) |
| |
| virtual Pointer< const physical::Symmetry > | Spin () const |
| |
| virtual Code | Reify (Pointer< const physical::Symmetry > symmetry) |
| |
| Pointer< physical::Wave > | GetBonded (Valence position) |
| |
| Pointer< const physical::Wave > | GetBonded (Valence position) const |
| |
| Pointer< const physical::Wave > | ResolveBondedForReadById (AtomicNumber bondId) const |
| |
| Pointer< physical::Wave > | ResolveBondedForWriteById (AtomicNumber bondId) |
| |
| template<typename T > |
| Cow< T > | AsBonded () const |
| |
| template<typename T > |
| Pointer< T > | AsBondedQuantum () const |
| |
| template<typename T > |
| atom_detail::AsResultType< T, type::IsWaveImplementation< typenametype::RemovePointer< T >::Type >::sValue >::Type | As () const |
| |
| template<typename T > |
| | operator T () const |
| |
| template<typename T > |
| Valence | FormBond (T toBond, BondType type=bond_type::Unknown()) |
| |
| template<typename T > |
| bool | BreakBond (T toDisassociate, BondType type=bond_type::Unknown()) |
| |
| Valence | GetBondPosition (AtomicNumber bondedId) const |
| |
| Valence | GetBondPosition (const Name &typeName) const |
| |
| Valence | GetBondPositionLocked (AtomicNumber bondedId) const |
| |
| template<typename T > |
| Valence | GetBondPosition () const |
| |
| BondType | GetBondType (Valence position) const |
| |
| template<typename T > |
| BondType | GetBondType () const |
| |
| Pointer< Bonds > | GetAllBonds () |
| |
| Pointer< const Bonds > | GetAllBonds () const |
| |
| void | ForEachBond (BondVisitor visitor, void *context=NULL) const |
| |
| void | ForEachBondMutable (BondMutator mutator, void *context=NULL) |
| |
| virtual Valence | FormBondImplementation (Pointer< physical::Wave > toBond, AtomicNumber id, BondType type) |
| |
| Valence | FormBondImplementation (Pointer< physical::Wave > toBond, AtomicNumber id, BondType type, bool ownsBonded) |
| |
| Valence | FormBondImplementationLocked (Pointer< physical::Wave > toBond, AtomicNumber id, BondType type, bool ownsBonded) |
| |
| virtual bool | BreakBondImplementation (AtomicNumber id, BondType type) |
| |
| bool | BreakBondImplementationLocked (AtomicNumber id, BondType type) |
| |
| | Class (Pointer< Atom > object, Pointer< Symmetry > symmetry=NULL) |
| |
| | Class (Pointer< Atom > object, SymmetryFactory symmetryFactory) |
| |
| | Class (const Class &other) |
| |
| virtual Pointer< Atom > | GetWaveObject () |
| |
| virtual Pointer< const Atom > | GetWaveObject () const |
| |
| virtual | operator Atom & () |
| |
| virtual | operator const Atom & () const |
| |
| Pointer< Wave > | AsWave () |
| |
| Pointer< const Wave > | AsWave () const |
| |
| virtual | operator Pointer< Wave > () |
| |
| | ThreadSafe () |
| |
| | ThreadSafe (const ThreadSafe &toCopy) |
| |
| ThreadSafe & | operator= (const ThreadSafe &toCopy) |
| |
| | ~ThreadSafe () |
| |
| void | LockThread () const |
| |
| void | UnlockThread () const |
| |
| void | LockMutexShared () const |
| |
| void | UnlockMutexShared () const |
| |
|
| typedef Id | Identifier |
| |
| typedef Arrangement< Identifier > | Ids |
| |
| typedef PERSPECTIVE | Perspective |
| |
| typedef BondCloneAction(* | BondClonePolicy) (const Bond &bond) |
| |
| typedef void(* | BondVisitor) (const Bond &bond, void *context) |
| |
| typedef BondCloneAction(* | BondMutator) (Bond &bond, void *context) |
| |
| typedef type::RemovePointer< Solution >::Type | EnvironmentType |
| |
| typedef Pointer< EnvironmentType > | EnvironmentPointer |
| |
| static Pointer< T > | Convert (Pointer< Wave > wave) |
| |
| static Properties | GetResonanceBetween (ConstWaves waves) |
| |
| static Properties | GetResonanceBetween (Pointer< const Wave > wave1, Pointer< const Wave > wave2) |
| |
| static Properties | GetResonanceBetween (Pointer< const Wave > wave, const Properties &properties) |
| |
| static void | Log (Pointer< const Writer > writer, LogLevel level, const char *format,...) |
| |
| static bool | ShouldLog (Pointer< const Writer > writer, LogLevel level) |
| |
| static Pointer< Writer > | Convert (Pointer< Wave > wave) |
| |
| static Pointer< Filterable > | Convert (Pointer< Wave > wave) |
| |
| static BondCloneAction | DefaultBondClonePolicy (const Bond &bond) |
| |
| template<typename T > |
| static AtomicNumber | GetBondId () |
| |
| static Pointer< Atom > | Convert (Pointer< Wave > wave) |
| |
| static Milliseconds | GetDefaultInterval () |
| |
| static Properties | GetClassProperties () |
| |
| static Symmetry * | MakePeriodicSymmetry () |
| |
| static Pointer< Periodic > | Convert (Pointer< Wave > wave) |
| |
| typedef Id | Identifier |
| |
| typedef Arrangement< Identifier > | Ids |
| |
| typedef PERSPECTIVE | Perspective |
| |
| typedef BondCloneAction(* | BondClonePolicy) (const Bond &bond) |
| |
| typedef void(* | BondVisitor) (const Bond &bond, void *context) |
| |
| typedef BondCloneAction(* | BondMutator) (Bond &bond, void *context) |
| |
| static void | Log (Pointer< const Writer > writer, LogLevel level, const char *format,...) |
| |
| static bool | ShouldLog (Pointer< const Writer > writer, LogLevel level) |
| |
| static Pointer< Writer > | Convert (Pointer< Wave > wave) |
| |
| static Pointer< Filterable > | Convert (Pointer< Wave > wave) |
| |
| static BondCloneAction | DefaultBondClonePolicy (const Bond &bond) |
| |
| template<typename T > |
| static AtomicNumber | GetBondId () |
| |
| static Pointer< Atom > | Convert (Pointer< Wave > wave) |
| |
Solutes are used to implement shared-pointer style garbage collection.
The idea is that Solutes have a "Concentration" representing their overall abundance. Once the Concentration of a Solute drops to 0, it is destroyed.
The Concentration of a Solute is increased when it becomes available to a novel context (i.e. Solution) through Solution::Efflux (e.g. passed to a function).
Solute is very similar to physical::Linear. However, it is intended to be more user-facing and feature-rich. Where Linear is used to implement shared pointers for Structures, Solute implements shared pointer logic for Solutions. See Solution.h for more info, including the definition of Efflux and Influx.
Solutes can be accessed (Effluxed) in 2 distinct manners. Both manners of Effluxing increase the Concentration of the desired Solute.
- When const (read-only) Effluxing, Solutes use a parent-child relationship: only the parent will contain a valid pointer to the Dissolved Substance, each child then points to the parent. This is slower across threads, as each read operation requires a lock, but is faster overall, since the Dissolved Substance doesn't need to be duplicated.
- When non-const (read-write & mutable) Effluxing, the Dissolved Substance pointer is SHARED (not cloned) and a parent-child relationship is used to indicate the source Substance. Note: the original design intended for the mutable path to Clone the Dissolved Substance so that it could be modified without mutex locks, but the lock-free clone path is not yet implemented — the shipped code shares mDissolvedSubstance directly via the Solute copy constructor. As a result, concurrent mutable access across threads still requires external synchronisation. When you would like to merge the Solute back into the original Solution, you can Diffuse it, which will call Influx on the parent's Solution, Mixing the Solute with its parent.
DEFERRED (lock-free clone-on-mutable-Efflux): the implementation vehicle now exists — bio::CowPtr< Substance > (inc/bio/chemical/wrapper/CowPtr.h, RFC_COW_WRAPPER). The plan: hold mDissolvedSubstance behind a CowPtr< Substance >; const-Efflux Read()s (shares, as today), mutable-Efflux Write(SubstanceCloner)s (detaches a private clone so it is modified lock-free), and the existing Diffuse -> Influx -> Mix machinery merges the detached clone back into the parent. This is INTENTIONALLY NOT landed in the v7 batch: it CHANGES the mutable-Efflux contract (from "shared, externally synchronised" to "isolated until Diffuse"), which is downstream-visible concurrency semantics and warrants its own RFC + consumer coordination rather than riding the COW/arena ABI cascade. Until then, treat mutable Solutes as shared-pointer access, not copy-on-write.
For mutable Solutes, Diffusion happens automatically when the Solute is destroyed, unless you set SetDiffusionTime(diffusion::time::Never()). You may also set SetDiffusionTime(diffusion::time::Interval()) and SetInterval(...) to regularly Diffuse (this implies diffusion::time::Destruction() too).
The default diffusion::effort is Active(), whereby changes are pushed up the Concentration gradient, toward the source of the Dissolved Substance. However, parents of mutable Solutes can push changes to children using SetDiffusionEffort(diffusion::effort::Passive()) (or ActiveAndPassive()). Passive() Diffusion is only applicable to Solutes which have a diffusion::time::Interval().
You should prefer Active() Diffusion for Solutes with short lifetimes, as it is more efficient and requires less work. Inversely, you should prefer Passive() Diffusion for Solutes that you intend to keep around; this will help keep the system in sync.
When Solutes are Mixed, either through Diffusion or Solution::Influx, they are combined according to their Miscibilities.
See Types.h & Miscibility.h for more info on Mixing strategies.
To illustrate why parent Concentrations are increased when mutable Solutes are Effluxed, if function A uses Solute U1 from Solution V1 and function B also uses U1, even if each function exists in an isolated sub-Solution of V1, both functions will start with the same value. Furthermore, if B depends on modifications to U1 made by A, then having U1 be removed from V1 after A completes would break B.
Thus, by keeping Solutes around when they are not needed by the immediate context allows sub-contexts to depend on the assumption that other, isolated sub-contexts can reach the same values.