Zero  0.1.0
generic_page.h
Go to the documentation of this file.
1 /*
2  * (c) Copyright 2011-2013, Hewlett-Packard Development Company, LP
3  */
4 
5 #ifndef __GENERIC_PAGE_H
6 #define __GENERIC_PAGE_H
7 
8 #include <boost/static_assert.hpp>
9 
10 #include "basics.h"
11 #include "lsn.h"
12 #include "w_defines.h"
13 
35 public:
37  static const size_t page_sz = SM_PAGESIZE;
38 
48  mutable uint32_t checksum; // +4 -> 4
49 
51  PageID pid; // +4 -> 8
52 
54  lsn_t lsn; // +8 -> 16
55 
57  StoreID store; // +4 -> 20
58 
60  uint16_t tag; // +2 -> 22
61 
62 protected:
63  friend class fixable_page_h; // for access to page_flags&t_to_be_deleted
64 
66  uint16_t page_flags; // +2 -> 24
67 
69  uint64_t reserved; // +8 -> 32
70 
71 public:
73  uint32_t calculate_checksum() const;
74 
75 public:
76  friend std::ostream& operator<<(std::ostream&, generic_page_header&);
77 };
78 // verify compiler tightly packed all of generic_page_header's fields:
80 
81 
86 enum page_tag_t {
87  t_bad_p = 0,
88  t_alloc_p = 1,
89  t_stnode_p = 2,
90  t_btree_p = 5,
91 };
92 
98  // Flags used by fixable pages:
99  t_to_be_deleted = 0x01,
100 };
101 
122 private:
123  char subclass_specific[page_sz - sizeof(generic_page_header)];
124 };
125 
127 
136 public:
137  generic_page_h(generic_page* s) : _pp(s) {}
138 
139  virtual ~generic_page_h() {}
140 
143  return _pp;
144  }
145 
146  PageID pid() const {
147  return _pp->pid;
148  }
149 
150  StoreID store() const {
151  return _pp->store;
152  }
153 
154  page_tag_t tag() const {
155  return (page_tag_t)_pp->tag;
156  }
157 
158  const lsn_t& lsn() const {
159  return _pp->lsn;
160  }
161 
162 protected:
164  StoreID store)
165  : _pp(s) {
166  ::memset(_pp, 0, sizeof(*_pp));
167  _pp->pid = pid;
168  _pp->store = store;
169  _pp->tag = tag;
170  }
171 
174 };
175 
176 #endif // __GENERIC_PAGE_H
generic_page_h(generic_page *s, const PageID &pid, page_tag_t tag, StoreID store)
Definition: generic_page.h:163
Page handle class for any page type.
Definition: generic_page.h:135
uint64_t reserved
Reserved for subclass usage.
Definition: generic_page.h:69
PageID pid
ID of this page.
Definition: generic_page.h:51
not used
Definition: generic_page.h:87
uint32_t StoreID
Definition: basics.h:47
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
Page headers shared by all Zero pages.
Definition: generic_page.h:34
page_flag_t
Flags that can be turned on or off per page; held in generic_page_header::page_flags.
Definition: generic_page.h:97
lsn_t lsn
LSN (Log Sequence Number) of the last write to this page.
Definition: generic_page.h:54
StoreID store() const
Definition: generic_page.h:150
uint16_t tag
Page type (a page_tag_t)
Definition: generic_page.h:60
friend std::ostream & operator<<(std::ostream &, generic_page_header &)
Definition: generic_page.cpp:33
uint32_t PageID
Definition: basics.h:45
Log Sequence Number. See Log Sequence Numbers (LSN).
Definition: lsn.h:243
free-page allocation page
Definition: generic_page.h:88
Handle class for pages that may be fixed (i.e., paged in by the main buffer manager, zero::buffer_pool::BufferPool)
Definition: fixable_page_h.h:26
btree page
Definition: generic_page.h:90
StoreID store
ID of the store to which this page belongs (0 if none)
Definition: generic_page.h:57
uint32_t checksum
Stored checksum of this page.
Definition: generic_page.h:48
PageID pid() const
Definition: generic_page.h:146
uint32_t calculate_checksum() const
Calculate the correct value of checksum for this page.
Definition: generic_page.cpp:7
page_tag_t tag() const
Definition: generic_page.h:154
generic_page_h(generic_page *s)
Definition: generic_page.h:137
store node page
Definition: generic_page.h:89
this page will be deleted as soon as the page is evicted from bufferpool
Definition: generic_page.h:99
virtual ~generic_page_h()
Definition: generic_page.h:139
generic_page * get_generic_page() const
return pointer to underlying page
Definition: generic_page.h:142
static const size_t page_sz
Size of all Zero pages.
Definition: generic_page.h:37
generic_page * _pp
The actual page we are handling; may be NULL for fixable pages.
Definition: generic_page.h:173
BOOST_STATIC_ASSERT(sizeof(generic_page_header)==32)
const lsn_t & lsn() const
Definition: generic_page.h:158
page_tag_t
The type of a page; e.g., is this a B-tree page, an allocation page, or what?
Definition: generic_page.h:86
uint16_t page_flags
Page flags (an OR of page_flag_t&#39;s)
Definition: generic_page.h:66