102 VariableType
Parse(
const DocsMap& docs_map)
const;
105 friend struct impl::ConfigIdGetter;
107 const impl::ConfigId id_;
128class Snapshot
final {
130 Snapshot(
const Snapshot&);
131 Snapshot& operator=(
const Snapshot&);
133 Snapshot(Snapshot&&)
noexcept;
134 Snapshot& operator=(Snapshot&&)
noexcept;
139 template <
typename VariableType>
140 const VariableType&
operator[](
const Key<VariableType>& key)
const&;
143 template <
typename VariableType>
144 const VariableType&
operator[](
const Key<VariableType>&) &&;
148 template <
typename T>
149 const T& Get()
const&;
152 template <
typename T>
159 friend class impl::StorageData;
161 explicit Snapshot(
const impl::StorageData& storage);
163 const impl::SnapshotData& GetData()
const;
166 utils::FastPimpl<Impl, 16, 8> impl_;
128class Snapshot
final {
…};
171constexpr DefaultAsJsonString::DefaultAsJsonString(std::string_view json_string) : json_string(json_string) {}
174ConfigDefault::ConfigDefault(std::string_view name,
const T& value)
175 : name(name), default_json(impl::ToJsonString(value)) {}
177template <
typename Variable>
178Key<Variable>::
Key(std::string_view name,
const VariableType& default_value)
179 : id_(impl::Register(
181 [name = std::string{name}](
const auto& docs_map) -> std::any {
182 return impl::DocsMapGet(docs_map, name).
template As<VariableType>();
184 impl::ValueToDocsMapString(name, default_value)
178Key<Variable>::
Key(std::string_view name,
const VariableType& default_value) {
…}
187template <
typename Variable>
188Key<Variable>::
Key(std::string_view name, DefaultAsJsonString default_json)
189 : id_(impl::Register(
191 [name = std::string{name}](
const auto& docs_map) -> std::any {
192 return impl::DocsMapGet(docs_map, name).
template As<VariableType>();
194 impl::SingleToDocsMapString(name, default_json.json_string)
188Key<Variable>::
Key(std::string_view name, DefaultAsJsonString default_json) {
…}
197template <
typename Variable>
198Key<Variable>::
Key(std::string_view name, JsonParser parser, DefaultAsJsonString default_json)
199 : id_(impl::Register(
201 [name = std::string{name}, parser](
const auto& docs_map) -> std::any {
202 return parser(impl::DocsMapGet(docs_map, name));
204 impl::SingleToDocsMapString(name, default_json.json_string)
198Key<Variable>::
Key(std::string_view name, JsonParser parser, DefaultAsJsonString default_json) {
…}
207template <
typename Variable>
208template <std::size_t N>
209Key<Variable>::
Key(DocsMapParser parser,
const ConfigDefault (&default_json_map)[N])
210 : id_(impl::Register(
212 [parser](
const DocsMap& docs_map) -> std::any {
return parser(docs_map); },
213 impl::MultipleToDocsMapString(default_json_map, N)
209Key<Variable>::
Key(DocsMapParser parser,
const ConfigDefault (&default_json_map)[N]) {
…}
216template <
typename Variable>
217Key<Variable>::
Key(ConstantConfig , VariableType value)
218 : id_(impl::Register(
220 [value = std::move(value)](
const DocsMap& ) {
return value; },
217Key<Variable>::
Key(ConstantConfig , VariableType value) {
…}
224template <
typename Variable>
225Key<Variable>::Key(impl::InternalTag, std::string_view name)
226 : id_(impl::Register(
228 [name = std::string{name}](
const auto& docs_map) -> std::any {
229 return impl::DocsMapGet(docs_map, name).
template As<VariableType>();
234template <
typename Variable>
235Key<Variable>::Key(impl::InternalTag, DocsMapParser parser)
236 : id_(impl::Register(
238 [parser](
const DocsMap& docs_map) -> std::any {
return parser(docs_map); },
242template <
typename VariableType>
243std::string_view Key<VariableType>::
GetName()
const noexcept {
244 return impl::GetName(id_);
243std::string_view Key<VariableType>::
GetName()
const noexcept {
…}
247template <
typename VariableType>
248VariableType Key<VariableType>::
Parse(
const DocsMap& docs_map)
const {
249 return std::any_cast<VariableType>(impl::MakeConfig(id_, docs_map));
248VariableType Key<VariableType>::
Parse(
const DocsMap& docs_map)
const {
…}