1#ifndef NEFORCE_CORE_FILE_TOML_TOML_VALUE_HPP__
2#define NEFORCE_CORE_FILE_TOML_TOML_VALUE_HPP__
15NEFORCE_BEGIN_NAMESPACE__
27struct toml_exception final : value_exception {
28 explicit toml_exception(
const char* info =
"TOML Operation Failed.",
const char*
type = static_type,
29 const int code = 0) noexcept :
32 explicit toml_exception(
const exception& e) :
35 ~toml_exception()
override =
default;
36 static constexpr auto static_type =
"toml_exception";
197 NEFORCE_NODISCARD
virtual types type() const noexcept = 0;
331 NEFORCE_NODISCARD
bool get_value() const noexcept {
return value_; }
405 NEFORCE_NODISCARD
double get_value() const noexcept {
return value_; }
442 value_(_NEFORCE
move(value)),
461 NEFORCE_NODISCARD
const string&
get_value() const noexcept {
return value_; }
563 return value_.to_string_ISO_UTC();
566 return value_.to_string_ISO();
569 return value_.date().to_string();
572 return value_.time().to_string();
644 if (index < elements_.size()) {
645 return elements_[index].get();
654 NEFORCE_NODISCARD
size_t size() const noexcept {
return elements_.size(); }
673 bool is_inline_ =
false;
729 const auto it = members_.find(key);
730 if (it != members_.end()) {
731 return it->second.get();
742 const auto it = members_.find(key);
743 if (it != members_.end()) {
744 return it->second.get();
754 NEFORCE_NODISCARD
bool has_member(
const string& key)
const {
return members_.find(key) != members_.end(); }
768 NEFORCE_NODISCARD
bool is_inline() const noexcept {
return is_inline_; }
781NEFORCE_END_NAMESPACE__
NEFORCE_CONSTEXPR20 bool try_parse_ISO_UTC(const string_view view) noexcept
尝试解析ISO格式带时区
NEFORCE_CONSTEXPR20 bool try_parse_ISO(const string_view view) noexcept
尝试解析ISO格式(无时区)
NEFORCE_NODISCARD size_t size() const noexcept
获取数组大小
NEFORCE_NODISCARD const toml_array * as_array() const noexcept override
转换为数组指针
toml_array()=default
默认构造函数
NEFORCE_NODISCARD const vector< unique_ptr< toml_value > > & get_elements() const noexcept
获取所有元素的常量引用
void add_element(unique_ptr< toml_value > value)
添加元素
toml_array & operator=(toml_array &&other)=default
移动赋值运算符
toml_array(toml_array &&other)=default
移动构造函数
NEFORCE_NODISCARD types type() const noexcept override
获取类型
NEFORCE_NODISCARD const toml_value * get_element(const size_t index) const noexcept
获取常量元素指针
NEFORCE_NODISCARD types type() const noexcept override
获取类型
NEFORCE_NODISCARD const toml_boolean * as_boolean() const noexcept override
转换为布尔值指针
NEFORCE_NODISCARD bool get_value() const noexcept
获取布尔值
toml_boolean(const bool value) noexcept
构造函数
NEFORCE_NODISCARD types type() const noexcept override
获取类型
NEFORCE_NODISCARD const toml_datetime * as_datetime() const noexcept override
转换为日期时间指针
NEFORCE_NODISCARD const datetime & get_value() const noexcept
获取日期时间值
toml_datetime(const string_view value, const datetime_type type) noexcept
构造函数
NEFORCE_NODISCARD datetime_type get_datetime_type() const noexcept
获取日期时间类型
NEFORCE_NODISCARD string get_string_value() const noexcept
获取字符串格式的日期时间值
@ LocalDate
本地日期 1979-05-27
@ OffsetDateTime
偏移日期时间 1979-05-27T07:32:00Z
@ LocalDateTime
本地日期时间 1979-05-27T07:32:00
NEFORCE_NODISCARD double get_value() const noexcept
获取浮点数值
NEFORCE_NODISCARD const toml_float * as_float() const noexcept override
转换为浮点数指针
NEFORCE_NODISCARD types type() const noexcept override
获取类型
toml_float(const double value) noexcept
构造函数
NEFORCE_NODISCARD types type() const noexcept override
获取类型
NEFORCE_NODISCARD int64_t get_value() const noexcept
获取整数值
toml_integer(const int64_t value) noexcept
构造函数
NEFORCE_NODISCARD const toml_integer * as_integer() const noexcept override
转换为整数指针
NEFORCE_NODISCARD const toml_string * as_string() const noexcept override
转换为字符串指针
toml_string(string value, const string_type type=Basic) noexcept
构造函数
NEFORCE_NODISCARD string_type get_string_type() const noexcept
获取字符串引号类型
NEFORCE_NODISCARD const string & get_value() const noexcept
获取字符串值
@ MultiBasic
多行基本字符串 """string"""
@ MultiLiteral
多行字面量字符串 '''string'''
NEFORCE_NODISCARD types type() const noexcept override
获取类型
toml_table & operator=(toml_table &&other)=default
移动赋值运算符
NEFORCE_NODISCARD bool has_member(const string &key) const
检查成员是否存在
void set_inline(const bool is_inline) noexcept
设置内联表格标记
toml_table()=default
默认构造函数
NEFORCE_NODISCARD const toml_value * get_member(const string &key) const
获取常量成员指针
NEFORCE_NODISCARD bool is_inline() const noexcept
判断是否为内联表格
NEFORCE_NODISCARD const toml_table * as_table() const noexcept override
转换为表格指针
NEFORCE_NODISCARD const unordered_map< string, unique_ptr< toml_value > > & get_members() const noexcept
获取所有成员的常量引用
NEFORCE_NODISCARD types type() const noexcept override
获取类型
toml_table(const bool is_inline)
构造函数
void add_member(const string &key, unique_ptr< toml_value > value)
添加成员
toml_table(toml_table &&other)=default
移动构造函数
NEFORCE_NODISCARD toml_value * get_member(const string &key)
获取成员指针
NEFORCE_NODISCARD bool is_datetime() const noexcept
判断是否为日期时间类型
NEFORCE_NODISCARD bool is_float() const noexcept
判断是否为浮点数类型
NEFORCE_NODISCARD bool is_integer() const noexcept
判断是否为整数类型
virtual NEFORCE_NODISCARD types type() const noexcept=0
获取toml值类型
virtual NEFORCE_NODISCARD const toml_table * as_table() const noexcept
转换为表格指针
virtual ~toml_value()=default
虚析构函数
NEFORCE_NODISCARD bool is_array() const noexcept
判断是否为数组类型
NEFORCE_NODISCARD string to_document() const
转换为文档格式字符串
virtual NEFORCE_NODISCARD const toml_boolean * as_boolean() const noexcept
转换为布尔值指针
NEFORCE_NODISCARD bool is_boolean() const noexcept
判断是否为布尔类型
virtual NEFORCE_NODISCARD const toml_float * as_float() const noexcept
转换为浮点数指针
virtual NEFORCE_NODISCARD const toml_datetime * as_datetime() const noexcept
转换为日期时间指针
virtual NEFORCE_NODISCARD const toml_string * as_string() const noexcept
转换为字符串指针
NEFORCE_NODISCARD string to_string() const
转换为紧凑格式字符串
NEFORCE_NODISCARD bool is_string() const noexcept
判断是否为字符串类型
virtual NEFORCE_NODISCARD const toml_integer * as_integer() const noexcept
转换为整数指针
virtual NEFORCE_NODISCARD const toml_array * as_array() const noexcept
转换为数组指针
NEFORCE_NODISCARD bool is_table() const noexcept
判断是否为表格类型
long long int64_t
64位有符号整数类型
NEFORCE_NORETURN NEFORCE_ALWAYS_INLINE_INLINE void unreachable() noexcept
标记不可达代码路径
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
exception(const char *info=static_type, const char *type=static_type, const int code=0)
构造函数
NEFORCE_NODISCARD int code() const noexcept
获取异常码
NEFORCE_NODISCARD const char * type() const noexcept
获取异常类型
NEFORCE_CONSTEXPR20 bool try_parse(const string_view str) noexcept
尝试从字符串解析对象