Coverage Report

Created: 2025-11-15 07:36

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/duckdb/third_party/skiplist/NodeRefs.h
Line
Count
Source
1
//
2
//  NodeRefs.h
3
//  SkipList
4
//
5
//  Created by Paul Ross on 03/12/2015.
6
//  Copyright (c) 2017 Paul Ross. All rights reserved.
7
//
8
9
#ifndef SkipList_NodeRefs_h
10
#define SkipList_NodeRefs_h
11
12
#include "IntegrityEnums.h"
13
14
/// Forward reference
15
template<typename T, typename _Compare>
16
class Node;
17
18
/**
19
 * @brief A PoD struct that contains a pointer to a Node and a width that represents the coarser linked list span to the
20
 * next Node.
21
 *
22
 * @tparam T The type of the Skip List Node values.
23
 * @tparam _Compare A comparison function for type T.
24
 */
25
template<typename T, typename _Compare=std::less<T> >
26
struct NodeRef {
27
    Node<T, _Compare> *pNode;
28
    size_t width;
29
};
30
31
/******************** SwappableNodeRefStack **********************/
32
33
/**
34
 * @brief Class that represents a stack of references to other nodes.
35
 *
36
 * Each reference is a NodeRef so a pointer to a Node and a width.
37
 * This just does simple bookkeeping on this stack.
38
 *
39
 * It also facilitates swapping references with another SwappableNodeRefStack when inserting or removing a Node.
40
 *
41
 * @tparam T The type of the Skip List Node values.
42
 * @tparam _Compare A comparison function for type T.
43
 */
44
template<typename T, typename _Compare>
45
class SwappableNodeRefStack {
46
public:
47
    /**
48
     * Constructor. Initialises the swap level to 0.
49
     */
50
0
    SwappableNodeRefStack() : _swapLevel(0) {}
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::SwappableNodeRefStack()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::SwappableNodeRefStack()
51
52
    // Const methods
53
    // -------------
54
    // Subscript read/write
55
    const NodeRef<T, _Compare> &operator[](size_t level) const;
56
57
    NodeRef<T, _Compare> &operator[](size_t level);
58
59
    /// Number of nodes referenced.
60
0
    size_t height() const {
61
0
        return _nodes.size();
62
0
    }
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::height() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::height() const
63
64
    /// The current swap level
65
0
    size_t swapLevel() const { return _swapLevel; }
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::swapLevel() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::swapLevel() const
66
67
    /// true if a swap can take place <tt>_swapLevel < height()</tt>
68
0
    bool canSwap() const { return _swapLevel < height(); }
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::canSwap() const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::canSwap() const
69
70
    // Returns true if there is no record of p in my data that
71
    // could lead to circular references
72
    bool noNodePointerMatches(const Node<T, _Compare> *p) const;
73
74
    // Returns true if all pointers in my data are equal to p.
75
    bool allNodePointerMatch(const Node<T, _Compare> *p) const;
76
77
    // Non-const methods
78
    // -----------------
79
    /// Add a new reference
80
0
    void push_back(Node<T, _Compare> *p, size_t w) {
81
0
        struct NodeRef<T, _Compare> val = {p, w};
82
0
        _nodes.push_back(val);
83
0
    }
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >*, unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::push_back(duckdb_skiplistlib::skip_list::Node<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >*, unsigned long)
84
85
    /// Remove top reference
86
0
    void pop_back() {
87
0
        _nodes.pop_back();
88
0
    }
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::pop_back()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::pop_back()
89
90
    // Swap reference at current swap level with another SwappableNodeRefStack
91
    void swap(SwappableNodeRefStack<T, _Compare> &val);
92
93
    /// Reset the swap level (for example before starting a remove).
94
0
    void resetSwapLevel() { _swapLevel = 0; }
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::resetSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::resetSwapLevel()
95
96
    /// Increment the swap level.
97
    /// This is used when removing nodes where the parent node can record to what level it has made its adjustments
98
    /// so the grand parent knows where to start.
99
    ///
100
    /// For this reason the _swapLevel can easily be <tt>>= _nodes.size()</tt>.
101
0
    void incSwapLevel() { ++_swapLevel; }
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::incSwapLevel()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::incSwapLevel()
102
103
    IntegrityCheck lacksIntegrity() const;
104
105
    // Returns an estimate of the memory usage of an instance
106
    size_t size_of() const;
107
108
  // Resets to the construction state
109
0
  void clear() { _swapLevel = 0; _nodes.clear(); }
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::clear()
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::clear()
110
111
protected:
112
    /// Stack of NodeRef node references.
113
    std::vector<struct NodeRef<T, _Compare> > _nodes;
114
    /// The current swap level.
115
    size_t _swapLevel;
116
117
private:
118
    /// Prevent cctor
119
    SwappableNodeRefStack(const SwappableNodeRefStack &that);
120
121
    /// Prevent operator=
122
    SwappableNodeRefStack &operator=(const SwappableNodeRefStack &that) const;
123
};
124
125
/**
126
 * The readable NodeRef at the given level.
127
 *
128
 * @tparam T The type of the Skip List Node values.
129
 * @tparam _Compare A comparison function for type T.
130
 * @param level The level.
131
 * @return A reference to the Node.
132
 */
133
template<typename T, typename _Compare>
134
0
const NodeRef<T, _Compare> &SwappableNodeRefStack<T, _Compare>::operator[](size_t level) const {
135
    // NOTE: No bounds checking on vector::operator[], so this assert will do
136
0
    assert(level < _nodes.size());
137
0
    return _nodes[level];
138
0
}
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::operator[](unsigned long) const
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::operator[](unsigned long) const
139
140
/**
141
 * The writeable NodeRef at the given level.
142
 *
143
 * @tparam T The type of the Skip List Node values.
144
 * @tparam _Compare A comparison function for type T.
145
 * @param level The level.
146
 * @return A reference to the Node.
147
 */
148
template<typename T, typename _Compare>
149
0
NodeRef<T, _Compare> &SwappableNodeRefStack<T, _Compare>::operator[](size_t level) {
150
    // NOTE: No bounds checking on vector::operator[], so this assert will do
151
0
    assert(level < _nodes.size());
152
0
    return _nodes[level];
153
0
}
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::operator[](unsigned long)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::operator[](unsigned long)
154
155
/**
156
 * Whether all node references are swapped.
157
 * Should be true after an insert operation.
158
 *
159
 * @tparam T The type of the Skip List Node values.
160
 * @tparam _Compare A comparison function for type T.
161
 * @param p The Node.
162
 * @return true if all the Node references are swapped (none are referring to the given Node).
163
 */
164
template<typename T, typename _Compare>
165
bool SwappableNodeRefStack<T, _Compare>::noNodePointerMatches(const Node<T, _Compare> *p) const {
166
    for (size_t level = height(); level-- > 0;) {
167
        if (p == _nodes[level].pNode) {
168
            return false;
169
        }
170
    }
171
    return true;
172
}
173
174
/**
175
 * Returns true if all pointers in my data are equal to p.
176
 * Should be true after a remove operation.
177
 *
178
 * @tparam T The type of the Skip List Node values.
179
 * @tparam _Compare A comparison function for type T.
180
 * @param p The Node.
181
 * @return true if all the Node references are un-swapped (all are referring to the given Node).
182
 */
183
template<typename T, typename _Compare>
184
bool SwappableNodeRefStack<T, _Compare>::allNodePointerMatch(const Node<T, _Compare> *p) const {
185
    for (size_t level = height(); level-- > 0;) {
186
        if (p != _nodes[level].pNode) {
187
            return false;
188
        }
189
    }
190
    return true;
191
}
192
193
/**
194
 * Swap references with another SwappableNodeRefStack at the current swap level.
195
 * This also increments the swap level.
196
 *
197
 * @tparam T The type of the Skip List Node values.
198
 * @tparam _Compare A comparison function for type T.
199
 * @param val The SwappableNodeRefStack.
200
 */
201
template<typename T, typename _Compare>
202
0
void SwappableNodeRefStack<T, _Compare>::swap(SwappableNodeRefStack<T, _Compare> &val) {
203
    assert(_swapLevel < height());
204
0
    NodeRef<T, _Compare> temp = val[_swapLevel];
205
0
    val[_swapLevel] = _nodes[_swapLevel];
206
0
    _nodes[_swapLevel] = temp;
207
0
    ++_swapLevel;
208
0
}
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, float>, duckdb::SkipLess<std::__1::pair<unsigned long, float> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, double>, duckdb::SkipLess<std::__1::pair<unsigned long, double> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, short>, duckdb::SkipLess<std::__1::pair<unsigned long, short> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, int>, duckdb::SkipLess<std::__1::pair<unsigned long, int> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, long>, duckdb::SkipLess<std::__1::pair<unsigned long, long> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::hugeint_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::hugeint_t> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::date_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::date_t> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::timestamp_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::timestamp_t> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::dtime_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::dtime_t> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, signed char>, duckdb::SkipLess<std::__1::pair<unsigned long, signed char> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::interval_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::interval_t> > >&)
Unexecuted instantiation: duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >::swap(duckdb_skiplistlib::skip_list::SwappableNodeRefStack<std::__1::pair<unsigned long, duckdb::string_t>, duckdb::SkipLess<std::__1::pair<unsigned long, duckdb::string_t> > >&)
209
210
/**
211
 * This checks the internal consistency of the object. It returns
212
 * INTEGRITY_SUCCESS [0] if successful or non-zero on error.
213
 * The tests are:
214
 *
215
 * - Widths must all be >= 1
216
 * - Widths must be weakly increasing with increasing level
217
 *
218
 * @tparam T The type of the Skip List Node values.
219
 * @tparam _Compare A comparison function for type T.
220
 * @return An IntegrityCheck enum.
221
 */
222
template<typename T, typename _Compare>
223
IntegrityCheck SwappableNodeRefStack<T, _Compare>::lacksIntegrity() const {
224
    if (height()) {
225
        if (_nodes[0].width != 1) {
226
            return NODEREFS_WIDTH_ZERO_NOT_UNITY;
227
        }
228
        for (size_t level = 1; level < height(); ++level) {
229
            if (_nodes[level].width < _nodes[level - 1].width) {
230
                return NODEREFS_WIDTH_DECREASING;
231
            }
232
        }
233
    }
234
    return INTEGRITY_SUCCESS;
235
}
236
237
/**
238
 * Returns an estimate of the memory usage of an instance
239
 *
240
 * @tparam T The type of the Skip List Node values.
241
 * @tparam _Compare A comparison function for type T.
242
 * @return The memory estimate.
243
 */
244
template<typename T, typename _Compare>
245
size_t SwappableNodeRefStack<T, _Compare>::size_of() const {
246
    return sizeof(*this) + _nodes.capacity() * sizeof(struct NodeRef<T>);
247
}
248
249
/********************* END: SwappableNodeRefStack ****************************/
250
251
#endif // SkipList_NodeRefs_h