Fairport
v1.0.38
|
An in memory representation of the "node" concept in a PST data file. More...
#include <node.h>
Public Types | |
typedef boost::transform_iterator < subnode_transform_info, const_subnodeinfo_iterator > | subnode_iterator |
A transform iterator, so we can expose the subnodes as a collection of nodes rather than subnode_info objects. | |
Public Member Functions | |
node (const shared_db_ptr &db, const node_info &info) | |
node (const node &container_node, const subnode_info &info) | |
Constructor for subnodes. | |
node (const std::tr1::shared_ptr< node_impl > &container_node, const subnode_info &info) | |
node (const node &other) | |
Copy construct this node. | |
node_id | get_id () const |
block_id | get_data_id () const |
block_id | get_sub_id () const |
node_id | get_parent_id () const |
bool | is_subnode () const |
std::tr1::shared_ptr< data_block > | get_data_block () const |
std::tr1::shared_ptr < subnode_block > | get_subnode_block () const |
shared_db_ptr | get_db () const |
size_t | read (std::vector< byte > &buffer, ulong offset) const |
template<typename T > | |
T | read (ulong offset) const |
size_t | read (std::vector< byte > &buffer, uint page_num, ulong offset) const |
template<typename T > | |
T | read (uint page_num, ulong offset) const |
node_stream_device | open_as_stream () |
Creates a stream device over this node. | |
size_t | size () const |
size_t | get_page_size (uint page_num) const |
uint | get_page_count () const |
const_subnodeinfo_iterator | subnode_info_begin () const |
const_subnodeinfo_iterator | subnode_info_end () const |
subnode_iterator | subnode_begin () const |
Returns a proxy iterator for the first subnode. | |
subnode_iterator | subnode_end () const |
Returns a proxy iterator positioned past the last subnode. | |
node | lookup (node_id id) const |
An in memory representation of the "node" concept in a PST data file.
A node is the primary abstraction exposed by the NDB Layer to the upper layers. It's purpose is to abstract away the details of working with immutable blocks and subnode blocks. It can therefor be thought of simply as a mutable stream of bytes and a collection of sub nodes, themselves a mutable stream of bytes potentially with another collection of subnodes, etc.
When using the node class, think of it as creating an in memory "instance" of the node on the disk. You can have several in memory instances of the same node on disk.
There isn't much interesting to do with a node, you can query its size, read from a specific location, get it's id and parent id, iterate over subnodes, etc. Most of the interesting things are done by higher level abstractions which are built on top of and know specifically how to interpret the bytes in a node - such as the heap, table, and property_bag.
typedef boost::transform_iterator<subnode_transform_info, const_subnodeinfo_iterator> fairport::node::subnode_iterator |
A transform iterator, so we can expose the subnodes as a collection of nodes rather than subnode_info objects.
fairport::node::node | ( | const shared_db_ptr & | db, |
const node_info & | info | ||
) | [inline] |
fairport::node::node | ( | const node & | container_node, |
const subnode_info & | info | ||
) | [inline] |
fairport::node::node | ( | const std::tr1::shared_ptr< node_impl > & | container_node, |
const subnode_info & | info | ||
) | [inline] |
fairport::node::node | ( | const node & | other | ) | [inline] |
std::tr1::shared_ptr<data_block> fairport::node::get_data_block | ( | ) | const [inline] |
block_id fairport::node::get_data_id | ( | ) | const [inline] |
shared_db_ptr fairport::node::get_db | ( | ) | const [inline] |
node_id fairport::node::get_id | ( | ) | const [inline] |
uint fairport::node::get_page_count | ( | ) | const [inline] |
size_t fairport::node::get_page_size | ( | uint | page_num | ) | const [inline] |
node_id fairport::node::get_parent_id | ( | ) | const [inline] |
block_id fairport::node::get_sub_id | ( | ) | const [inline] |
std::tr1::shared_ptr<subnode_block> fairport::node::get_subnode_block | ( | ) | const [inline] |
bool fairport::node::is_subnode | ( | ) | const [inline] |
node_stream_device fairport::node::open_as_stream | ( | ) | [inline] |
Creates a stream device over this node.
The returned stream device can be used to construct a proper stream:
node n; node_stream nstream(n.open_as_stream());
Which can then be used as any iostream would be.
Read data from this node.
Fills the specified buffer with data starting at the specified offset. The size of the buffer indicates how much data to read.
[in,out] | buffer | The buffer to fill |
[in] | offset | The location to read from |
T fairport::node::read | ( | ulong | offset | ) | const [inline] |
size_t fairport::node::read | ( | std::vector< byte > & | buffer, |
uint | page_num, | ||
ulong | offset | ||
) | const [inline] |
Read data from this node.
Fills the specified buffer with data on the specified page at the specified offset. The size of teh buffer indicates how much data to read.
[in,out] | buffer | The buffer to fill |
[in] | page_num | The page to read from |
[in] | offset | The location to read from |
Read data from a specific block on this node.
T | The type to read |
[in] | page_num | The block (ordinal) to read data from |
[in] | offset | The offset into that block to read from |
size_t fairport::node::size | ( | ) | const [inline] |
subnode_iterator fairport::node::subnode_begin | ( | ) | const [inline] |
Returns a proxy iterator for the first subnode.
This is known as a proxy iterator because the dereferenced type is of type node, not node& or const node&. This means the object is an rvalue, constructed specifically for the purpose of being returned from this iterator.
subnode_iterator fairport::node::subnode_end | ( | ) | const [inline] |
Returns a proxy iterator positioned past the last subnode.
This is known as a proxy iterator because the dereferenced type is of type node, not node& or const node&. This means the object is an rvalue, constructed specifically for the purpose of being returned from this iterator.
const_subnodeinfo_iterator fairport::node::subnode_info_begin | ( | ) | const [inline] |
const_subnodeinfo_iterator fairport::node::subnode_info_end | ( | ) | const [inline] |