3#include <StormByte/config/exception.hxx>
4#include <StormByte/config/item/base.hxx>
5#include <StormByte/config/type.hxx>
15namespace StormByte::Config::Item {
74 Base& operator[](const
size_t& index);
81 const
Base& operator[](const
size_t& index) const;
90 Base& operator[](const std::
string& path);
99 inline const
Base& operator[](const std::
string& path)
const {
116 return !operator==(container);
127 inline Base&
Add(
const Base& item,
const OnExistingAction& on_existing = OnExistingAction::ThrowException) {
128 return Add(std::move(*item.Clone()), on_existing);
138 inline Base&
Add(
Base&& item,
const OnExistingAction& on_existing = OnExistingAction::ThrowException) {
139 return Add(item.Move(), on_existing);
148 Base&
Add(Base::PointerType item,
const OnExistingAction& on_existing);
162 bool Exists(
const std::string& path)
const;
183 std::string
Serialize(
const int& indent_level)
const noexcept override;
190 static constexpr std::pair<const char, const char>
EnclosureCharacters(
const ContainerType& type)
noexcept {
192 case ContainerType::Group:
return std::make_pair<const char, const char>(
'{',
'}');
193 case ContainerType::List:
return std::make_pair<const char, const char>(
'[',
']');
194 default:
return std::make_pair<const char, const char>(
'\0',
'\0');
203 static constexpr const char EndCharacter(
const ContainerType& type)
noexcept {
205 case ContainerType::Group:
return '}';
206 case ContainerType::List:
return ']';
207 default:
return '\0';
215 constexpr std::span<Base::PointerType>
Items() noexcept {
216 return std::span(m_items);
223 constexpr std::span<const Base::PointerType>
Items() const noexcept {
224 return std::span(m_items);
237 constexpr std::
string ContainerTypeToString() const noexcept {
238 return Item::TypeToString(this->ContainerType());
245 constexpr Item::Type
Type() const noexcept
override {
246 return Item::Type::Container;
253 constexpr size_t Size() const noexcept {
254 return m_items.size();
264 std::vector<
Base::PointerType> m_items;
272 virtual
Base::PointerType BeforeAdditionActions(
Base::PointerType item, const OnExistingAction onexisting) = 0;
279 virtual std::
string ContentsToString(const
int& level) const noexcept;
286 static
bool IsPathValid(const std::
string& name) noexcept;
294 const
Base& LookUp(const std::
string& path) const;
302 const
Base& LookUp(std::queue<std::
string>& path) const;
309 void Remove(std::queue<std::
string>& path);
The base class for all configuration items.
Definition base.hxx:29
Represents a container that can hold multiple configuration items.
Definition container.hxx:21
constexpr size_t Size() const noexcept
Definition container.hxx:253
void Remove(const std::string &path)
constexpr Item::Type Type() const noexcept override
Definition container.hxx:245
constexpr std::span< Base::PointerType > Items() noexcept
Definition container.hxx:215
Container & operator=(Container &&base) noexcept=default
Container()=default
Constructs an empty Container.
Container & operator=(const Container &base)=default
void Clear() noexcept
Definition container.hxx:153
static constexpr const char EndCharacter(const ContainerType &type) noexcept
Definition container.hxx:203
static constexpr std::pair< const char, const char > EnclosureCharacters(const ContainerType &type) noexcept
Definition container.hxx:190
Base & Add(Base &&item, const OnExistingAction &on_existing=OnExistingAction::ThrowException)
Definition container.hxx:138
void Remove(const size_t &index)
constexpr std::span< const Base::PointerType > Items() const noexcept
Definition container.hxx:223
std::string Serialize(const int &indent_level) const noexcept override
Container(Container &&base) noexcept=default
virtual constexpr Item::ContainerType ContainerType() const noexcept=0
Base & Add(Base::PointerType item, const OnExistingAction &on_existing)
Adds an item to the container.
bool operator==(const Container &container) const noexcept
Container(const std::string &name)
size_t Count() const noexcept
bool Exists(const std::string &path) const
virtual ~Container() noexcept override=default
Base & Add(const Base &item, const OnExistingAction &on_existing=OnExistingAction::ThrowException)
Definition container.hxx:127
Container(std::string &&name)
Container(const Container &base)=default
bool operator!=(const Container &container) const noexcept
Definition container.hxx:115