Zero  0.1.0
buffer_pool_pointer_swizzling.hpp
Go to the documentation of this file.
1 #ifndef __ZERO_BUFFER_POOL_POINTER_SWIZZLING_HPP
2 #define __ZERO_BUFFER_POOL_POINTER_SWIZZLING_HPP
3 
4 #include "basics.h"
5 #include "generic_page.h"
7 
8 namespace zero::buffer_pool {
9 
14  class NoSwizzling {
15  friend class BufferPool;
16 
17  public:
21  static constexpr bool usesPointerSwizzling = false;
22 
30  static bool isSwizzledPointer(const PageID pid) noexcept {
31  return false;
32  };
33 
43  static PageID makeSwizzledPointer(const bf_idx index) noexcept {
44  w_assert0(false);
45  };
46 
57  static bf_idx makeBufferIndex(const PageID pid) noexcept {
58  w_assert0(false);
59  };
60 
70  static void debugDumpPointer(std::ostream& o, PageID pid);
71 
72  private:
73  static bf_idx makeBufferIndexForFix(generic_page* parentPage, generic_page*& targetPage, PageID pid) {
74  w_assert0(false);
75  };
76  };
77 
83  friend class BufferPool;
84 
85  public:
89  static constexpr bool usesPointerSwizzling = true;
90 
98  static bool isSwizzledPointer(const PageID pid) noexcept {
99  return (pid & swizzledPIDBit) != 0;
100  };
101 
110  static PageID makeSwizzledPointer(const bf_idx index) noexcept {
111  return index | swizzledPIDBit;
112  };
113 
122  static bf_idx makeBufferIndex(const PageID pid) noexcept {
123  return pid & ~swizzledPIDBit;
124  };
125 
136  static void debugDumpPointer(std::ostream& o, PageID pid);
137 
138  private:
142  static constexpr PageID swizzledPIDBit = 0b10000000000000000000000000000000;
143  };
144 } // zero::buffer_pool
145 
146 #endif // __ZERO_BUFFER_POOL_POINTER_SWIZZLING_HPP
static bf_idx makeBufferIndex(const PageID pid) noexcept
Transforms a swizzled page ID to a buffer pool index.
Definition: buffer_pool_pointer_swizzling.hpp:57
static void debugDumpPointer(std::ostream &o, PageID pid)
Dumps the given page ID to an output stream.
Definition: buffer_pool_pointer_swizzling.cpp:8
Definition: buffer_pool.hpp:34
TODO.
Definition: buffer_pool_pointer_swizzling.hpp:14
A generic page view: any Zero page can be viewed as being of this type but it only exposes fields sha...
Definition: generic_page.h:121
uint32_t bf_idx
Definition: basics.h:56
static PageID makeSwizzledPointer(const bf_idx index) noexcept
Transforms a buffer pool index into a swizzled page ID.
Definition: buffer_pool_pointer_swizzling.hpp:43
uint32_t PageID
Definition: basics.h:45
static bf_idx makeBufferIndex(const PageID pid) noexcept
Transforms a swizzled page ID to a buffer pool index.
Definition: buffer_pool_pointer_swizzling.hpp:122
#define w_assert0(x)
Default assert/debug level is 0.
Definition: w_base.h:175
static bool isSwizzledPointer(const PageID pid) noexcept
Checks whether a page ID is a swizzled buffer index.
Definition: buffer_pool_pointer_swizzling.hpp:30
A buffer manager that exploits the tree structure of indexes.
Definition: buffer_pool.hpp:40
TODO.
Definition: buffer_pool_pointer_swizzling.hpp:82
static bool isSwizzledPointer(const PageID pid) noexcept
Checks whether a page ID is a swizzled buffer index.
Definition: buffer_pool_pointer_swizzling.hpp:98
static PageID makeSwizzledPointer(const bf_idx index) noexcept
Transforms a buffer pool index into a swizzled page ID.
Definition: buffer_pool_pointer_swizzling.hpp:110
static constexpr bool usesPointerSwizzling
TODO.
Definition: buffer_pool_pointer_swizzling.hpp:21
static bf_idx makeBufferIndexForFix(generic_page *parentPage, generic_page *&targetPage, PageID pid)
Definition: buffer_pool_pointer_swizzling.hpp:73