CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
species_input.h
1#pragma once
2
3#include <optional>
4#include <stdexcept>
5#include <string>
6#include <vector>
7
8#include "errors.h"
9#include "parser.h"
10
18 public:
19 SpeciesInput(FileContent* pfc, std::string instance_name);
20
21 const std::string& instance_name() const {
22 return instance_name_;
23 }
24
27 template <class T>
28 std::optional<T> get(const std::string& field) const {
29 return pfc_->get<T>(qualify(field));
30 }
31
33 template <class T>
34 T get_or(const std::string& field, T fallback) const {
35 if (auto v = get<T>(field))
36 return *v;
37 return fallback;
38 }
39
41 template <class T>
42 T require(const std::string& field) const {
43 if (auto v = get<T>(field))
44 return *v;
45 class_stop_severe("species '%s': missing required field '%s'",
46 instance_name_.c_str(),
47 field.c_str());
48 }
49
50 private:
51 std::string qualify(const std::string& field) const;
52
53 FileContent* pfc_;
54 std::string instance_name_;
55};
56
57std::vector<std::string> CollectInstanceFieldValues(FileContent* pfc,
58 const std::vector<std::string>& instances,
59 const std::string& field);
60
61bool AnyInstanceFieldValue(const std::vector<std::string>& values);
62
63bool SynthesiseIdenticalScalarField(FileContent* pfc,
64 const std::vector<std::string>& instances,
65 const std::string& dot_field,
66 const std::string& legacy_key,
67 const std::string& species_description);
68
80void TranslateSingleInstanceDotSyntax(FileContent* pfc);
Definition parser.h:21
std::optional< T > get(const std::string &name) const
Definition species_input.h:17
std::optional< T > get(const std::string &field) const
Definition species_input.h:28
T require(const std::string &field) const
Definition species_input.h:42
T get_or(const std::string &field, T fallback) const
Definition species_input.h:34