diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-05-08 14:09:37 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-05-08 14:09:37 +0000 |
commit | 89e4b526a8a95017e1833d69da50908a84516636 (patch) | |
tree | a87a2905656053f31e4b58d4a04fdd2c949487d2 /searchlib | |
parent | adefed58438494c8dbd07542eaf6fdf900db74fa (diff) |
Instantiate templates in a common location, so that they get consistent visibility independent of optimization level.
Diffstat (limited to 'searchlib')
4 files changed, 196 insertions, 367 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.cpp b/searchlib/src/vespa/searchlib/attribute/enumstore.cpp index ef50a2c5327..6914376ae0a 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumstore.cpp +++ b/searchlib/src/vespa/searchlib/attribute/enumstore.cpp @@ -1,6 +1,5 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include "enumstore.h" #include "enumstore.hpp" #include <iomanip> @@ -146,210 +145,34 @@ EnumStoreT<StringEntryType>::deserialize(const void *src, ++_nextEnum; if (idx.valid()) { - assert(ComparatorType::compare(getValue(idx), - Entry(dst).getValue()) < 0); + assert(ComparatorType::compare(getValue(idx), Entry(dst).getValue()) < 0); } idx = newIdx; return sz; } -template -class btree::BTreeNodeDataWrap<btree::BTreeNoLeafData, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeNodeDataWrap<datastore::EntryRef, - EnumTreeTraits::LEAF_SLOTS>; - -#if 0 -template -class btree::BTreeKeyData<EnumStoreBase::Index, - btree::BTreeNoLeafData>; - -template -class btree::BTreeKeyData<EnumStoreBase::Index, - datastore::EntryRef>; -#endif - -template -class btree::BTreeNodeT<EnumStoreBase::Index, - EnumTreeTraits::INTERNAL_SLOTS>; - #if 0 template -class btree::BTreeNodeT<EnumStoreBase::Index, - EnumTreeTraits::LEAF_SLOTS>; -#endif +class btree::BTreeKeyData<EnumStoreBase::Index, btree::BTreeNoLeafData>; template -class btree::BTreeNodeTT<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS>; +class btree::BTreeKeyData<EnumStoreBase::Index, datastore::EntryRef>; template -class btree::BTreeNodeTT<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; +class btree::BTreeNodeT<EnumStoreBase::Index, EnumTreeTraits::LEAF_SLOTS>; -#if 0 template -class btree::BTreeNodeTT<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; +class btree::BTreeNodeTT<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; #endif template -class btree::BTreeInternalNode<EnumStoreBase::Index, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS>; - -template -class btree::BTreeLeafNode<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeLeafNode<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeLeafNodeTemp<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeLeafNodeTemp<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeNodeStore<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeNodeStore<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeIteratorBase<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS, - EnumTreeTraits::PATH_SIZE>; -template -class btree::BTreeIteratorBase<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS, - EnumTreeTraits::PATH_SIZE>; -template -class btree::BTreeIterator<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -template -class btree::BTreeIterator<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -template -class btree::BTree<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -template -class btree::BTree<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -template -class btree::BTreeRoot<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; - -template -class btree::BTreeRoot<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -template -class btree::BTreeRootT<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; - -template -class btree::BTreeRootT<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -template -class btree::BTreeRootBase<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeRootBase<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeNodeAllocator<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeNodeAllocator<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; - -template -class btree::BTreeBuilder<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; +class btree::BTreeBuilder<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; template -class btree::BTreeBuilder<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; +class btree::BTreeBuilder<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; template class EnumStoreT< StringEntryType >; template class EnumStoreT<NumericEntryType<int8_t> >; diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.h b/searchlib/src/vespa/searchlib/attribute/enumstore.h index 2539f2472e2..fd075504916 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumstore.h +++ b/searchlib/src/vespa/searchlib/attribute/enumstore.h @@ -258,197 +258,28 @@ template <> void EnumStoreT<StringEntryType>::printValue(vespalib::asciistream & os, Type value) const; -extern template -class btree::BTreeNodeDataWrap<btree::BTreeNoLeafData, - EnumTreeTraits::LEAF_SLOTS>; - -extern template -class btree::BTreeNodeDataWrap<datastore::EntryRef, - EnumTreeTraits::LEAF_SLOTS>; #if 0 extern template -class btree::BTreeKeyData<EnumStoreBase::Index, - btree::BTreeNoLeafData>; +class btree::BTreeKeyData<EnumStoreBase::Index, btree::BTreeNoLeafData>; extern template -class btree::BTreeKeyData<EnumStoreBase::Index, - datastore::EntryRef>; -#endif +class btree::BTreeKeyData<EnumStoreBase::Index, datastore::EntryRef>; extern template -class btree::BTreeNodeT<EnumStoreBase::Index, - EnumTreeTraits::INTERNAL_SLOTS>; +class btree::BTreeNodeT<EnumStoreBase::Index, EnumTreeTraits::LEAF_SLOTS>; -#if 0 extern template -class btree::BTreeNodeT<EnumStoreBase::Index, - EnumTreeTraits::LEAF_SLOTS>; +class btree::BTreeNodeTT<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; #endif -extern template -class btree::BTreeNodeTT<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS>; - -extern template -class btree::BTreeNodeTT<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; - -#if 0 -extern template -class btree::BTreeNodeTT<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; -#endif - -extern template -class btree::BTreeInternalNode<EnumStoreBase::Index, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS>; - -extern template -class btree::BTreeLeafNode<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; - -extern template -class btree::BTreeLeafNode<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; - -extern template -class btree::BTreeLeafNodeTemp<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; - -extern template -class btree::BTreeLeafNodeTemp<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::LEAF_SLOTS>; - -extern template -class btree::BTreeNodeStore<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; - -extern template -class btree::BTreeNodeStore<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; - -extern template -class btree::BTreeIteratorBase<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS, - EnumTreeTraits::PATH_SIZE>; -extern template -class btree::BTreeIteratorBase<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS, - EnumTreeTraits::PATH_SIZE>; -extern template -class btree::BTreeIterator<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -extern template -class btree::BTreeIterator<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -extern template -class btree::BTree<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -extern template -class btree::BTree<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -extern template -class btree::BTreeRoot<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -extern template -class btree::BTreeRoot<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -extern template -class btree::BTreeRootT<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -extern template -class btree::BTreeRootT<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - const EnumStoreComparatorWrapper, - EnumTreeTraits>; -extern template -class btree::BTreeRootBase<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; -extern template -class btree::BTreeRootBase<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; - -extern template -class btree::BTreeNodeAllocator<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; -extern template -class btree::BTreeNodeAllocator<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; extern template -class btree::BTreeBuilder<EnumStoreBase::Index, - btree::BTreeNoLeafData, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; +class btree::BTreeBuilder<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; extern template -class btree::BTreeBuilder<EnumStoreBase::Index, - datastore::EntryRef, - btree::NoAggregated, - EnumTreeTraits::INTERNAL_SLOTS, - EnumTreeTraits::LEAF_SLOTS>; +class btree::BTreeBuilder<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; extern template class EnumStoreT< StringEntryType >; extern template class EnumStoreT<NumericEntryType<int8_t> >; diff --git a/searchlib/src/vespa/searchlib/attribute/enumstorebase.cpp b/searchlib/src/vespa/searchlib/attribute/enumstorebase.cpp index 9b159fadd78..9f3e8bb73c7 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumstorebase.cpp +++ b/searchlib/src/vespa/searchlib/attribute/enumstorebase.cpp @@ -3,8 +3,11 @@ #include "enumstorebase.h" #include "enumstore.h" #include <vespa/searchlib/datastore/datastore.hpp> +#include <vespa/searchlib/btree/btree.hpp> #include <vespa/searchlib/btree/btreeiterator.hpp> #include <vespa/searchlib/btree/btreenode.hpp> +#include <vespa/searchlib/btree/btreenodeallocator.hpp> +#include <vespa/searchlib/btree/btreeroot.hpp> #include <vespa/searchlib/util/bufferwriter.h> #include <vespa/searchlib/common/rcuvector.hpp> #include <vespa/vespalib/util/exceptions.h> @@ -63,8 +66,7 @@ EnumStoreBase::EnumBufferType::calcArraysToAlloc(uint32_t bufferId, size_t sizeN return 0; } -EnumStoreBase::EnumStoreBase(uint64_t initBufferSize, - bool hasPostings) +EnumStoreBase::EnumStoreBase(uint64_t initBufferSize, bool hasPostings) : _enumDict(nullptr), _store(), _type(), @@ -634,6 +636,93 @@ namespace attribute { template class RcuVectorBase<EnumStoreIndex>; } +template +class btree::BTreeNodeT<EnumStoreBase::Index, EnumTreeTraits::INTERNAL_SLOTS>; + +template +class btree::BTreeNodeTT<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, EnumTreeTraits::INTERNAL_SLOTS>; + +template +class btree::BTreeNodeTT<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeInternalNode<EnumStoreBase::Index, btree::NoAggregated, EnumTreeTraits::INTERNAL_SLOTS>; + +template +class btree::BTreeLeafNode<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeLeafNode<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeLeafNodeTemp<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeLeafNodeTemp<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeNodeStore<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeNodeStore<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + + +template +class btree::BTreeRoot<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +template +class btree::BTreeRoot<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +template +class btree::BTreeRootT<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +template +class btree::BTreeRootT<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +template +class btree::BTreeRootBase<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeRootBase<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeNodeAllocator<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeNodeAllocator<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +template +class btree::BTreeIteratorBase<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS, EnumTreeTraits::PATH_SIZE>; +template +class btree::BTreeIteratorBase<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS, EnumTreeTraits::PATH_SIZE>; + +template +class btree::BTreeIterator<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; +template +class btree::BTreeIterator<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +template +class btree::BTree<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; +template +class btree::BTree<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + + } VESPALIB_HASH_MAP_INSTANTIATE_H_E_M(search::EnumStoreIndex, search::EnumStoreIndex, diff --git a/searchlib/src/vespa/searchlib/attribute/enumstorebase.h b/searchlib/src/vespa/searchlib/attribute/enumstorebase.h index 51503422335..c7bba5dd3c6 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumstorebase.h +++ b/searchlib/src/vespa/searchlib/attribute/enumstorebase.h @@ -392,7 +392,93 @@ public: } }; -extern template class -datastore::DataStoreT<datastore::AlignedEntryRefT<31, 4> >; +extern template +class datastore::DataStoreT<datastore::AlignedEntryRefT<31, 4> >; + +extern template +class btree::BTreeNodeT<EnumStoreBase::Index, EnumTreeTraits::INTERNAL_SLOTS>; + +extern template +class btree::BTreeNodeTT<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, EnumTreeTraits::INTERNAL_SLOTS>; + +extern template +class btree::BTreeNodeTT<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeInternalNode<EnumStoreBase::Index, btree::NoAggregated, EnumTreeTraits::INTERNAL_SLOTS>; + +extern template +class btree::BTreeLeafNode<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeLeafNode<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeLeafNodeTemp<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeLeafNodeTemp<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeNodeStore<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeNodeStore<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeRoot<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +extern template +class btree::BTreeRoot<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +extern template +class btree::BTreeRootT<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +extern template +class btree::BTreeRootT<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +extern template +class btree::BTreeRootBase<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeRootBase<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeNodeAllocator<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + +extern template +class btree::BTreeNodeAllocator<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS>; + + +extern template +class btree::BTreeIteratorBase<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS, EnumTreeTraits::PATH_SIZE>; +extern template +class btree::BTreeIteratorBase<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + EnumTreeTraits::INTERNAL_SLOTS, EnumTreeTraits::LEAF_SLOTS, EnumTreeTraits::PATH_SIZE>; + +extern template +class btree::BTreeIterator<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; +extern template +class btree::BTreeIterator<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; + +extern template +class btree::BTree<EnumStoreBase::Index, btree::BTreeNoLeafData, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; +extern template +class btree::BTree<EnumStoreBase::Index, datastore::EntryRef, btree::NoAggregated, + const EnumStoreComparatorWrapper, EnumTreeTraits>; } |