diff options
Diffstat (limited to 'core/dictionary.cpp')
-rw-r--r-- | core/dictionary.cpp | 60 |
1 files changed, 24 insertions, 36 deletions
diff --git a/core/dictionary.cpp b/core/dictionary.cpp index bc3b792bd5..052e1bdae1 100644 --- a/core/dictionary.cpp +++ b/core/dictionary.cpp @@ -35,15 +35,14 @@ #include "core/variant.h" struct DictionaryPrivate { - SafeRefCount refcount; OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator> variant_map; }; void Dictionary::get_key_list(List<Variant> *p_keys) const { - - if (_p->variant_map.empty()) + if (_p->variant_map.empty()) { return; + } for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) { p_keys->push_back(E.key()); @@ -51,7 +50,6 @@ void Dictionary::get_key_list(List<Variant> *p_keys) const { } Variant Dictionary::get_key_at_index(int p_index) const { - int index = 0; for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) { if (index == p_index) { @@ -64,7 +62,6 @@ Variant Dictionary::get_key_at_index(int p_index) const { } Variant Dictionary::get_value_at_index(int p_index) const { - int index = 0; for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) { if (index == p_index) { @@ -77,38 +74,37 @@ Variant Dictionary::get_value_at_index(int p_index) const { } Variant &Dictionary::operator[](const Variant &p_key) { - return _p->variant_map[p_key]; } const Variant &Dictionary::operator[](const Variant &p_key) const { - return _p->variant_map[p_key]; } -const Variant *Dictionary::getptr(const Variant &p_key) const { +const Variant *Dictionary::getptr(const Variant &p_key) const { OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::ConstElement E = ((const OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator> *)&_p->variant_map)->find(p_key); - if (!E) + if (!E) { return nullptr; + } return &E.get(); } Variant *Dictionary::getptr(const Variant &p_key) { - OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.find(p_key); - if (!E) + if (!E) { return nullptr; + } return &E.get(); } Variant Dictionary::get_valid(const Variant &p_key) const { - OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::ConstElement E = ((const OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator> *)&_p->variant_map)->find(p_key); - if (!E) + if (!E) { return Variant(); + } return E.get(); } @@ -122,16 +118,14 @@ Variant Dictionary::get(const Variant &p_key, const Variant &p_default) const { } int Dictionary::size() const { - return _p->variant_map.size(); } -bool Dictionary::empty() const { +bool Dictionary::empty() const { return !_p->variant_map.size(); } bool Dictionary::has(const Variant &p_key) const { - return _p->variant_map.has(p_key); } @@ -145,51 +139,47 @@ bool Dictionary::has_all(const Array &p_keys) const { } bool Dictionary::erase(const Variant &p_key) { - return _p->variant_map.erase(p_key); } bool Dictionary::operator==(const Dictionary &p_dictionary) const { - return _p == p_dictionary._p; } bool Dictionary::operator!=(const Dictionary &p_dictionary) const { - return _p != p_dictionary._p; } void Dictionary::_ref(const Dictionary &p_from) const { - //make a copy first (thread safe) - if (!p_from._p->refcount.ref()) + if (!p_from._p->refcount.ref()) { return; // couldn't copy + } //if this is the same, unreference the other one if (p_from._p == _p) { _p->refcount.unref(); return; } - if (_p) + if (_p) { _unref(); + } _p = p_from._p; } void Dictionary::clear() { - _p->variant_map.clear(); } void Dictionary::_unref() const { - ERR_FAIL_COND(!_p); if (_p->refcount.unref()) { memdelete(_p); } _p = nullptr; } -uint32_t Dictionary::hash() const { +uint32_t Dictionary::hash() const { uint32_t h = hash_djb2_one_32(Variant::DICTIONARY); for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) { @@ -201,10 +191,10 @@ uint32_t Dictionary::hash() const { } Array Dictionary::keys() const { - Array varr; - if (_p->variant_map.empty()) + if (_p->variant_map.empty()) { return varr; + } varr.resize(size()); @@ -218,10 +208,10 @@ Array Dictionary::keys() const { } Array Dictionary::values() const { - Array varr; - if (_p->variant_map.empty()) + if (_p->variant_map.empty()) { return varr; + } varr.resize(size()); @@ -235,22 +225,22 @@ Array Dictionary::values() const { } const Variant *Dictionary::next(const Variant *p_key) const { - if (p_key == nullptr) { // caller wants to get the first element - if (_p->variant_map.front()) + if (_p->variant_map.front()) { return &_p->variant_map.front().key(); + } return nullptr; } OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.find(*p_key); - if (E && E.next()) + if (E && E.next()) { return &E.next().key(); + } return nullptr; } Dictionary Dictionary::duplicate(bool p_deep) const { - Dictionary n; for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) { @@ -261,7 +251,6 @@ Dictionary Dictionary::duplicate(bool p_deep) const { } void Dictionary::operator=(const Dictionary &p_dictionary) { - _ref(p_dictionary); } @@ -275,11 +264,10 @@ Dictionary::Dictionary(const Dictionary &p_from) { } Dictionary::Dictionary() { - _p = memnew(DictionaryPrivate); _p->refcount.init(); } -Dictionary::~Dictionary() { +Dictionary::~Dictionary() { _unref(); } |