Thrill  0.1
swappable_block< ValueType, BlockSize > Class Template Reference

Detailed Description

template<typename ValueType, size_t BlockSize>
class foxxll::swappable_block< ValueType, BlockSize >

Virtualization of a block of data. Holds information for allocating and swapping. To use in cooperation with block_scheduler.

A swappable_block can be uninitialized, i.e. it holds no data. When access is required, is has to be acquired first, and released afterwards, so it can be swapped in and out as required. If the stored data is no longer needed, it can get uninitialized, freeing both internal and external memory.

Template Parameters
ValueTypetype of contained objects (POD with no references to internal memory).
BlockSizeNumber of objects in one block. BlockSize*sizeof(ValueType) must be divisible by 4096.

Definition at line 51 of file block_scheduler.hpp.

+ Collaboration diagram for swappable_block< ValueType, BlockSize >:

#include <block_scheduler.hpp>

Public Types

using external_block_type = typename internal_block_type::bid_type
 
using internal_block_type = typed_block< raw_block_size, ValueType >
 

Public Member Functions

 swappable_block ()
 Create in uninitialized state. More...
 
 ~swappable_block ()
 
internal_block_typeacquire ()
 
void attach_internal_block (internal_block_type *iblock)
 Attach an internal_block, making the block internal. Has to be not internal. More...
 
request_ptr clean_async (completion_handler on_cmpl=completion_handler())
 
void clean_sync ()
 Write synchronously from internal_block to external_block if necessary. More...
 
internal_block_typedeinitialize ()
 
internal_block_typedetach_internal_block ()
 
external_block_type extract_external_block ()
 
void fill_default ()
 Fill block with default data, is supposed to be overwritten by subclass. Has to be internal. More...
 
const internal_block_typeget_internal_block () const
 Get a reference to the data-block. Has to be acquired. More...
 
internal_block_typeget_internal_block ()
 Get a reference to the data-block. Has to be acquired. More...
 
bool has_external_block () const
 If it has an external_block. More...
 
void initialize (external_block_type eblock)
 
bool is_acquired () const
 If it is acquired. More...
 
bool is_dirty () const
 If the external_block does not hold valid data. More...
 
bool is_evictable () const
 If it holds an internal_block but does not need it. More...
 
bool is_external () const
 If it has an external_block that holds valid data. More...
 
bool is_initialized () const
 If it has some valid data (in- or external). More...
 
bool is_internal () const
 If it has an internal_block. The internal_block implicitly holds valid data. More...
 
bool make_dirty_if (const bool make_dirty)
 
request_ptr read_async (completion_handler on_cmpl=completion_handler())
 
void read_sync ()
 Read synchronously from external_block to internal_block. Has to be internal and have an external_block. More...
 
void release ()
 Release the block, i.e. subduct a reference. Has to be acquired. More...
 

Protected Member Functions

void free_external_block ()
 
void get_external_block ()
 

Protected Attributes

bool dirty
 
external_block_type external_data
 
internal_block_typeinternal_data
 external_data.valid if no associated space on disk More...
 
size_t reference_count
 

Static Protected Attributes

static size_t disk_allocation_offset = 0
 
static const size_t raw_block_size = BlockSize * sizeof(ValueType)
 

Static Private Attributes

static constexpr bool debug = false
 

Member Typedef Documentation

◆ external_block_type

Definition at line 60 of file block_scheduler.hpp.

◆ internal_block_type

Definition at line 59 of file block_scheduler.hpp.

Constructor & Destructor Documentation

◆ swappable_block()

swappable_block ( )
inline

Create in uninitialized state.

valid

Definition at line 81 of file block_scheduler.hpp.

◆ ~swappable_block()

~swappable_block ( )
inline

Definition at line 84 of file block_scheduler.hpp.

Member Function Documentation

◆ acquire()

internal_block_type& acquire ( )
inline

◆ attach_internal_block()

void attach_internal_block ( internal_block_type iblock)
inline

Attach an internal_block, making the block internal. Has to be not internal.

Definition at line 194 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::is_internal().

◆ clean_async()

request_ptr clean_async ( completion_handler  on_cmpl = completion_handler())
inline

Write asyncronusly from internal_block to external_block if necessary.

Returns
A request pointer to the I/O, an invalid request pointer if not necessary.

Definition at line 172 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::get_external_block(), swappable_block< ValueType, BlockSize >::has_external_block(), swappable_block< ValueType, BlockSize >::is_dirty(), TLX_LOG, and typed_block< RawSize, Type, NRef, MetaInfoType >::write().

Referenced by swappable_block< ValueType, BlockSize >::clean_sync().

◆ clean_sync()

void clean_sync ( )
inline

Write synchronously from internal_block to external_block if necessary.

Definition at line 186 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::clean_async(), and CountingPtr< Type, Deleter >::valid().

Referenced by swappable_block< ValueType, BlockSize >::detach_internal_block().

◆ deinitialize()

internal_block_type* deinitialize ( )
inline

Bring the block in uninitialized state, freeing external and internal memory. Returns a pointer to the internal_block, nullptr if it had none.

Returns
A pointer to the freed internal_block, nullptr if it had none.

Definition at line 214 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::free_external_block(), swappable_block< ValueType, BlockSize >::has_external_block(), swappable_block< ValueType, BlockSize >::internal_data, and swappable_block< ValueType, BlockSize >::is_acquired().

Referenced by block_scheduler< SwappableBlockType >::free_swappable_block(), and block_scheduler_algorithm< SwappableBlockType >::swappable_blocks_resize().

◆ detach_internal_block()

internal_block_type* detach_internal_block ( )
inline

Detach the internal_block. Writes to external_block if necessary. Has to be evictable.

Returns
A pointer to the internal_block.

Definition at line 202 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::clean_sync(), swappable_block< ValueType, BlockSize >::internal_data, and swappable_block< ValueType, BlockSize >::is_evictable().

Referenced by block_scheduler< SwappableBlockType >::flush().

◆ extract_external_block()

external_block_type extract_external_block ( )
inline

Extract the swappable_blocks data in an external_block. The block gets uninitialized.

Returns
The external_block that holds the swappable_block's data.

Definition at line 237 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::external_data, and swappable_block< ValueType, BlockSize >::is_internal().

Referenced by block_scheduler_algorithm< SwappableBlockType >::swappable_blocks_resize().

◆ fill_default()

void fill_default ( )
inline

Fill block with default data, is supposed to be overwritten by subclass. Has to be internal.

Definition at line 153 of file block_scheduler.hpp.

◆ free_external_block()

void free_external_block ( )
inlineprotected

◆ get_external_block()

void get_external_block ( )
inlineprotected

◆ get_internal_block() [1/2]

const internal_block_type& get_internal_block ( ) const
inline

Get a reference to the data-block. Has to be acquired.

Definition at line 139 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::internal_data, and swappable_block< ValueType, BlockSize >::is_acquired().

◆ get_internal_block() [2/2]

internal_block_type& get_internal_block ( )
inline

Get a reference to the data-block. Has to be acquired.

Definition at line 146 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::internal_data, and swappable_block< ValueType, BlockSize >::is_acquired().

◆ has_external_block()

◆ initialize()

void initialize ( external_block_type  eblock)
inline

Set the external_block that holds the swappable_block's data. The block gets initialized with it.

Parameters
eblockThe external_block holding initial data.

Definition at line 229 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::is_initialized().

Referenced by block_scheduler_algorithm< SwappableBlockType >::swappable_blocks_resize().

◆ is_acquired()

◆ is_dirty()

bool is_dirty ( ) const
inline

◆ is_evictable()

bool is_evictable ( ) const
inline

◆ is_external()

bool is_external ( ) const
inline

◆ is_initialized()

◆ is_internal()

◆ make_dirty_if()

bool make_dirty_if ( const bool  make_dirty)
inline

Invalidate external data if true.

Returns
is_dirty()

Definition at line 116 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::dirty, and swappable_block< ValueType, BlockSize >::is_acquired().

◆ read_async()

request_ptr read_async ( completion_handler  on_cmpl = completion_handler())
inline

Read asyncronusly from external_block to internal_block. Has to be internal and have an external_block.

Returns
A request pointer to the I/O.

Definition at line 157 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::has_external_block(), swappable_block< ValueType, BlockSize >::is_internal(), typed_block< RawSize, Type, NRef, MetaInfoType >::read(), and TLX_LOG.

Referenced by swappable_block< ValueType, BlockSize >::read_sync().

◆ read_sync()

void read_sync ( )
inline

Read synchronously from external_block to internal_block. Has to be internal and have an external_block.

Definition at line 167 of file block_scheduler.hpp.

References swappable_block< ValueType, BlockSize >::read_async().

◆ release()

void release ( )
inline

Member Data Documentation

◆ debug

constexpr bool debug = false
staticprivate

Definition at line 53 of file block_scheduler.hpp.

◆ dirty

◆ disk_allocation_offset

size_t disk_allocation_offset = 0
staticprotected

Definition at line 68 of file block_scheduler.hpp.

◆ external_data

external_block_type external_data
protected

◆ internal_data

◆ raw_block_size

const size_t raw_block_size = BlockSize * sizeof(ValueType)
staticprotected

Definition at line 56 of file block_scheduler.hpp.

◆ reference_count

size_t reference_count
protected

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