Implements dynamically resizable prefetching pool. More...
#include <prefetch_pool.h>
Inherits noncopyable.
Public Types | |
typedef BlockType | block_type |
typedef block_type::bid_type | bid_type |
Public Member Functions | |
prefetch_pool (unsigned_type init_size=1) | |
Constructs pool. | |
void | swap (prefetch_pool &obj) |
virtual | ~prefetch_pool () |
Waits for completion of all ongoing read requests and frees memory. | |
unsigned_type | size () const |
Returns number of owned blocks. | |
bool | hint (bid_type bid) |
Gives a hint for prefetching a block. | |
bool | hint (bid_type bid, write_pool< block_type > &w_pool) |
bool | invalidate (bid_type bid) |
bool | in_prefetching (bid_type bid) |
request_ptr | read (block_type *&block, bid_type bid) |
Reads block. If this block is cached block is not read but passed from the cache. | |
request_ptr | read (block_type *&block, bid_type bid, write_pool< block_type > &w_pool) |
unsigned_type | resize (unsigned_type new_size) |
Resizes size of the pool. | |
Protected Types | |
typedef std::pair< block_type *, request_ptr > | busy_entry |
typedef compat_hash_map < bid_type, busy_entry, bid_hash >::result | hash_map_type |
typedef std::list< block_type * > ::iterator | free_blocks_iterator |
typedef hash_map_type::iterator | busy_blocks_iterator |
Protected Attributes | |
std::list< block_type * > | free_blocks |
hash_map_type | busy_blocks |
unsigned_type | free_blocks_size |
Implements dynamically resizable prefetching pool.
prefetch_pool< BlockType >::prefetch_pool | ( | unsigned_type | init_size = 1 |
) | [inline, explicit] |
Constructs pool.
init_size | initial number of blocks in the pool |
virtual prefetch_pool< BlockType >::~prefetch_pool | ( | ) | [inline, virtual] |
Waits for completion of all ongoing read requests and frees memory.
bool prefetch_pool< BlockType >::hint | ( | bid_type | bid | ) | [inline] |
Gives a hint for prefetching a block.
bid | address of a block to be prefetched |
true
if there was a free block to do prefetch and prefetching was scheduled, false
otherwise read
method) calling hint
function has no effect Referenced by read_write_pool< BlockType >::hint(), and read_write_pool< BlockType >::write().
request_ptr prefetch_pool< BlockType >::read | ( | block_type *& | block, | |
bid_type | bid | |||
) | [inline] |
Reads block. If this block is cached block is not read but passed from the cache.
block | block object, where data to be read to. If block was cached block 's ownership goes to the pool and block from cache is returned in block value. | |
bid | address of the block |
block
parameter must be allocated dynamically using new
. Referenced by read_write_pool< BlockType >::read().
unsigned_type prefetch_pool< BlockType >::resize | ( | unsigned_type | new_size | ) | [inline] |
Resizes size of the pool.
new_size | desired size of the pool. If some blocks are used for prefetching, these blocks can't be freed. Only free blocks (not in prefetching) can be freed by reducing the size of the pool calling this method. |
References prefetch_pool< BlockType >::size().
Referenced by read_write_pool< BlockType >::resize_prefetch().
unsigned_type prefetch_pool< BlockType >::size | ( | ) | const [inline] |
Returns number of owned blocks.
Referenced by prefetch_pool< BlockType >::resize(), and read_write_pool< BlockType >::size_prefetch().