blob: f2fa16d1cdb5aab1f817222a10e6866c03a5dc33 (
plain) (
tree)
|
|
#pragma once
#include <library/cpp/scheme/scheme.h>
// Scheme adapter that holds referenced value
template <typename TScheme>
class TSchemeHolder {
public:
TSchemeHolder()
: Value_(NSc::Null())
, Scheme_(&Value_)
{
}
explicit TSchemeHolder(NSc::TValue&& value)
: Value_(std::move(value))
, Scheme_(&Value_)
{
}
explicit TSchemeHolder(const NSc::TValue& value)
: Value_(value)
, Scheme_(&Value_)
{
}
TSchemeHolder(TSchemeHolder<TScheme>&& rhs)
: Value_(std::move(rhs.Value_))
, Scheme_(&Value_)
{
}
TSchemeHolder(const TSchemeHolder<TScheme>& rhs)
: Value_(rhs.Value_)
, Scheme_(&Value_)
{
}
TSchemeHolder<TScheme>& operator=(TSchemeHolder<TScheme>&& rhs) {
Value_ = std::move(rhs.Value_);
return *this;
}
TSchemeHolder<TScheme>& operator=(const TSchemeHolder<TScheme>& rhs) {
Value_ = rhs.Value_;
return *this;
}
TScheme& Scheme() {
return Scheme_;
}
const TScheme& Scheme() const {
return Scheme_;
}
TScheme& operator->() {
return Scheme_;
}
const TScheme& operator->() const {
return Scheme_;
}
NSc::TValue& Value() {
return Value_;
}
const NSc::TValue& Value() const {
return Value_;
}
bool IsNull() const {
return Value_.IsNull();
}
private:
NSc::TValue Value_;
TScheme Scheme_;
};
|