diff options
author | victor-k <victor-k@yandex-team.ru> | 2022-02-10 16:50:38 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:50:38 +0300 |
commit | 17cbaf6d2b820cd304e92faa6ac2e6426605cae8 (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/containers | |
parent | f632afcab870d2327aaa8388ceeb7aeb2bb6a1c1 (diff) | |
download | ydb-17cbaf6d2b820cd304e92faa6ac2e6426605cae8.tar.gz |
Restoring authorship annotation for <victor-k@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/containers')
-rw-r--r-- | library/cpp/containers/comptrie/comptrie_builder.h | 14 | ||||
-rw-r--r-- | library/cpp/containers/comptrie/comptrie_builder.inl | 46 | ||||
-rw-r--r-- | library/cpp/containers/comptrie/comptrie_ut.cpp | 100 |
3 files changed, 80 insertions, 80 deletions
diff --git a/library/cpp/containers/comptrie/comptrie_builder.h b/library/cpp/containers/comptrie/comptrie_builder.h index 3a03ea08c44..cf7d2e39a34 100644 --- a/library/cpp/containers/comptrie/comptrie_builder.h +++ b/library/cpp/containers/comptrie/comptrie_builder.h @@ -34,9 +34,9 @@ inline TCompactTrieBuilderFlags& operator|=(TCompactTrieBuilderFlags& first, TCo return first = first | second; } -template <typename T> -class TArrayWithSizeHolder; - +template <typename T> +class TArrayWithSizeHolder; + template <class T = char, class D = ui64, class S = TCompactTriePacker<D>> class TCompactTrieBuilder { public: @@ -66,11 +66,11 @@ public: return AddSubtreeInFile(key.data(), key.size(), filename); } - bool AddSubtreeInBuffer(const TSymbol* key, size_t keylen, TArrayWithSizeHolder<char>&& buffer); - bool AddSubtreeInBuffer(const TKeyBuf& key, TArrayWithSizeHolder<char>&& buffer) { + bool AddSubtreeInBuffer(const TSymbol* key, size_t keylen, TArrayWithSizeHolder<char>&& buffer); + bool AddSubtreeInBuffer(const TKeyBuf& key, TArrayWithSizeHolder<char>&& buffer) { return AddSubtreeInBuffer(key.data(), key.size(), std::move(buffer)); - } - + } + bool Find(const TSymbol* key, size_t keylen, TData* value) const; bool Find(const TKeyBuf& key, TData* value = nullptr) const { return Find(key.data(), key.size(), value); diff --git a/library/cpp/containers/comptrie/comptrie_builder.inl b/library/cpp/containers/comptrie/comptrie_builder.inl index dd3bf83025b..f273fa65710 100644 --- a/library/cpp/containers/comptrie/comptrie_builder.inl +++ b/library/cpp/containers/comptrie/comptrie_builder.inl @@ -79,7 +79,7 @@ public: bool AddEntry(const TSymbol* key, size_t keylen, const TData& value); bool AddEntryPtr(const TSymbol* key, size_t keylen, const char* value); bool AddSubtreeInFile(const TSymbol* key, size_t keylen, const TString& fileName); - bool AddSubtreeInBuffer(const TSymbol* key, size_t keylen, TArrayWithSizeHolder<char>&& buffer); + bool AddSubtreeInBuffer(const TSymbol* key, size_t keylen, TArrayWithSizeHolder<char>&& buffer); bool FindEntry(const TSymbol* key, size_t keylen, TData* value) const; bool FindLongestPrefix(const TSymbol* key, size_t keylen, size_t* prefixlen, TData* value) const; @@ -441,11 +441,11 @@ bool TCompactTrieBuilder<T, D, S>::AddSubtreeInFile(const TSymbol* key, size_t k } template <class T, class D, class S> -bool TCompactTrieBuilder<T, D, S>::AddSubtreeInBuffer(const TSymbol* key, size_t keylen, TArrayWithSizeHolder<char>&& buffer) { - return Impl->AddSubtreeInBuffer(key, keylen, std::move(buffer)); -} - -template <class T, class D, class S> +bool TCompactTrieBuilder<T, D, S>::AddSubtreeInBuffer(const TSymbol* key, size_t keylen, TArrayWithSizeHolder<char>&& buffer) { + return Impl->AddSubtreeInBuffer(key, keylen, std::move(buffer)); +} + +template <class T, class D, class S> bool TCompactTrieBuilder<T, D, S>::Find(const TSymbol* key, size_t keylen, TData* value) const { return Impl->FindEntry(key, keylen, value); } @@ -580,23 +580,23 @@ bool TCompactTrieBuilder<T, D, S>::TCompactTrieBuilderImpl::AddSubtreeInFile( } template <class T, class D, class S> -bool TCompactTrieBuilder<T, D, S>::TCompactTrieBuilderImpl::AddSubtreeInBuffer( - const TSymbol* key, size_t keylen, TArrayWithSizeHolder<char>&& buffer) { - - typedef typename TNode::TBufferedSubtree TBufferedSubtree; - - bool isNewAddition = false; - TNode* node = AddEntryForSomething(key, keylen, isNewAddition); - node->Subtree()->Destroy(this); - node->Subtree()->~ISubtree(); - - auto subtree = new (node->Subtree()) TBufferedSubtree(); - subtree->Buffer.Swap(buffer); - - return isNewAddition; -} - -template <class T, class D, class S> +bool TCompactTrieBuilder<T, D, S>::TCompactTrieBuilderImpl::AddSubtreeInBuffer( + const TSymbol* key, size_t keylen, TArrayWithSizeHolder<char>&& buffer) { + + typedef typename TNode::TBufferedSubtree TBufferedSubtree; + + bool isNewAddition = false; + TNode* node = AddEntryForSomething(key, keylen, isNewAddition); + node->Subtree()->Destroy(this); + node->Subtree()->~ISubtree(); + + auto subtree = new (node->Subtree()) TBufferedSubtree(); + subtree->Buffer.Swap(buffer); + + return isNewAddition; +} + +template <class T, class D, class S> typename TCompactTrieBuilder<T, D, S>::TCompactTrieBuilderImpl::TNode* TCompactTrieBuilder<T, D, S>::TCompactTrieBuilderImpl::AddEntryForSomething( const TSymbol* key, size_t keylen, bool& isNewAddition) { diff --git a/library/cpp/containers/comptrie/comptrie_ut.cpp b/library/cpp/containers/comptrie/comptrie_ut.cpp index f159d91f5e0..74bee09b5d6 100644 --- a/library/cpp/containers/comptrie/comptrie_ut.cpp +++ b/library/cpp/containers/comptrie/comptrie_ut.cpp @@ -65,8 +65,8 @@ private: UNIT_TEST(TestFindTails); UNIT_TEST(TestPrefixGrouped); UNIT_TEST(CrashTestPrefixGrouped); - UNIT_TEST(TestMergeFromFile); - UNIT_TEST(TestMergeFromBuffer); + UNIT_TEST(TestMergeFromFile); + UNIT_TEST(TestMergeFromBuffer); UNIT_TEST(TestUnique); UNIT_TEST(TestAddRetValue); UNIT_TEST(TestClear); @@ -202,8 +202,8 @@ public: void TestFindTails(); void TestPrefixGrouped(); void CrashTestPrefixGrouped(); - void TestMergeFromFile(); - void TestMergeFromBuffer(); + void TestMergeFromFile(); + void TestMergeFromBuffer(); void TestUnique(); void TestAddRetValue(); void TestClear(); @@ -841,7 +841,7 @@ void TCompactTrieTest::CrashTestPrefixGrouped() { UNIT_ASSERT_C(wasException, "CrashTestPrefixGrouped"); } -void TCompactTrieTest::TestMergeFromFile() { +void TCompactTrieTest::TestMergeFromFile() { { TCompactTrieBuilder<> b; b.Add("yandex", 12); @@ -883,52 +883,52 @@ void TCompactTrieTest::TestMergeFromFile() { unlink((GetSystemTempDir() + "/TCompactTrieTest-TestMerge-ru").data()); } -void TCompactTrieTest::TestMergeFromBuffer() { - TArrayWithSizeHolder<char> buffer1; - { - TCompactTrieBuilder<> b; - b.Add("aaaaa", 1); - b.Add("bbbbb", 2); - b.Add("ccccc", 3); - buffer1.Resize(b.MeasureByteSize()); - TMemoryOutput out(buffer1.Get(), buffer1.Size()); - b.Save(out); - } - - TArrayWithSizeHolder<char> buffer2; - { - TCompactTrieBuilder<> b; - b.Add("aaaaa", 10); - b.Add("bbbbb", 20); - b.Add("ccccc", 30); - b.Add("xxxxx", 40); - b.Add("yyyyy", 50); - buffer2.Resize(b.MeasureByteSize()); - TMemoryOutput out(buffer2.Get(), buffer2.Size()); - b.Save(out); - } - - { - TCompactTrieBuilder<> b; - UNIT_ASSERT(b.AddSubtreeInBuffer("com.", std::move(buffer1))); - UNIT_ASSERT(b.Add("org.upyachka", 42)); - UNIT_ASSERT(b.AddSubtreeInBuffer("ru.", std::move(buffer2))); - TUnbufferedFileOutput out(GetSystemTempDir() + "/TCompactTrieTest-TestMergeFromBuffer-res"); - b.Save(out); - } - - TCompactTrie<> trie(TBlob::FromFileSingleThreaded(GetSystemTempDir() + "/TCompactTrieTest-TestMergeFromBuffer-res")); - UNIT_ASSERT_VALUES_EQUAL(10u, trie.Get("ru.aaaaa")); - UNIT_ASSERT_VALUES_EQUAL(20u, trie.Get("ru.bbbbb")); - UNIT_ASSERT_VALUES_EQUAL(40u, trie.Get("ru.xxxxx")); - UNIT_ASSERT_VALUES_EQUAL(42u, trie.Get("org.upyachka")); - UNIT_ASSERT_VALUES_EQUAL(1u, trie.Get("com.aaaaa")); - UNIT_ASSERT_VALUES_EQUAL(2u, trie.Get("com.bbbbb")); - UNIT_ASSERT_VALUES_EQUAL(3u, trie.Get("com.ccccc")); - +void TCompactTrieTest::TestMergeFromBuffer() { + TArrayWithSizeHolder<char> buffer1; + { + TCompactTrieBuilder<> b; + b.Add("aaaaa", 1); + b.Add("bbbbb", 2); + b.Add("ccccc", 3); + buffer1.Resize(b.MeasureByteSize()); + TMemoryOutput out(buffer1.Get(), buffer1.Size()); + b.Save(out); + } + + TArrayWithSizeHolder<char> buffer2; + { + TCompactTrieBuilder<> b; + b.Add("aaaaa", 10); + b.Add("bbbbb", 20); + b.Add("ccccc", 30); + b.Add("xxxxx", 40); + b.Add("yyyyy", 50); + buffer2.Resize(b.MeasureByteSize()); + TMemoryOutput out(buffer2.Get(), buffer2.Size()); + b.Save(out); + } + + { + TCompactTrieBuilder<> b; + UNIT_ASSERT(b.AddSubtreeInBuffer("com.", std::move(buffer1))); + UNIT_ASSERT(b.Add("org.upyachka", 42)); + UNIT_ASSERT(b.AddSubtreeInBuffer("ru.", std::move(buffer2))); + TUnbufferedFileOutput out(GetSystemTempDir() + "/TCompactTrieTest-TestMergeFromBuffer-res"); + b.Save(out); + } + + TCompactTrie<> trie(TBlob::FromFileSingleThreaded(GetSystemTempDir() + "/TCompactTrieTest-TestMergeFromBuffer-res")); + UNIT_ASSERT_VALUES_EQUAL(10u, trie.Get("ru.aaaaa")); + UNIT_ASSERT_VALUES_EQUAL(20u, trie.Get("ru.bbbbb")); + UNIT_ASSERT_VALUES_EQUAL(40u, trie.Get("ru.xxxxx")); + UNIT_ASSERT_VALUES_EQUAL(42u, trie.Get("org.upyachka")); + UNIT_ASSERT_VALUES_EQUAL(1u, trie.Get("com.aaaaa")); + UNIT_ASSERT_VALUES_EQUAL(2u, trie.Get("com.bbbbb")); + UNIT_ASSERT_VALUES_EQUAL(3u, trie.Get("com.ccccc")); + unlink((GetSystemTempDir() + "/TCompactTrieTest-TestMergeFromBuffer-res").data()); -} - +} + void TCompactTrieTest::TestUnique() { TestUniqueImpl(false); TestUniqueImpl(true); |