// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include "btreenode.h" #include "btreenodeallocator.h" #include "btreerootbase.h" #include "btreeaggregator.h" #include "noaggrcalc.h" #include "minmaxaggrcalc.h" #include "btreeiterator.h" namespace vespalib::btree { template , typename TraitsT = BTreeDefaultTraits, class AggrCalcT = NoAggrCalc> class BTreeInserter { public: using NodeAllocatorType = BTreeNodeAllocator; using Aggregator = BTreeAggregator; using Iterator = BTreeIterator; using InternalNodeType = BTreeInternalNode; using LeafNodeType = BTreeLeafNode; using KeyType = KeyT; using DataType = DataT; using InternalNodeTypeRefPair = typename InternalNodeType::RefPair; using LeafNodeTypeRefPair = typename LeafNodeType::RefPair; using Inserter = BTreeInserter; private: static void rebalanceLeafEntries(LeafNodeType *leafNode, Iterator &itr, AggrCalcT aggrCalc); public: static void insert(BTreeNode::Ref &root, Iterator &itr, const KeyType &key, const DataType &data, const AggrCalcT &aggrCalc); }; extern template class BTreeInserter; extern template class BTreeInserter; extern template class BTreeInserter, BTreeDefaultTraits, MinMaxAggrCalc>; }