aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/include/Poco/HashMap.h
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:45:01 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:01 +0300
commit2d37894b1b037cf24231090eda8589bbb44fb6fc (patch)
treebe835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Foundation/include/Poco/HashMap.h
parent718c552901d703c502ccbefdfc3c9028d608b947 (diff)
downloadydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/HashMap.h')
-rw-r--r--contrib/libs/poco/Foundation/include/Poco/HashMap.h456
1 files changed, 228 insertions, 228 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/HashMap.h b/contrib/libs/poco/Foundation/include/Poco/HashMap.h
index 95b71ca6e0..5153f2b164 100644
--- a/contrib/libs/poco/Foundation/include/Poco/HashMap.h
+++ b/contrib/libs/poco/Foundation/include/Poco/HashMap.h
@@ -1,228 +1,228 @@
-//
-// HashMap.h
-//
-// Library: Foundation
-// Package: Hashing
-// Module: HashMap
-//
-// Definition of the HashMap class.
-//
-// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef Foundation_HashMap_INCLUDED
-#define Foundation_HashMap_INCLUDED
-
-
-#include "Poco/Foundation.h"
-#include "Poco/LinearHashTable.h"
-#include "Poco/Exception.h"
-#include <utility>
-
-
-namespace Poco {
-
-
-template <class Key, class Value>
-struct HashMapEntry
- /// This class template is used internally by HashMap.
-{
- Key first;
- Value second;
-
- HashMapEntry():
- first(),
- second()
- {
- }
-
- HashMapEntry(const Key& key):
- first(key),
- second()
- {
- }
-
- HashMapEntry(const Key& key, const Value& value):
- first(key),
- second(value)
- {
- }
-
- bool operator == (const HashMapEntry& entry) const
- {
- return first == entry.first;
- }
-
- bool operator != (const HashMapEntry& entry) const
- {
- return first != entry.first;
- }
-};
-
-
-template <class HME, class KeyHashFunc>
-struct HashMapEntryHash
- /// This class template is used internally by HashMap.
-{
- std::size_t operator () (const HME& entry) const
- {
- return _func(entry.first);
- }
-
-private:
- KeyHashFunc _func;
-};
-
-
-template <class Key, class Mapped, class HashFunc = Hash<Key> >
-class HashMap
- /// This class implements a map using a LinearHashTable.
- ///
- /// A HashMap can be used just like a std::map.
-{
-public:
- typedef Key KeyType;
- typedef Mapped MappedType;
- typedef Mapped& Reference;
- typedef const Mapped& ConstReference;
- typedef Mapped* Pointer;
- typedef const Mapped* ConstPointer;
-
- typedef HashMapEntry<Key, Mapped> ValueType;
- typedef std::pair<KeyType, MappedType> PairType;
-
- typedef HashMapEntryHash<ValueType, HashFunc> HashType;
- typedef LinearHashTable<ValueType, HashType> HashTable;
-
- typedef typename HashTable::Iterator Iterator;
- typedef typename HashTable::ConstIterator ConstIterator;
-
- HashMap()
- /// Creates an empty HashMap.
- {
- }
-
- HashMap(std::size_t initialReserve):
- _table(initialReserve)
- /// Creates the HashMap with room for initialReserve entries.
- {
- }
-
- HashMap& operator = (const HashMap& map)
- /// Assigns another HashMap.
- {
- HashMap tmp(map);
- swap(tmp);
- return *this;
- }
-
- void swap(HashMap& map)
- /// Swaps the HashMap with another one.
- {
- _table.swap(map._table);
- }
-
- ConstIterator begin() const
- {
- return _table.begin();
- }
-
- ConstIterator end() const
- {
- return _table.end();
- }
-
- Iterator begin()
- {
- return _table.begin();
- }
-
- Iterator end()
- {
- return _table.end();
- }
-
- ConstIterator find(const KeyType& key) const
- {
- ValueType value(key);
- return _table.find(value);
- }
-
- Iterator find(const KeyType& key)
- {
- ValueType value(key);
- return _table.find(value);
- }
-
- std::size_t count(const KeyType& key) const
- {
- ValueType value(key);
- return _table.find(value) != _table.end() ? 1 : 0;
- }
-
- std::pair<Iterator, bool> insert(const PairType& pair)
- {
- ValueType value(pair.first, pair.second);
- return _table.insert(value);
- }
-
- std::pair<Iterator, bool> insert(const ValueType& value)
- {
- return _table.insert(value);
- }
-
- void erase(Iterator it)
- {
- _table.erase(it);
- }
-
- void erase(const KeyType& key)
- {
- Iterator it = find(key);
- _table.erase(it);
- }
-
- void clear()
- {
- _table.clear();
- }
-
- std::size_t size() const
- {
- return _table.size();
- }
-
- bool empty() const
- {
- return _table.empty();
- }
-
- ConstReference operator [] (const KeyType& key) const
- {
- ConstIterator it = _table.find(key);
- if (it != _table.end())
- return it->second;
- else
- throw NotFoundException();
- }
-
- Reference operator [] (const KeyType& key)
- {
- ValueType value(key);
- std::pair<Iterator, bool> res = _table.insert(value);
- return res.first->second;
- }
-
-private:
- HashTable _table;
-};
-
-
-} // namespace Poco
-
-
-#endif // Foundation_HashMap_INCLUDED
+//
+// HashMap.h
+//
+// Library: Foundation
+// Package: Hashing
+// Module: HashMap
+//
+// Definition of the HashMap class.
+//
+// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef Foundation_HashMap_INCLUDED
+#define Foundation_HashMap_INCLUDED
+
+
+#include "Poco/Foundation.h"
+#include "Poco/LinearHashTable.h"
+#include "Poco/Exception.h"
+#include <utility>
+
+
+namespace Poco {
+
+
+template <class Key, class Value>
+struct HashMapEntry
+ /// This class template is used internally by HashMap.
+{
+ Key first;
+ Value second;
+
+ HashMapEntry():
+ first(),
+ second()
+ {
+ }
+
+ HashMapEntry(const Key& key):
+ first(key),
+ second()
+ {
+ }
+
+ HashMapEntry(const Key& key, const Value& value):
+ first(key),
+ second(value)
+ {
+ }
+
+ bool operator == (const HashMapEntry& entry) const
+ {
+ return first == entry.first;
+ }
+
+ bool operator != (const HashMapEntry& entry) const
+ {
+ return first != entry.first;
+ }
+};
+
+
+template <class HME, class KeyHashFunc>
+struct HashMapEntryHash
+ /// This class template is used internally by HashMap.
+{
+ std::size_t operator () (const HME& entry) const
+ {
+ return _func(entry.first);
+ }
+
+private:
+ KeyHashFunc _func;
+};
+
+
+template <class Key, class Mapped, class HashFunc = Hash<Key> >
+class HashMap
+ /// This class implements a map using a LinearHashTable.
+ ///
+ /// A HashMap can be used just like a std::map.
+{
+public:
+ typedef Key KeyType;
+ typedef Mapped MappedType;
+ typedef Mapped& Reference;
+ typedef const Mapped& ConstReference;
+ typedef Mapped* Pointer;
+ typedef const Mapped* ConstPointer;
+
+ typedef HashMapEntry<Key, Mapped> ValueType;
+ typedef std::pair<KeyType, MappedType> PairType;
+
+ typedef HashMapEntryHash<ValueType, HashFunc> HashType;
+ typedef LinearHashTable<ValueType, HashType> HashTable;
+
+ typedef typename HashTable::Iterator Iterator;
+ typedef typename HashTable::ConstIterator ConstIterator;
+
+ HashMap()
+ /// Creates an empty HashMap.
+ {
+ }
+
+ HashMap(std::size_t initialReserve):
+ _table(initialReserve)
+ /// Creates the HashMap with room for initialReserve entries.
+ {
+ }
+
+ HashMap& operator = (const HashMap& map)
+ /// Assigns another HashMap.
+ {
+ HashMap tmp(map);
+ swap(tmp);
+ return *this;
+ }
+
+ void swap(HashMap& map)
+ /// Swaps the HashMap with another one.
+ {
+ _table.swap(map._table);
+ }
+
+ ConstIterator begin() const
+ {
+ return _table.begin();
+ }
+
+ ConstIterator end() const
+ {
+ return _table.end();
+ }
+
+ Iterator begin()
+ {
+ return _table.begin();
+ }
+
+ Iterator end()
+ {
+ return _table.end();
+ }
+
+ ConstIterator find(const KeyType& key) const
+ {
+ ValueType value(key);
+ return _table.find(value);
+ }
+
+ Iterator find(const KeyType& key)
+ {
+ ValueType value(key);
+ return _table.find(value);
+ }
+
+ std::size_t count(const KeyType& key) const
+ {
+ ValueType value(key);
+ return _table.find(value) != _table.end() ? 1 : 0;
+ }
+
+ std::pair<Iterator, bool> insert(const PairType& pair)
+ {
+ ValueType value(pair.first, pair.second);
+ return _table.insert(value);
+ }
+
+ std::pair<Iterator, bool> insert(const ValueType& value)
+ {
+ return _table.insert(value);
+ }
+
+ void erase(Iterator it)
+ {
+ _table.erase(it);
+ }
+
+ void erase(const KeyType& key)
+ {
+ Iterator it = find(key);
+ _table.erase(it);
+ }
+
+ void clear()
+ {
+ _table.clear();
+ }
+
+ std::size_t size() const
+ {
+ return _table.size();
+ }
+
+ bool empty() const
+ {
+ return _table.empty();
+ }
+
+ ConstReference operator [] (const KeyType& key) const
+ {
+ ConstIterator it = _table.find(key);
+ if (it != _table.end())
+ return it->second;
+ else
+ throw NotFoundException();
+ }
+
+ Reference operator [] (const KeyType& key)
+ {
+ ValueType value(key);
+ std::pair<Iterator, bool> res = _table.insert(value);
+ return res.first->second;
+ }
+
+private:
+ HashTable _table;
+};
+
+
+} // namespace Poco
+
+
+#endif // Foundation_HashMap_INCLUDED