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