From 8bea03e0811588e741050b598b8123865b333999 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 4 Nov 2025 22:06:39 +0800 Subject: Move toml to base. --- include/cru/base/toml/TomlDocument.h | 45 ++++++++++++++++++++++++++++ include/cru/base/toml/TomlParser.h | 32 ++++++++++++++++++++ include/cru/toml/Base.h | 11 ------- include/cru/toml/TomlDocument.h | 57 ------------------------------------ include/cru/toml/TomlParser.h | 36 ----------------------- 5 files changed, 77 insertions(+), 104 deletions(-) create mode 100644 include/cru/base/toml/TomlDocument.h create mode 100644 include/cru/base/toml/TomlParser.h delete mode 100644 include/cru/toml/Base.h delete mode 100644 include/cru/toml/TomlDocument.h delete mode 100644 include/cru/toml/TomlParser.h (limited to 'include') diff --git a/include/cru/base/toml/TomlDocument.h b/include/cru/base/toml/TomlDocument.h new file mode 100644 index 00000000..c0dc68af --- /dev/null +++ b/include/cru/base/toml/TomlDocument.h @@ -0,0 +1,45 @@ +#pragma once + +#include "../Base.h" + +#include +#include +#include + +namespace cru::toml { +class CRU_BASE_API TomlSection { + public: + std::optional GetValue(const std::string& key) const; + void SetValue(const std::string& key, std::string value); + void DeleteValue(const std::string& key); + + auto begin() { return values_.begin(); } + auto end() { return values_.end(); } + auto begin() const { return values_.begin(); } + auto end() const { return values_.end(); } + auto cbegin() const { return values_.cbegin(); } + auto cend() const { return values_.cend(); } + + private: + std::unordered_map values_; +}; + +class CRU_BASE_API TomlDocument { + public: + TomlSection* GetSection(const std::string& name); + TomlSection* GetSectionOrCreate(const std::string& name); + const TomlSection* GetSection(const std::string& name) const; + void SetSection(const std::string& name, TomlSection section); + void DeleteSection(const std::string& name); + + auto begin() { return sections_.begin(); } + auto end() { return sections_.end(); } + auto begin() const { return sections_.begin(); } + auto end() const { return sections_.end(); } + auto cbegin() const { return sections_.cbegin(); } + auto cend() const { return sections_.cend(); } + + private: + std::unordered_map sections_; +}; +} // namespace cru::toml diff --git a/include/cru/base/toml/TomlParser.h b/include/cru/base/toml/TomlParser.h new file mode 100644 index 00000000..ac7d0217 --- /dev/null +++ b/include/cru/base/toml/TomlParser.h @@ -0,0 +1,32 @@ +#pragma once + +#include "../Exception.h" +#include "TomlDocument.h" + +#include + +namespace cru::toml { +// A very simple and tolerant TOML parser. +class CRU_BASE_API TomlParsingException : public Exception { + public: + using Exception::Exception; +}; + +class CRU_BASE_API TomlParser : public Object { + public: + explicit TomlParser(std::string input); + ~TomlParser(); + + public: + TomlDocument Parse(); + + private: + // The document is empty to begin with. + void DoParse(TomlDocument& document); + + private: + std::string input_; + + std::optional cache_; +}; +} // namespace cru::toml diff --git a/include/cru/toml/Base.h b/include/cru/toml/Base.h deleted file mode 100644 index 76c7ee71..00000000 --- a/include/cru/toml/Base.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#ifdef CRU_IS_DLL -#ifdef CRU_TOML_EXPORT_API -#define CRU_TOML_API __declspec(dllexport) -#else -#define CRU_TOML_API __declspec(dllimport) -#endif -#else -#define CRU_TOML_API -#endif diff --git a/include/cru/toml/TomlDocument.h b/include/cru/toml/TomlDocument.h deleted file mode 100644 index 22442096..00000000 --- a/include/cru/toml/TomlDocument.h +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once - -#include "Base.h" - -#include "cru/base/Base.h" - -#include -#include -#include - -namespace cru::toml { -class CRU_TOML_API TomlSection { - public: - CRU_DEFAULT_CONSTRUCTOR_DESTRUCTOR(TomlSection) - CRU_DEFAULT_COPY(TomlSection) - CRU_DEFAULT_MOVE(TomlSection) - - public: - std::optional GetValue(const std::string& key) const; - void SetValue(const std::string& key, std::string value); - void DeleteValue(const std::string& key); - - auto begin() { return values_.begin(); } - auto end() { return values_.end(); } - auto begin() const { return values_.begin(); } - auto end() const { return values_.end(); } - auto cbegin() const { return values_.cbegin(); } - auto cend() const { return values_.cend(); } - - private: - std::unordered_map values_; -}; - -class CRU_TOML_API TomlDocument { - public: - CRU_DEFAULT_CONSTRUCTOR_DESTRUCTOR(TomlDocument) - CRU_DEFAULT_COPY(TomlDocument) - CRU_DEFAULT_MOVE(TomlDocument) - - public: - TomlSection* GetSection(const std::string& name); - TomlSection* GetSectionOrCreate(const std::string& name); - const TomlSection* GetSection(const std::string& name) const; - void SetSection(const std::string& name, TomlSection section); - void DeleteSection(const std::string& name); - - auto begin() { return sections_.begin(); } - auto end() { return sections_.end(); } - auto begin() const { return sections_.begin(); } - auto end() const { return sections_.end(); } - auto cbegin() const { return sections_.cbegin(); } - auto cend() const { return sections_.cend(); } - - private: - std::unordered_map sections_; -}; -} // namespace cru::toml diff --git a/include/cru/toml/TomlParser.h b/include/cru/toml/TomlParser.h deleted file mode 100644 index b6532931..00000000 --- a/include/cru/toml/TomlParser.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include "cru/base/Exception.h" -#include "cru/toml/TomlDocument.h" - -#include - -namespace cru::toml { -// A very simple and tolerant TOML parser. -class CRU_TOML_API TomlParsingException : public Exception { - public: - using Exception::Exception; -}; - -class CRU_TOML_API TomlParser { - public: - explicit TomlParser(std::string input); - - CRU_DELETE_COPY(TomlParser) - CRU_DELETE_MOVE(TomlParser) - - ~TomlParser(); - - public: - TomlDocument Parse(); - - private: - // The document is empty to begin with. - void DoParse(TomlDocument& document); - - private: - std::string input_; - - std::optional cache_; -}; -} // namespace cru::toml -- cgit v1.2.3