#pragma once #include #include #include #include #include #include #include #include template < typename Key, typename Hash = DefaultHash, typename Grower = HashTableGrower, typename Allocator = HashTableAllocator > class HashSet : public HashTable, Hash, Grower, Allocator> { public: typedef HashSet Self; typedef HashTableCell Cell; void merge(const Self & rhs) { if (!this->has_zero && rhs.has_zero) { this->has_zero = true; ++this->m_size; } for (size_t i = 0; i < rhs.grower.bufSize(); ++i) if (!rhs.buf[i].isZero()) this->insert(rhs.buf[i]); } void readAndMerge(DB::ReadBuffer & rb) { size_t new_size = 0; DB::readVarUInt(new_size, rb); this->resize(new_size); for (size_t i = 0; i < new_size; ++i) { Cell x; x.read(rb); this->insert(x); } } };