// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include "hash_set_insert.hpp" #include "hashtable.hpp" #include "identity.h" namespace vespalib { template hash_set::hash_set() : _ht(0) { } template hash_set::hash_set(size_t reserveSize) : _ht(reserveSize) { } template hash_set::hash_set(size_t reserveSize, const H &hasher, const EQ &equal) : _ht(reserveSize, hasher, equal) { } template hash_set::hash_set(std::initializer_list input) : _ht(0) { insert(input.begin(), input.end()); } template hash_set::~hash_set() = default; template bool hash_set::operator==(const hash_set &rhs) const { bool equal = (size() == rhs.size()); if (equal) { for (auto itr = begin(), endItr = end(); equal && itr != endItr; ++itr) { equal = (rhs.find(*itr) != rhs.end()); } } return equal; } template void hash_set::clear() { _ht.clear(); } template void hash_set::resize(size_t newSize) { _ht.resize(newSize); } template void hash_set::swap(hash_set &rhs) { _ht.swap(rhs._ht); } template size_t hash_set::getMemoryConsumption() const { return _ht.getMemoryConsumption(); } template void hash_set::erase(const K &key) { return _ht.erase(key); } template typename hash_set::insert_result hash_set::insert(const K & value) { return _ht.insert(value); } template typename hash_set::insert_result hash_set::insert(K &&value) { return _ht.insert(std::move(value)); } } #define VESPALIB_HASH_SET_INSTANTIATE(K) \ template class vespalib::hash_set; \ template class vespalib::hashtable, std::equal_to<>, vespalib::Identity, vespalib::hashtable_base::and_modulator>; #define VESPALIB_HASH_SET_INSTANTIATE_H(K, H) \ template class vespalib::hash_set; \ template class vespalib::hashtable, vespalib::Identity, vespalib::hashtable_base::and_modulator>;