Fairport  v1.0.38
fairport::node Class Reference

An in memory representation of the "node" concept in a PST data file. More...

#include <node.h>

List of all members.

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_blockget_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 >
read (ulong offset) const
size_t read (std::vector< byte > &buffer, uint page_num, ulong offset) const
template<typename 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

Detailed Description

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.

See also:
[MS-PST] 2.2.1.1

Definition at line 296 of file node.h.


Member Typedef Documentation

A transform iterator, so we can expose the subnodes as a collection of nodes rather than subnode_info objects.

Definition at line 301 of file node.h.


Constructor & Destructor Documentation

fairport::node::node ( const shared_db_ptr db,
const node_info info 
) [inline]

Constructor for top level nodes.

This constructor is specific to nodes defined in the NBT

Parameters:
[in]dbThe database context we're located in
[in]infoInformation about this node

Definition at line 304 of file node.h.

fairport::node::node ( const node container_node,
const subnode_info info 
) [inline]

Constructor for subnodes.

This constructor is specific to nodes defined in other nodes

Parameters:
[in]container_nodeThe parent or containing node
[in]infoInformation about this node

Definition at line 312 of file node.h.

fairport::node::node ( const std::tr1::shared_ptr< node_impl > &  container_node,
const subnode_info info 
) [inline]

Constructor for subnodes.

This constructor is specific to nodes defined in other nodes

Parameters:
[in]container_nodeThe parent or containing node
[in]infoInformation about this node

Definition at line 315 of file node.h.

fairport::node::node ( const node other) [inline]

Copy construct this node.

This node will be an alias of the specified node. They will refer to the same in memory object - they share a node_impl instance.

Parameters:
[in]otherThe node to alias

Definition at line 323 of file node.h.


Member Function Documentation

std::tr1::shared_ptr<data_block> fairport::node::get_data_block ( ) const [inline]

Returns the data block associated with this node.

Returns:
A shared pointer to the data block

Definition at line 339 of file node.h.

block_id fairport::node::get_data_id ( ) const [inline]

Get the block_id of the data block of this node.

Returns:
The id

Definition at line 329 of file node.h.

shared_db_ptr fairport::node::get_db ( ) const [inline]

Returns the database containing this node.

Returns:
A shared pointer to the database

Definition at line 346 of file node.h.

node_id fairport::node::get_id ( ) const [inline]

Get the id of this node.

Returns:
The id

Definition at line 327 of file node.h.

uint fairport::node::get_page_count ( ) const [inline]

Returns the number of pages in this node.

Note:
In this context, a "page" is an external block
Returns:
The number of pages

Definition at line 379 of file node.h.

size_t fairport::node::get_page_size ( uint  page_num) const [inline]

Returns the size of a page in this node.

Note:
In this context, a "page" is an external block
Parameters:
[in]page_numThe page to get the size of
Returns:
The size of the page

Definition at line 376 of file node.h.

node_id fairport::node::get_parent_id ( ) const [inline]

Get the parent id.

The parent id here is the field in the NBT. It is not the id of the container node, if any. Generally the parent id of a message will be a folder, etc.

Returns:
The id, zero if this is a subnode

Definition at line 334 of file node.h.

block_id fairport::node::get_sub_id ( ) const [inline]

Get the block_id of the subnode block of this node.

Returns:
The id

Definition at line 331 of file node.h.

std::tr1::shared_ptr<subnode_block> fairport::node::get_subnode_block ( ) const [inline]

Returns the subnode block associated with this node.

Returns:
A shared pointer to the subnode block

Definition at line 342 of file node.h.

bool fairport::node::is_subnode ( ) const [inline]

Tells you if this is a subnode.

Returns:
true if this is a subnode, false otherwise

Definition at line 336 of file node.h.

node fairport::node::lookup ( node_id  id) const [inline]

Lookup a subnode by node id.

Exceptions:
key_not_found<node_id>if a subnode with the specified node_id was not found
Parameters:
[in]idThe subnode id to find
Returns:
The subnode

Definition at line 410 of file node.h.

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.

Returns:
A node stream device for this node

Definition at line 370 of file node.h.

size_t fairport::node::read ( std::vector< byte > &  buffer,
ulong  offset 
) const [inline]

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.

Parameters:
[in,out]bufferThe buffer to fill
[in]offsetThe location to read from
Returns:
The amount of data read

Definition at line 349 of file node.h.

template<typename T >
T fairport::node::read ( ulong  offset) const [inline]

Read data from this node.

Returns a "T" located as the specified offset

Template Parameters:
TThe type to read
Parameters:
[in]offsetThe location to read from
Returns:
The type read

Definition at line 352 of file node.h.

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.

Note:
In this context, a "page" is an external block
Parameters:
[in,out]bufferThe buffer to fill
[in]page_numThe page to read from
[in]offsetThe location to read from
Returns:
The amount of data read

Definition at line 355 of file node.h.

template<typename T >
T fairport::node::read ( uint  page_num,
ulong  offset 
) const [inline]

Read data from a specific block on this node.

Note:
In this context, a "page" is an external block
Template Parameters:
TThe type to read
Parameters:
[in]page_numThe block (ordinal) to read data from
[in]offsetThe offset into that block to read from
Returns:
The type read

Definition at line 358 of file node.h.

size_t fairport::node::size ( ) const [inline]

Returns the size of this node.

Returns:
The node size

Definition at line 374 of file node.h.

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.

Returns:
The proxy iterator

Definition at line 396 of file node.h.

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.

Returns:
The proxy iterator

Definition at line 406 of file node.h.

const_subnodeinfo_iterator fairport::node::subnode_info_begin ( ) const [inline]

Returns an iterator positioned at first subnodeinfo.

Returns:
An iterator over subnodeinfos

Definition at line 383 of file node.h.

const_subnodeinfo_iterator fairport::node::subnode_info_end ( ) const [inline]

Returns an iterator positioned past the last subnodeinfo.

Returns:
An iterator over subnodeinfos

Definition at line 386 of file node.h.


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