view dep/toml11/toml/storage.hpp @ 327:b5d6c27c308f

anime: refactor Anime::SeriesSeason to Season class ToLocalString has also been altered to take in both season and year because lots of locales actually treat formatting seasons differently! most notably is Russian which adds a suffix at the end to notate seasons(??)
author Paper <paper@paper.us.eu.org>
date Thu, 13 Jun 2024 01:49:18 -0400
parents 3b355fa948c7
children
line wrap: on
line source

//     Copyright Toru Niina 2017.
// Distributed under the MIT License.
#ifndef TOML11_STORAGE_HPP
#define TOML11_STORAGE_HPP
#include "utility.hpp"

namespace toml
{
namespace detail
{

// this contains pointer and deep-copy the content if copied.
// to avoid recursive pointer.
template<typename T>
struct storage
{
    using value_type = T;

    explicit storage(value_type const& v): ptr(toml::make_unique<T>(v)) {}
    explicit storage(value_type&&      v): ptr(toml::make_unique<T>(std::move(v))) {}
    ~storage() = default;
    storage(const storage& rhs): ptr(toml::make_unique<T>(*rhs.ptr)) {}
    storage& operator=(const storage& rhs)
    {
        this->ptr = toml::make_unique<T>(*rhs.ptr);
        return *this;
    }
    storage(storage&&) = default;
    storage& operator=(storage&&) = default;

    bool is_ok() const noexcept {return static_cast<bool>(ptr);}

    value_type&       value() &      noexcept {return *ptr;}
    value_type const& value() const& noexcept {return *ptr;}
    value_type&&      value() &&     noexcept {return std::move(*ptr);}

  private:
    std::unique_ptr<value_type> ptr;
};

} // detail
} // toml
#endif// TOML11_STORAGE_HPP