TPIE

2362a60
tpie::file_base_crtp< child_t > Class Template Reference

Base class of classes that access files. More...

#include <tpie/file_base_crtp.h>

Inherited by tpie::file_stream_base.

Public Member Functions

bool is_readable () const throw ()
 Check if we can read from the file. More...
 
bool is_writable () const throw ()
 Check if we can write to the file. More...
 
memory_size_type block_items () const
 Get the number of items per block. More...
 
memory_size_type block_size () const
 Get the size of a block in bytes. More...
 
template<typename TT >
void read_user_data (TT &data) throw (stream_exception)
 Read the user data associated with the file. More...
 
memory_size_type read_user_data (void *data, memory_size_type count)
 Read variable length user data associated with the file. More...
 
template<typename TT >
void write_user_data (const TT &data) throw (stream_exception)
 Write user data to the stream. More...
 
void write_user_data (const void *data, memory_size_type count)
 Write variable length user data associated with the file. More...
 
memory_size_type user_data_size () const
 Get current user data size. More...
 
memory_size_type max_user_data_size () const
 Get maximum user data size. More...
 
const std::string & path () const throw ()
 The path of the file opened or the empty string. More...
 
void open (const std::string &path, access_type accessType=access_read_write, memory_size_type userDataSize=0, cache_hint cacheHint=access_sequential) throw (stream_exception)
 Open a file. More...
 
void open (memory_size_type userDataSize=0, cache_hint cacheHint=access_sequential) throw (stream_exception)
 Open an anonymous temporary file. More...
 
void open (temp_file &file, access_type accessType=access_read_write, memory_size_type userDataSize=0, cache_hint cacheHint=access_sequential) throw (stream_exception)
 Open a temporary file. More...
 
void close () throw (stream_exception)
 Close the file. More...
 
bool is_open () const
 Check if file is open. More...
 
stream_size_type file_size () const throw ()
 Get the size of the file measured in items. More...
 

Static Public Member Functions

static memory_size_type block_size (double blockFactor) throw ()
 Calculate the block size in bytes used by a stream. More...
 
static double calculate_block_factor (memory_size_type blockSize) throw ()
 Find the block factor that would result in the given block size measured in bytes. More...
 
static memory_size_type block_memory_usage (double blockFactor)
 Amount of memory used by a single block given the block factor. More...
 

Protected Member Functions

void open_inner (const std::string &path, access_type accessType, memory_size_type userDataSize, cache_hint cacheHint) throw (stream_exception)
 
 file_base_crtp (memory_size_type itemSize, double blockFactor, file_accessor::file_accessor *fileAccessor)
 
template<typename BT >
void read_block (BT &b, stream_size_type block)
 
void get_block_check (stream_size_type block)
 

Protected Attributes

memory_size_type m_blockItems
 
memory_size_type m_blockSize
 
bool m_canRead
 
bool m_canWrite
 
bool m_open
 
memory_size_type m_itemSize
 
file_accessor::file_accessorm_fileAccessor
 
tpie::unique_ptr< temp_filem_ownedTempFile
 
temp_filem_tempFile
 
stream_size_type m_size
 

Detailed Description

template<typename child_t>
class tpie::file_base_crtp< child_t >

Base class of classes that access files.

Inheriting classes may wish to override open_inner() and close(), e.g. to initialize and deinitialize block buffers. open_inner() in the inheriting class will not be called twice in a row without an intervening call to close(). The default implementation of open_inner() passes the open on to the file accessor and sets some attributes.

Definition at line 49 of file file_base_crtp.h.

Member Function Documentation

template<typename child_t>
memory_size_type tpie::file_base_crtp< child_t >::block_items ( ) const
inline

Get the number of items per block.

Definition at line 105 of file file_base_crtp.h.

105  {
106  return m_blockItems;
107  }
template<typename child_t>
static memory_size_type tpie::file_base_crtp< child_t >::block_memory_usage ( double  blockFactor)
inlinestatic

Amount of memory used by a single block given the block factor.

Definition at line 98 of file file_base_crtp.h.

Referenced by tpie::uncompressed_stream< T >::memory_usage().

98  {
99  return block_size(blockFactor);
100  }
memory_size_type block_size() const
Get the size of a block in bytes.
template<typename child_t>
static memory_size_type tpie::file_base_crtp< child_t >::block_size ( double  blockFactor)
throw (
)
inlinestatic

Calculate the block size in bytes used by a stream.

We have block_size(calculate_block_factor(b)) ~= b.

Parameters
blockFactorFactor of the global block size to use.
Returns
Size in bytes.

Definition at line 78 of file file_base_crtp.h.

78  {
79  return static_cast<memory_size_type>(get_block_size() * blockFactor);
80  }
memory_size_type get_block_size()
Get the TPIE block size.
template<typename child_t>
memory_size_type tpie::file_base_crtp< child_t >::block_size ( ) const
inline

Get the size of a block in bytes.

Definition at line 112 of file file_base_crtp.h.

Referenced by tpie::file_base_crtp< file_stream_base >::block_memory_usage(), and tpie::file_base_crtp< file_stream_base >::calculate_block_factor().

112  {
113  return m_blockSize;
114  }
template<typename child_t>
static double tpie::file_base_crtp< child_t >::calculate_block_factor ( memory_size_type  blockSize)
throw (
)
inlinestatic

Find the block factor that would result in the given block size measured in bytes.

We have calculate_block_factor(block_size(f)) ~= f.

Parameters
blockSizeThe sought block size.
Returns
The block factor needed to achieve this block size.

Definition at line 91 of file file_base_crtp.h.

91  {
92  return (double)blockSize / (double)block_size(1.0);
93  }
memory_size_type block_size() const
Get the size of a block in bytes.
template<typename child_t>
void tpie::file_base_crtp< child_t >::close ( )
throw (stream_exception
)
inline

Close the file.

Note all streams into the file must be freed before you call close.

Definition at line 246 of file file_base_crtp.h.

Referenced by tpie::file_base_crtp< file_stream_base >::open().

246  {
247  if (m_open) m_fileAccessor->close();
248  m_open = false;
249  m_tempFile = NULL;
250  m_ownedTempFile.reset();
251  }
template<typename child_t>
stream_size_type tpie::file_base_crtp< child_t >::file_size ( ) const
throw (
)
inline

Get the size of the file measured in items.

If there are streams of this file that have extended the stream length but have not yet flushed these writes, we might report an incorrect size.

Returns
The number of items in the file.

Definition at line 268 of file file_base_crtp.h.

268  {
269  return m_size;
270  }
template<typename child_t>
bool tpie::file_base_crtp< child_t >::is_open ( ) const
inline

Check if file is open.

Definition at line 256 of file file_base_crtp.h.

256  {
257  return m_open;
258  }
template<typename child_t>
bool tpie::file_base_crtp< child_t >::is_readable ( ) const
throw (
)
inline

Check if we can read from the file.

Returns
True if we can read from the file.

Definition at line 56 of file file_base_crtp.h.

56  {
57  return m_canRead;
58  }
template<typename child_t>
bool tpie::file_base_crtp< child_t >::is_writable ( ) const
throw (
)
inline

Check if we can write to the file.

Returns
True if we can write to the file.

Definition at line 65 of file file_base_crtp.h.

Referenced by tpie::uncompressed_stream< T >::write().

65  {
66  return m_canWrite;
67  }
template<typename child_t>
memory_size_type tpie::file_base_crtp< child_t >::max_user_data_size ( ) const
inline

Get maximum user data size.

Definition at line 183 of file file_base_crtp.h.

Referenced by tpie::file_base_crtp< file_stream_base >::write_user_data().

183  {
184  assert(m_open);
185  return m_fileAccessor->max_user_data_size();
186  }
memory_size_type max_user_data_size() const
Maximum size (in bytes) of the user data.
template<typename child_t>
void tpie::file_base_crtp< child_t >::open ( const std::string &  path,
access_type  accessType = access_read_write,
memory_size_type  userDataSize = 0,
cache_hint  cacheHint = access_sequential 
)
throw (stream_exception
)
inline

Open a file.

Parameters
pathThe path of the file to open.
accessTypeThe mode of operation.
userDataSizeThe size of the user data we want to store in the file.

Definition at line 207 of file file_base_crtp.h.

210  {
211  self().close();
212  self().open_inner(path, accessType, userDataSize, cacheHint);
213  }
const std::string & path() const
The path of the file opened or the empty string.
void close()
Close the file.
template<typename child_t>
void tpie::file_base_crtp< child_t >::open ( memory_size_type  userDataSize = 0,
cache_hint  cacheHint = access_sequential 
)
throw (stream_exception
)
inline

Open an anonymous temporary file.

The temporary file is deleted when this file is closed.

Definition at line 219 of file file_base_crtp.h.

220  {
221  self().close();
222  m_ownedTempFile.reset(tpie_new<temp_file>());
223  m_tempFile=m_ownedTempFile.get();
224  self().open_inner(m_tempFile->path(), access_read_write, userDataSize, cacheHint);
225  }
void close()
Close the file.
const std::string & path()
Get the path of the associated file.
Definition: tempname.h:244
Open a file for reading or writing.
Definition: access_type.h:35
template<typename child_t>
void tpie::file_base_crtp< child_t >::open ( temp_file file,
access_type  accessType = access_read_write,
memory_size_type  userDataSize = 0,
cache_hint  cacheHint = access_sequential 
)
throw (stream_exception
)
inline

Open a temporary file.

The temporary file is not deleted when this file is closed, so several tpie::file objects may use the same temporary file consecutively.

Definition at line 232 of file file_base_crtp.h.

235  {
236  self().close();
237  m_tempFile=&file;
238  self().open_inner(m_tempFile->path(), accessType, userDataSize, cacheHint);
239  }
void close()
Close the file.
const std::string & path()
Get the path of the associated file.
Definition: tempname.h:244
template<typename child_t>
const std::string& tpie::file_base_crtp< child_t >::path ( ) const
throw (
)
inline

The path of the file opened or the empty string.

Returns
The path of the currently opened file.

Definition at line 194 of file file_base_crtp.h.

Referenced by tpie::pipelining::serialization_bits::reverser_input_t< T >::begin(), and tpie::pipelining::serialization_bits::buffer_input_t< T >::begin().

194  {
195  assert(m_open);
196  return m_fileAccessor->path();
197  }
const std::string & path() const
Path of the file currently open.
template<typename child_t>
template<typename TT >
void tpie::file_base_crtp< child_t >::read_user_data ( TT &  data)
throw (stream_exception
)
inline

Read the user data associated with the file.

Parameters
dataWhere to store the user data.
Template Parameters
TTThe type of user data. sizeof(TT) must be less than or equal to the maximum user data size of the stream. TT must be trivially copyable.

Definition at line 125 of file file_base_crtp.h.

125  {
126  assert(m_open);
127  if (sizeof(TT) != user_data_size()) throw io_exception("Wrong user data size");
128  m_fileAccessor->read_user_data(reinterpret_cast<void*>(&data), sizeof(TT));
129  }
memory_size_type read_user_data(void *data, memory_size_type count)
Read user data into the given buffer.
memory_size_type user_data_size() const
Get current user data size.
template<typename child_t>
memory_size_type tpie::file_base_crtp< child_t >::read_user_data ( void *  data,
memory_size_type  count 
)
inline

Read variable length user data associated with the file.

Parameters
dataThe buffer in which to write data.
countThe size of the buffer.
Returns
Number of bytes of user data actually read.

Definition at line 138 of file file_base_crtp.h.

138  {
139  assert(m_open);
140  return m_fileAccessor->read_user_data(data, count);
141  }
memory_size_type read_user_data(void *data, memory_size_type count)
Read user data into the given buffer.
template<typename child_t>
memory_size_type tpie::file_base_crtp< child_t >::user_data_size ( ) const
inline

Get current user data size.

Definition at line 175 of file file_base_crtp.h.

Referenced by tpie::file_base_crtp< file_stream_base >::read_user_data().

175  {
176  assert(m_open);
177  return m_fileAccessor->user_data_size();
178  }
memory_size_type user_data_size() const
Size (in bytes) of the user data.
template<typename child_t>
template<typename TT >
void tpie::file_base_crtp< child_t >::write_user_data ( const TT &  data)
throw (stream_exception
)
inline

Write user data to the stream.

Parameters
dataThe user data to store in the stream.
Template Parameters
TTThe type of user data. sizeof(TT) must be less than or equal to the maximum user data size of the stream. TT must be trivially copyable.

Definition at line 152 of file file_base_crtp.h.

152  {
153  assert(m_open);
154  if (sizeof(TT) > max_user_data_size()) throw io_exception("Wrong user data size");
155  m_fileAccessor->write_user_data(reinterpret_cast<const void*>(&data), sizeof(TT));
156  }
void write_user_data(const void *data, memory_size_type count)
Write user data to the stream.
memory_size_type max_user_data_size() const
Get maximum user data size.
template<typename child_t>
void tpie::file_base_crtp< child_t >::write_user_data ( const void *  data,
memory_size_type  count 
)
inline

Write variable length user data associated with the file.

Throws a stream_exception if the size of the user data exceeds the maximum user data size of the stream.

Parameters
dataThe buffer from which to read data.
countThe size of the user data.

Definition at line 167 of file file_base_crtp.h.

167  {
168  assert(m_open);
169  m_fileAccessor->write_user_data(data, count);
170  }
void write_user_data(const void *data, memory_size_type count)
Write user data to the stream.

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