From 56ae875861ab260b80a030f50c4aff9f9dc8fff0 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 13 Apr 2024 13:32:39 +0200 Subject: Adding upstream version 2.14.2. Signed-off-by: Daniel Baumann --- lib/base/dictionary.hpp | 91 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 lib/base/dictionary.hpp (limited to 'lib/base/dictionary.hpp') diff --git a/lib/base/dictionary.hpp b/lib/base/dictionary.hpp new file mode 100644 index 0000000..ffccd63 --- /dev/null +++ b/lib/base/dictionary.hpp @@ -0,0 +1,91 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#ifndef DICTIONARY_H +#define DICTIONARY_H + +#include "base/i2-base.hpp" +#include "base/object.hpp" +#include "base/value.hpp" +#include +#include +#include +#include + +namespace icinga +{ + +typedef std::vector > DictionaryData; + +/** + * A container that holds key-value pairs. + * + * @ingroup base + */ +class Dictionary final : public Object +{ +public: + DECLARE_OBJECT(Dictionary); + + /** + * An iterator that can be used to iterate over dictionary elements. + */ + typedef std::map::iterator Iterator; + + typedef std::map::size_type SizeType; + + typedef std::map::value_type Pair; + + Dictionary() = default; + Dictionary(const DictionaryData& other); + Dictionary(DictionaryData&& other); + Dictionary(std::initializer_list init); + + Value Get(const String& key) const; + bool Get(const String& key, Value *result) const; + const Value * GetRef(const String& key) const; + void Set(const String& key, Value value, bool overrideFrozen = false); + bool Contains(const String& key) const; + + Iterator Begin(); + Iterator End(); + + size_t GetLength() const; + + void Remove(const String& key); + + void Remove(Iterator it); + + void Clear(); + + void CopyTo(const Dictionary::Ptr& dest) const; + Dictionary::Ptr ShallowClone() const; + + std::vector GetKeys() const; + + static Object::Ptr GetPrototype(); + + Object::Ptr Clone() const override; + + String ToString() const override; + + void Freeze(); + + Value GetFieldByName(const String& field, bool sandboxed, const DebugInfo& debugInfo) const override; + void SetFieldByName(const String& field, const Value& value, bool overrideFrozen, const DebugInfo& debugInfo) override; + bool HasOwnField(const String& field) const override; + bool GetOwnField(const String& field, Value *result) const override; + +private: + std::map m_Data; /**< The data for the dictionary. */ + mutable std::shared_timed_mutex m_DataMutex; + bool m_Frozen{false}; +}; + +Dictionary::Iterator begin(const Dictionary::Ptr& x); +Dictionary::Iterator end(const Dictionary::Ptr& x); + +} + +extern template class std::map; + +#endif /* DICTIONARY_H */ -- cgit v1.2.3