PST File Format SDK v0.4
Loading...
Searching...
No Matches
database_iface.h
Go to the documentation of this file.
1
8
9#ifndef PSTSDK_NDB_DATABASE_IFACE_H
10#define PSTSDK_NDB_DATABASE_IFACE_H
11
12#include <memory>
13
14#include "pstsdk/util/util.h"
16
17namespace pstsdk
18{
19
20class node;
21
34
43
53
62
63template<typename K, typename V>
64class bt_page;
67
68template<typename K, typename V>
69class bt_nonleaf_page;
72
73template<typename K, typename V>
74class bt_leaf_page;
77
78template<typename K, typename V>
80
82
87
88class block;
89class data_block;
90class extended_block;
91class external_block;
92class subnode_block;
95
96class db_context;
97
99
100typedef std::shared_ptr<db_context> shared_db_ptr;
101typedef std::weak_ptr<db_context> weak_db_ptr;
103
106
115class db_context : public std::enable_shared_from_this<db_context>
116{
117public:
118 virtual ~db_context() { }
119
121
122
126 virtual node lookup_node(node_id nid) = 0;
138
140
141
147 virtual std::shared_ptr<bbt_page> read_bbt_root() = 0;
154 virtual std::shared_ptr<nbt_page> read_nbt_root() = 0;
161 virtual std::shared_ptr<bbt_page> read_bbt_page(const page_info& pi) = 0;
169 virtual std::shared_ptr<nbt_page> read_nbt_page(const page_info& pi) = 0;
177 virtual std::shared_ptr<nbt_leaf_page> read_nbt_leaf_page(const page_info& pi) = 0;
185 virtual std::shared_ptr<bbt_leaf_page> read_bbt_leaf_page(const page_info& pi) = 0;
193 virtual std::shared_ptr<nbt_nonleaf_page> read_nbt_nonleaf_page(const page_info& pi) = 0;
201 virtual std::shared_ptr<bbt_nonleaf_page> read_bbt_nonleaf_page(const page_info& pi) = 0;
203
205
206
212 std::shared_ptr<block> read_block(block_id bid) { return read_block(shared_from_this(), bid); }
219 std::shared_ptr<data_block> read_data_block(block_id bid) { return read_data_block(shared_from_this(), bid); }
226 std::shared_ptr<extended_block> read_extended_block(block_id bid) { return read_extended_block(shared_from_this(), bid); }
233 std::shared_ptr<external_block> read_external_block(block_id bid) { return read_external_block(shared_from_this(), bid); }
240 std::shared_ptr<subnode_block> read_subnode_block(block_id bid) { return read_subnode_block(shared_from_this(), bid); }
247 std::shared_ptr<subnode_leaf_block> read_subnode_leaf_block(block_id bid) { return read_subnode_leaf_block(shared_from_this(), bid); }
254 std::shared_ptr<subnode_nonleaf_block> read_subnode_nonleaf_block(block_id bid) { return read_subnode_nonleaf_block(shared_from_this(), bid); }
262 virtual std::shared_ptr<block> read_block(const shared_db_ptr& parent, block_id bid) = 0;
270 virtual std::shared_ptr<data_block> read_data_block(const shared_db_ptr& parent, block_id bid) = 0;
278 virtual std::shared_ptr<extended_block> read_extended_block(const shared_db_ptr& parent, block_id bid) = 0;
286 virtual std::shared_ptr<external_block> read_external_block(const shared_db_ptr& parent, block_id bid) = 0;
294 virtual std::shared_ptr<subnode_block> read_subnode_block(const shared_db_ptr& parent, block_id bid) = 0;
302 virtual std::shared_ptr<subnode_leaf_block> read_subnode_leaf_block(const shared_db_ptr& parent, block_id bid) = 0;
310 virtual std::shared_ptr<subnode_nonleaf_block> read_subnode_nonleaf_block(const shared_db_ptr& parent, block_id bid) = 0;
311
318 std::shared_ptr<block> read_block(const block_info& bi) { return read_block(shared_from_this(), bi); }
325 std::shared_ptr<data_block> read_data_block(const block_info& bi) { return read_data_block(shared_from_this(), bi); }
332 std::shared_ptr<extended_block> read_extended_block(const block_info& bi) { return read_extended_block(shared_from_this(), bi); }
339 std::shared_ptr<external_block> read_external_block(const block_info& bi) { return read_external_block(shared_from_this(), bi); }
346 std::shared_ptr<subnode_block> read_subnode_block(const block_info& bi) { return read_subnode_block(shared_from_this(), bi); }
353 std::shared_ptr<subnode_leaf_block> read_subnode_leaf_block(const block_info& bi) { return read_subnode_leaf_block(shared_from_this(), bi); }
360 std::shared_ptr<subnode_nonleaf_block> read_subnode_nonleaf_block(const block_info& bi) { return read_subnode_nonleaf_block(shared_from_this(), bi); }
368 virtual std::shared_ptr<block> read_block(const shared_db_ptr& parent, const block_info& bi) = 0;
376 virtual std::shared_ptr<data_block> read_data_block(const shared_db_ptr& parent, const block_info& bi) = 0;
384 virtual std::shared_ptr<extended_block> read_extended_block(const shared_db_ptr& parent, const block_info& bi) = 0;
392 virtual std::shared_ptr<external_block> read_external_block(const shared_db_ptr& parent, const block_info& bi) = 0;
400 virtual std::shared_ptr<subnode_block> read_subnode_block(const shared_db_ptr& parent, const block_info& bi) = 0;
408 virtual std::shared_ptr<subnode_leaf_block> read_subnode_leaf_block(const shared_db_ptr& parent, const block_info& bi) = 0;
416 virtual std::shared_ptr<subnode_nonleaf_block> read_subnode_nonleaf_block(const shared_db_ptr& parent, const block_info& bi) = 0;
418
420 std::shared_ptr<external_block> create_external_block(size_t size) { return create_external_block(shared_from_this(), size); }
421 std::shared_ptr<extended_block> create_extended_block(std::shared_ptr<external_block>& pblock) { return create_extended_block(shared_from_this(), pblock); }
422 std::shared_ptr<extended_block> create_extended_block(std::shared_ptr<extended_block>& pblock) { return create_extended_block(shared_from_this(), pblock); }
423 std::shared_ptr<extended_block> create_extended_block(size_t size) { return create_extended_block(shared_from_this(), size); }
424 virtual std::shared_ptr<external_block> create_external_block(const shared_db_ptr& parent, size_t size) = 0;
425 virtual std::shared_ptr<extended_block> create_extended_block(const shared_db_ptr& parent, std::shared_ptr<external_block>& pblock) = 0;
426 virtual std::shared_ptr<extended_block> create_extended_block(const shared_db_ptr& parent, std::shared_ptr<extended_block>& pblock) = 0;
427 virtual std::shared_ptr<extended_block> create_extended_block(const shared_db_ptr& parent, size_t size) = 0;
428
429 // header functions
430 virtual block_id alloc_bid(bool is_internal) = 0;
432 // context support
433 //virtual shared_db_ptr create_context() = 0;
434 //virtual void save(const shared_db_ptr& ctx) = 0;
435};
436
437}
438
439#endif
440
The base class of the block class hierarchy.
Definition node.h:492
Contains the actual key value pairs of the btree.
Definition page.h:158
Contains references to other bt_pages.
Definition page.h:123
Contains references to other bth_node allocations.
Definition heap.h:364
The actual iterator type used by the btree_node class hierarchy.
Definition btree.h:229
A block which represents end user data.
Definition node.h:551
Database external interface.
virtual std::shared_ptr< nbt_leaf_page > read_nbt_leaf_page(const page_info &pi)=0
Open a NBT leaf page.
std::shared_ptr< subnode_nonleaf_block > read_subnode_nonleaf_block(block_id bid)
Open a subnode_nonleaf_block in this context.
virtual std::shared_ptr< block > read_block(const shared_db_ptr &parent, block_id bid)=0
Open a block in the specified context.
std::shared_ptr< block > read_block(const block_info &bi)
Open a block in this context.
virtual std::shared_ptr< external_block > read_external_block(const shared_db_ptr &parent, block_id bid)=0
Open a external_block in the specified context.
virtual std::shared_ptr< nbt_nonleaf_page > read_nbt_nonleaf_page(const page_info &pi)=0
Open a NBT nonleaf page.
virtual std::shared_ptr< subnode_block > read_subnode_block(const shared_db_ptr &parent, const block_info &bi)=0
Open a subnode_block in the specified context.
virtual std::shared_ptr< bbt_nonleaf_page > read_bbt_nonleaf_page(const page_info &pi)=0
Open a BBT nonleaf page.
std::shared_ptr< data_block > read_data_block(block_id bid)
Open a data_block in this context.
virtual node lookup_node(node_id nid)=0
Open a node.
virtual std::shared_ptr< bbt_leaf_page > read_bbt_leaf_page(const page_info &pi)=0
Open a BBT leaf page.
virtual std::shared_ptr< nbt_page > read_nbt_page(const page_info &pi)=0
Open a NBT page.
std::shared_ptr< subnode_nonleaf_block > read_subnode_nonleaf_block(const block_info &bi)
Open a subnode_nonleaf_block in this context.
std::shared_ptr< extended_block > read_extended_block(const block_info &bi)
Open a extended_block in this context.
virtual std::shared_ptr< bbt_page > read_bbt_root()=0
Get the root of the BBT of this context.
virtual std::shared_ptr< extended_block > read_extended_block(const shared_db_ptr &parent, block_id bid)=0
Open an extended_block in the specified context.
std::shared_ptr< external_block > read_external_block(const block_info &bi)
Open a block in this context.
std::shared_ptr< data_block > read_data_block(const block_info &bi)
Open a data_block in this context.
std::shared_ptr< extended_block > read_extended_block(block_id bid)
Open a extended_block in this context.
virtual std::shared_ptr< data_block > read_data_block(const shared_db_ptr &parent, block_id bid)=0
Open a data_block in the specified context.
virtual std::shared_ptr< external_block > read_external_block(const shared_db_ptr &parent, const block_info &bi)=0
Open a external_block in the specified context.
std::shared_ptr< subnode_leaf_block > read_subnode_leaf_block(block_id bid)
Open a subnode_leaf_block in this context.
virtual std::shared_ptr< subnode_leaf_block > read_subnode_leaf_block(const shared_db_ptr &parent, const block_info &bi)=0
Open a subnode_leaf_block in the specified context.
virtual std::shared_ptr< nbt_page > read_nbt_root()=0
Get the root of the NBT of this context.
virtual std::shared_ptr< subnode_block > read_subnode_block(const shared_db_ptr &parent, block_id bid)=0
Open a subnode_block in the specified context.
std::shared_ptr< block > read_block(block_id bid)
Open a block in this context.
virtual block_info lookup_block_info(block_id bid)=0
Lookup information about a block.
virtual node_info lookup_node_info(node_id nid)=0
Lookup information about a node.
std::shared_ptr< external_block > read_external_block(block_id bid)
Open a external_block in this context.
virtual std::shared_ptr< extended_block > read_extended_block(const shared_db_ptr &parent, const block_info &bi)=0
Open a extended_block in the specified context.
virtual std::shared_ptr< subnode_nonleaf_block > read_subnode_nonleaf_block(const shared_db_ptr &parent, block_id bid)=0
Open a subnode_nonleaf_block in the specified context.
virtual std::shared_ptr< block > read_block(const shared_db_ptr &parent, const block_info &bi)=0
Open a block in the specified context.
virtual std::shared_ptr< subnode_nonleaf_block > read_subnode_nonleaf_block(const shared_db_ptr &parent, const block_info &bi)=0
Open a subnode_nonleaf_block in the specified context.
std::shared_ptr< subnode_leaf_block > read_subnode_leaf_block(const block_info &bi)
Open a subnode_leaf_block in this context.
virtual std::shared_ptr< bbt_page > read_bbt_page(const page_info &pi)=0
Open a BBT page.
virtual std::shared_ptr< subnode_leaf_block > read_subnode_leaf_block(const shared_db_ptr &parent, block_id bid)=0
Open a subnode_leaf_block in the specified context.
virtual std::shared_ptr< data_block > read_data_block(const shared_db_ptr &parent, const block_info &bi)=0
Open a data_block in the specified context.
std::shared_ptr< subnode_block > read_subnode_block(const block_info &bi)
Open a subnode_block in this context.
std::shared_ptr< subnode_block > read_subnode_block(block_id bid)
Open a subnode_block in this context.
A data block which refers to other data blocks, in order to extend the physical size limit (8k) to a ...
Definition node.h:629
Contains actual data.
Definition node.h:708
An in memory representation of the "node" concept in a PST data file.
Definition node.h:320
A block which contains information about subnodes.
Definition node.h:767
Contains the actual subnode information.
Definition node.h:841
Contains references to subnode_leaf_blocks.
Definition node.h:804
boost::uint64_t ulonglong
Definition primitives.h:70
ulong node_id
Definition primitives.h:86
block_id page_id
Definition primitives.h:88
ulonglong block_id
Definition primitives.h:87
boost::uint16_t ushort
Definition primitives.h:73
Contains the definition of all in memory representations of disk structures.
Definition disk.h:19
bt_leaf_page< block_id, block_info > bbt_leaf_page
bt_page< node_id, node_info > nbt_page
std::weak_ptr< db_context > weak_db_ptr
bt_nonleaf_page< node_id, node_info > nbt_nonleaf_page
std::shared_ptr< db_context > shared_db_ptr
const_btree_node_iter< block_id, block_info > const_blockinfo_iterator
const_btree_node_iter< node_id, subnode_info > const_subnodeinfo_iterator
bt_page< block_id, block_info > bbt_page
bt_nonleaf_page< block_id, block_info > bbt_nonleaf_page
const_btree_node_iter< node_id, node_info > const_nodeinfo_iterator
bt_leaf_page< node_id, node_info > nbt_leaf_page
Primitive structures defined by MS-PST and MAPI.
An in memory, database format agnostic version of disk::bbt_leaf_entry.
An in memory, database format agnostic version of disk::nbt_leaf_entry.
An in memory, database format agnostic version of disk::block_reference used specifically for the pag...
An in memory, database format agnostic version of disk::sub_leaf_entry.
General utility functions and classes.