Program Listing for File value_ptr.hpp
↰ Return to documentation for file (include/eat/framework/value_ptr.hpp)
#pragma once
#include <memory>
namespace eat::framework {
template <typename T>
std::shared_ptr<T> copy_shared_ptr(const std::shared_ptr<T> &value) {
return std::make_shared<T>(*value);
}
template <typename T>
class ValuePtr {
public:
ValuePtr() {}
ValuePtr(std::shared_ptr<T> value_) : value(std::move(value_)) {}
std::shared_ptr<const T> read() const { return value; }
std::shared_ptr<T> move_or_copy() const {
if (value.use_count() > 1)
return copy_shared_ptr(value);
else
return std::move(value);
}
private:
std::shared_ptr<T> value;
};
} // namespace eat::framework