Slick OrderBook 1.1.0
High-Performance C++23 OrderBook Library
Loading...
Searching...
No Matches
slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr > Class Template Reference

Intrusive doubly-linked list for zero-allocation order management. More...

#include <intrusive_list.hpp>

Inheritance diagram for slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >:
Collaboration diagram for slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >:

Classes

class  ConstIterator
 Const iterator. More...
 
class  ConstReverseIterator
 Const reverse iterator. More...
 
class  Iterator
 Forward iterator for intrusive list We store a pointer to the list's tail to handle decrement from end() More...
 
class  ReverseIterator
 Reverse iterator for intrusive list Cannot use std::reverse_iterator because end() (nullptr) cannot be decremented We store a pointer to the list's head to handle decrement from rend() More...
 

Public Types

using value_type = T
 
using pointer = T *
 
using const_pointer = const T *
 
using reference = T &
 
using const_reference = const T &
 
using size_type = std::size_t
 
using iterator = Iterator
 
using const_iterator = ConstIterator
 
using reverse_iterator = ReverseIterator
 
using const_reverse_iterator = ConstReverseIterator
 

Public Member Functions

constexpr IntrusiveList () noexcept
 Constructor.
 
 ~IntrusiveList () noexcept=default
 Destructor - does not delete elements (intrusive design)
 
 IntrusiveList (const IntrusiveList &)=delete
 
IntrusiveList & operator= (const IntrusiveList &)=delete
 
constexpr IntrusiveList (IntrusiveList &&other) noexcept
 
constexpr IntrusiveList & operator= (IntrusiveList &&other) noexcept
 
constexpr bool empty () const noexcept
 Check if list is empty.
 
constexpr size_type size () const noexcept
 Get number of elements.
 
constexpr pointer front () noexcept
 Get front element.
 
constexpr const_pointer front () const noexcept
 
constexpr pointer back () noexcept
 Get back element.
 
constexpr const_pointer back () const noexcept
 
constexpr void push_front (T *node) noexcept
 Add element to front (newest order, used for LIFO if needed)
 
constexpr void push_back (T *node) noexcept
 Add element to back (oldest order, FIFO time priority)
 
constexpr pointer pop_front () noexcept
 Remove front element.
 
constexpr pointer pop_back () noexcept
 Remove back element.
 
constexpr void erase (T *node) noexcept
 Remove specific element from list O(1) operation - no search required.
 
constexpr void insert_before (T *pos, T *node) noexcept
 Insert element before given position O(1) operation.
 
constexpr void insert_after (T *pos, T *node) noexcept
 Insert element after given position O(1) operation.
 
constexpr void clear () noexcept
 Clear list (does not delete elements)
 
constexpr iterator begin () noexcept
 Iterators.
 
constexpr const_iterator begin () const noexcept
 
constexpr const_iterator cbegin () const noexcept
 
constexpr iterator end () noexcept
 
constexpr const_iterator end () const noexcept
 
constexpr const_iterator cend () const noexcept
 
constexpr reverse_iterator rbegin () noexcept
 Reverse iterators.
 
constexpr const_reverse_iterator rbegin () const noexcept
 
constexpr const_reverse_iterator crbegin () const noexcept
 
constexpr reverse_iterator rend () noexcept
 
constexpr const_reverse_iterator rend () const noexcept
 
constexpr const_reverse_iterator crend () const noexcept
 

Detailed Description

template<typename T, T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
class slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >

Intrusive doubly-linked list for zero-allocation order management.

This list requires elements to have next and prev pointer members. Benefits:

  • Zero allocations for list operations (O(1) insert/remove)
  • Cache-friendly iteration (elements control their own layout)
  • Elements can only be in one list at a time (intrusive design)

Usage:

struct Order {
Order* next = nullptr;
Order* prev = nullptr;
// ... other fields
};
orders.push_back(&my_order);
Intrusive doubly-linked list for zero-allocation order management.
constexpr void push_back(T *node) noexcept
Add element to back (oldest order, FIFO time priority)
Order structure for Level 3 orderbook Uses intrusive list design for zero-allocation order queues at ...
Definition order.hpp:14
Template Parameters
TElement type (must have next/prev pointers)
NextPtrPointer-to-member for next pointer
PrevPtrPointer-to-member for prev pointer

Definition at line 39 of file intrusive_list.hpp.

Member Typedef Documentation

◆ const_iterator

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::const_iterator = ConstIterator

Definition at line 300 of file intrusive_list.hpp.

◆ const_pointer

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::const_pointer = const T*

Definition at line 43 of file intrusive_list.hpp.

◆ const_reference

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::const_reference = const T&

Definition at line 45 of file intrusive_list.hpp.

◆ const_reverse_iterator

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::const_reverse_iterator = ConstReverseIterator

Definition at line 302 of file intrusive_list.hpp.

◆ iterator

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::iterator = Iterator

Definition at line 299 of file intrusive_list.hpp.

◆ pointer

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::pointer = T*

Definition at line 42 of file intrusive_list.hpp.

◆ reference

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::reference = T&

Definition at line 44 of file intrusive_list.hpp.

◆ reverse_iterator

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::reverse_iterator = ReverseIterator

Definition at line 301 of file intrusive_list.hpp.

◆ size_type

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::size_type = std::size_t

Definition at line 46 of file intrusive_list.hpp.

◆ value_type

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
using slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::value_type = T

Definition at line 41 of file intrusive_list.hpp.

Constructor & Destructor Documentation

◆ IntrusiveList() [1/3]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::IntrusiveList ( )
inlineconstexprnoexcept

Constructor.

Definition at line 305 of file intrusive_list.hpp.

◆ ~IntrusiveList()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::~IntrusiveList ( )
defaultnoexcept

Destructor - does not delete elements (intrusive design)

◆ IntrusiveList() [2/3]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::IntrusiveList ( const IntrusiveList< T, NextPtr, PrevPtr > &  )
delete

◆ IntrusiveList() [3/3]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::IntrusiveList ( IntrusiveList< T, NextPtr, PrevPtr > &&  other)
inlineconstexprnoexcept

Definition at line 315 of file intrusive_list.hpp.

Member Function Documentation

◆ back() [1/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_pointer slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::back ( ) const
inlineconstexprnoexcept

Definition at line 358 of file intrusive_list.hpp.

◆ back() [2/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr pointer slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::back ( )
inlineconstexprnoexcept

Get back element.

Definition at line 354 of file intrusive_list.hpp.

◆ begin() [1/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::begin ( ) const
inlineconstexprnoexcept

Definition at line 536 of file intrusive_list.hpp.

◆ begin() [2/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::begin ( )
inlineconstexprnoexcept

Iterators.

Definition at line 532 of file intrusive_list.hpp.

Referenced by slick::orderbook::detail::PriceLevelL3::insertOrder().

◆ cbegin()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::cbegin ( ) const
inlineconstexprnoexcept

Definition at line 540 of file intrusive_list.hpp.

◆ cend()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::cend ( ) const
inlineconstexprnoexcept

Definition at line 552 of file intrusive_list.hpp.

◆ clear()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr void slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::clear ( )
inlineconstexprnoexcept

Clear list (does not delete elements)

Definition at line 516 of file intrusive_list.hpp.

◆ crbegin()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_reverse_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::crbegin ( ) const
inlineconstexprnoexcept

Definition at line 565 of file intrusive_list.hpp.

◆ crend()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_reverse_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::crend ( ) const
inlineconstexprnoexcept

Definition at line 577 of file intrusive_list.hpp.

◆ empty()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr bool slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::empty ( ) const
inlineconstexprnoexcept

◆ end() [1/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::end ( ) const
inlineconstexprnoexcept

Definition at line 548 of file intrusive_list.hpp.

◆ end() [2/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::end ( )
inlineconstexprnoexcept

◆ erase()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr void slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::erase ( T *  node)
inlineconstexprnoexcept

Remove specific element from list O(1) operation - no search required.

Definition at line 438 of file intrusive_list.hpp.

Referenced by slick::orderbook::detail::PriceLevelL3::removeOrder().

◆ front() [1/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_pointer slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::front ( ) const
inlineconstexprnoexcept

Definition at line 349 of file intrusive_list.hpp.

◆ front() [2/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr pointer slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::front ( )
inlineconstexprnoexcept

◆ insert_after()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr void slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::insert_after ( T *  pos,
T *  node 
)
inlineconstexprnoexcept

Insert element after given position O(1) operation.

Definition at line 491 of file intrusive_list.hpp.

◆ insert_before()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr void slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::insert_before ( T *  pos,
T *  node 
)
inlineconstexprnoexcept

Insert element before given position O(1) operation.

Definition at line 465 of file intrusive_list.hpp.

Referenced by slick::orderbook::detail::PriceLevelL3::insertOrder().

◆ operator=() [1/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
IntrusiveList & slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::operator= ( const IntrusiveList< T, NextPtr, PrevPtr > &  )
delete

◆ operator=() [2/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr IntrusiveList & slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::operator= ( IntrusiveList< T, NextPtr, PrevPtr > &&  other)
inlineconstexprnoexcept

Definition at line 322 of file intrusive_list.hpp.

◆ pop_back()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr pointer slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::pop_back ( )
inlineconstexprnoexcept

Remove back element.

Definition at line 415 of file intrusive_list.hpp.

◆ pop_front()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr pointer slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::pop_front ( )
inlineconstexprnoexcept

Remove front element.

Definition at line 393 of file intrusive_list.hpp.

◆ push_back()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr void slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::push_back ( T *  node)
inlineconstexprnoexcept

Add element to back (oldest order, FIFO time priority)

Definition at line 378 of file intrusive_list.hpp.

Referenced by slick::orderbook::detail::PriceLevelL3::insertOrder().

◆ push_front()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr void slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::push_front ( T *  node)
inlineconstexprnoexcept

Add element to front (newest order, used for LIFO if needed)

Definition at line 363 of file intrusive_list.hpp.

◆ rbegin() [1/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_reverse_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::rbegin ( ) const
inlineconstexprnoexcept

Definition at line 561 of file intrusive_list.hpp.

◆ rbegin() [2/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr reverse_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::rbegin ( )
inlineconstexprnoexcept

Reverse iterators.

Definition at line 557 of file intrusive_list.hpp.

◆ rend() [1/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr const_reverse_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::rend ( ) const
inlineconstexprnoexcept

Definition at line 573 of file intrusive_list.hpp.

◆ rend() [2/2]

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr reverse_iterator slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::rend ( )
inlineconstexprnoexcept

Definition at line 569 of file intrusive_list.hpp.

◆ size()

template<typename T , T *T::* NextPtr = &T::next, T *T::* PrevPtr = &T::prev>
constexpr size_type slick::orderbook::detail::IntrusiveList< T, NextPtr, PrevPtr >::size ( ) const
inlineconstexprnoexcept

Get number of elements.

Definition at line 340 of file intrusive_list.hpp.

Referenced by slick::orderbook::detail::PriceLevelL3::orderCount().


The documentation for this class was generated from the following file: