BioCMAMC-ST
species_descriptor.hpp
1#ifndef __MIXTURE_SPECIES_DESCRIPTOR_HPP__
2#define __MIXTURE_SPECIES_DESCRIPTOR_HPP__
3#include <initializer_list>
4#include <optional>
5#include <ostream>
6#include <ranges>
7#include <string>
8#include <vector>
9namespace Mixture
10{
11
12 struct Specie
13 {
14 std::string name;
15 std::optional<double> molar_weight;
16 // dimensionless
17 std::optional<double> henry;
18
19 template <class Archive>
20 void
21 serialize(Archive& archive)
22 {
23 archive(name, molar_weight, henry);
24 }
25 };
26
27 Specie new_specie(std::string_view _name,
28 double molar_weight,
29 std::optional<double> henry);
30
31 Specie new_specie(std::string_view _name);
32
33 std::optional<Specie> query_species(std::string_view);
34
36 {
37 private:
38 std::vector<Specie> m_table;
39
40 public:
41 friend std::ostream& operator<<(std::ostream&, const SpecieTable&);
42 [[nodiscard]] std::size_t n_species() const;
43 SpecieTable(std::initializer_list<Specie> values);
44
45 template <class Archive>
46 void
47 serialize(Archive& archive)
48 {
49 archive(m_table);
50 }
51
52 explicit SpecieTable(std::size_t n);
53
54 SpecieTable() = default;
55 std::optional<std::reference_wrapper<const Specie>> add(Specie&& s);
56 [[nodiscard]] std::optional<std::reference_wrapper<const Specie>>
57 get(std::string_view name) const;
58
59 [[nodiscard]] std::optional<size_t> index_of(std::string_view name) const;
60
61 [[nodiscard]] bool has(std::string_view name) const;
62
63 [[nodiscard]] auto
64 henry() const
65 {
66 return m_table
67 | std::views::transform([](const Specie& e)
68 { return e.henry.value_or(0.0); });
69 }
70
71 [[nodiscard]] auto
73 {
74 return m_table
75 | std::views::transform([](const Specie& e) { return e.name; });
76 }
77 };
78 std::ostream& operator<<(std::ostream& os, const Specie& s);
79
80 std::ostream& operator<<(std::ostream& os, const SpecieTable& table);
81
83 {
84 std::vector<Specie> species;
86 };
87
88} // namespace Mixture
89
90#endif //__SIMULATION_SPECIES_DESCRIPTOR_HPP__
std::optional< size_t > index_of(std::string_view name) const
Definition species_descriptor.cpp:65
std::optional< std::reference_wrapper< const Specie > > get(std::string_view name) const
Definition species_descriptor.cpp:105
std::optional< std::reference_wrapper< const Specie > > add(Specie &&s)
Definition species_descriptor.cpp:93
auto species_list() const
Definition species_descriptor.hpp:72
bool has(std::string_view name) const
Definition species_descriptor.cpp:87
SpecieTable(std::initializer_list< Specie > values)
Definition species_descriptor.cpp:59
std::size_t n_species() const
Definition species_descriptor.cpp:54
void serialize(Archive &archive)
Definition species_descriptor.hpp:47
std::vector< Specie > m_table
Definition species_descriptor.hpp:38
auto henry() const
Definition species_descriptor.hpp:64
friend std::ostream & operator<<(std::ostream &, const SpecieTable &)
Definition species_descriptor.cpp:21
Definition species_descriptor.hpp:10
std::ostream & operator<<(std::ostream &os, const Specie &s)
Definition species_descriptor.cpp:10
Specie new_specie(std::string_view _name, double molar_weight, std::optional< double > henry)
Definition species_descriptor.cpp:32
std::optional< Specie > query_species(std::string_view)
Definition query_species.cpp:56
Definition species_descriptor.hpp:83
std::vector< Specie > species
Definition species_descriptor.hpp:84
double bubble_diameter
Definition species_descriptor.hpp:85
Definition species_descriptor.hpp:13
std::string name
Definition species_descriptor.hpp:14
std::optional< double > henry
Definition species_descriptor.hpp:17
std::optional< double > molar_weight
Definition species_descriptor.hpp:15
void serialize(Archive &archive)
Definition species_descriptor.hpp:21