26 using Ptr = std::shared_ptr<Context>;
27 using ConstPtr = std::shared_ptr<const Context>;
39 virtual void set(std::string name, std::any
value) = 0;
40 [[nodiscard]]
virtual const std::any&
get(std::string name)
const = 0;
41 [[nodiscard]]
virtual std::any
try_get(std::string name)
const = 0;
47 using Ptr = std::shared_ptr<RecursiveContext>;
57 const std::any&
result = context->get(std::move(name));
60 return std::any_cast<T>(
result);
62 catch(std::bad_any_cast&)
64 using F = std::function<T()>;
65 return std::any_cast<F>(
result)();
72 return get<T>(context,
typeid(T).name());
80 return get<T>(context, std::move(name));
91 return try_get<T>(context,
typeid(T).name());
94 template <
typename T,
typename Callable>
96 -> std::enable_if_t<std::is_same_v<T, std::remove_reference_t<
decltype(default_value())>>, T>
100 return get<T>(context, std::move(name));
104 return default_value();
108 template <
typename T,
typename Callable>
110 -> std::enable_if_t<std::is_same_v<T, std::remove_reference_t<
decltype(default_value())>>, T>
112 return get_or<T>(context,
typeid(T).name(), default_value);
115 template <
typename T>
118 return get_or<T>(context, std::move(name), [&default_value] {
return std::move(default_value); });
121 template <
typename T>
124 return get_or<T>(context,
typeid(T).name(), [&default_value] {
return std::move(default_value); });
127 template <
typename T>
130 context->set(std::move(name), std::any(std::move(
value)));
133 template <
typename T>
139 template <
typename Callable>
142 using T = std::remove_reference_t<
decltype(
value())>;
143 set(context, std::move(name), std::function<T()>(std::move(
value)));
146 template <
typename Callable>
149 using T = std::remove_reference_t<
decltype(
value())>;
const uint8_t value
Definition blob-tests.cc:114
Definition interface.hh:11
virtual std::any try_get(std::string name) const =0
std::shared_ptr< const Context > ConstPtr
Definition context.hh:27
static Ptr create()
Definition context.cc:15
virtual void set(std::string name, std::any value)=0
virtual const std::any & get(std::string name) const =0
std::shared_ptr< Context > Ptr
Definition context.hh:26
static Ptr create()
Definition context.cc:16
virtual void add(const Context::ConstPtr &child)=0
std::shared_ptr< RecursiveContext > Ptr
Definition context.hh:47
Definition tweak-view.hh:22
std::optional< T > try_get(const Context::ConstPtr &context, std::string name)
Definition context.hh:76
T get(const Context::ConstPtr &context, std::string name)
Definition context.hh:55
void set(const Context::Ptr &context, std::string name, T value)
Definition context.hh:128
auto get_or(const Context::ConstPtr &context, std::string name, const Callable &default_value) -> std::enable_if_t< std::is_same_v< T, std::remove_reference_t< decltype(default_value())> >, T >
Definition context.hh:95
void setFactory(const Context::Ptr &context, std::string name, Callable value)
Definition context.hh:140
SampleIterator< const uint8_t > result
Definition sampleiterator-tests.cc:94