diff options
author | orivej <orivej@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
commit | 2d37894b1b037cf24231090eda8589bbb44fb6fc (patch) | |
tree | be835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Foundation/include/Poco/HashMap.h | |
parent | 718c552901d703c502ccbefdfc3c9028d608b947 (diff) | |
download | ydb-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.h | 456 |
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 |