12#include "../utils/FrozenKeyIdxBiMap.h"
18enum class Kind { HYDRO, PASSIVE_SCALAR, MAGNETIC };
21enum class IOBuf { HOST, DEVICE };
31 const std::vector<int>& id_vec_;
34 explicit IdRange(
const std::vector<int>& id_vec) : id_vec_(id_vec) {}
38 using iterator = std::vector<int>::const_iterator;
40 iterator begin()
const {
return id_vec_.begin(); }
41 iterator end()
const {
return id_vec_.end(); }
51 std::vector<int> hydro_field_ids_;
52 std::vector<int> scalar_field_ids_;
53 std::vector<int> magnetic_field_ids_;
54 std::vector<field::IOBuf> io_buf_;
62 const std::vector<int>& get_kind_ids_(field::Kind kind)
const;
91 bool bad_id = (field_id < 0 || field_id >=
n_fields());
92 return bad_id ? std::nullopt : std::optional<std::string>{name_id_bimap_.
inverse_find(
field_id)};
107 if (field_id < 0 || field_id >=
n_fields()) {
110 for (
int id : magnetic_field_ids_) {
112 return std::optional<bool>{
false};
115 return std::optional<bool>{
true};
124 bool bad_id = (field_id < 0 || field_id >=
n_fields());
125 return bad_id ? std::nullopt : std::optional<field::IOBuf>{io_buf_[
field_id]};
129 int n_fields()
const {
return static_cast<int>(name_id_bimap_.
size()); }
132 int n_fields(field::Kind kind)
const {
return static_cast<int>(get_kind_ids_(kind).size()); }
137 return scalar_field_ids_.empty() ? std::nullopt : std::optional<int>{scalar_field_ids_[0]};
Definition field_info.h:49
std::optional< bool > is_cell_centered(int field_id) const
Definition field_info.h:105
std::optional< field::IOBuf > io_buf(int field_id) const
Definition field_info.h:122
static FieldInfo create()
Definition field_info.cpp:73
std::optional< int > field_id(const char *field_name) const
Definition field_info.h:85
int n_fields() const
Definition field_info.h:129
std::optional< std::string > field_name(int field_id) const
Definition field_info.h:89
field::IdRange get_id_range(field::Kind kind) const
Definition field_info.h:149
const utils::FrozenKeyIdxBiMap & get_field_id_map() const
Definition field_info.h:82
std::optional< int > scalar_start() const
Definition field_info.h:135
int n_fields(field::Kind kind) const
Definition field_info.h:132
Definition field_info.h:30
A bidirectional map (bimap), specialized to map n unique string keys to unique indexes with values of...
Definition FrozenKeyIdxBiMap.h:111
std::size_t size() const noexcept
Definition FrozenKeyIdxBiMap.h:186
std::optional< int > find(const char *key) const noexcept
Definition FrozenKeyIdxBiMap.cpp:144
std::string inverse_find(int index) const
Definition FrozenKeyIdxBiMap.h:179
IOBuf
Definition field_info.h:21