Field3D
|
#include <SparseFile.h>
Public Types | |
typedef Sparse::SparseBlock< Data_T > * | BlockPtrs |
typedef Reference * | Ptr |
Public Member Functions | |
float | averageLoads () const |
Returns the average number of loads per accessed block in this file, for cache statistics. | |
int | blockSize (int blockIdx) const |
Returns the number of bytes used by the data in the block. | |
void | closeFile () |
Closes the file. Will be re-opened as needed. | |
void | decBlockRef (int blockIdx) |
Decrement reference count on a block. | |
bool | fileIsOpen () |
Checks if the file used by this reference is open already. | |
void | incBlockRef (int blockIdx) |
Increment reference count on a block, indicates the block is currently in use, so prevents it from being unloaded. | |
void | loadBlock (int blockIdx) |
Loads the block with the given index into memory. We don't pass in a reference to where the data should go since this is already know in the blocks data member. | |
long long int | memSize () const |
Memory use for the Reference. | |
int | numLoadedBlocks () const |
Returns the total number of blocks that are currently loaded, for statistics. | |
void | openFile () |
Opens the file. This is done just before the first request to loadBlock. This is delayed so that the original file open has closed the file and doesn't cause any Hdf5 hiccups. | |
void | resetCacheStatistics () |
Resets counts of total block loads. | |
void | setNumBlocks (int numBlocks) |
Sets the number of blocks used by the SparseField we're supporting. | |
int | totalLoadedBlocks () const |
Returns the total number of blocks that were ever loaded (max 1 per block, not the number of blocks), for statistics. | |
int | totalLoads () const |
Returns the total number of loads of the blocks of this file, for cache statistics. | |
void | unloadBlock (int blockIdx) |
Unloads the block with the given index from memory. | |
~Reference () | |
Destructor. | |
Static Public Member Functions | |
static Ptr | create (const std::string a_filename, const std::string a_layerPath) |
Returns a shared pointer to a reference. Preferred way of creating References. | |
Public Attributes | |
std::vector< int > | blockLoaded |
Whether each block is loaded. We don't use bools since vector<bool> is weird. | |
boost::mutex * | blockMutex |
Allocated array of mutexes, one per block, to lock each block individually, for guaranteeing thread-safe updates of the ref counts. | |
int | blockMutexSize |
Size of the mutex array. Used as modulus base. | |
BlockPtrs | blocks |
Pointers to each block. This is so we can go in and manipulate them as we please. | |
std::vector< bool > | blockUsed |
Flags of whether the blocks have been accessed since they were last considered for deallocation by the Second-chance/Clock caching system. | |
std::vector< int > | fileBlockIndices |
Index in file for each block. | |
std::string | filename |
std::string | layerPath |
std::vector< int > | loadCounts |
Per-block counts of the number of times each block has been loaded, for cache statistics. | |
int | numBlocks |
int | numVoxels |
int | occupiedBlocks |
std::vector< int > | refCounts |
Per-block counts of the number of current references to the blocks. If a block's ref count is non-zero, then the block shouldn't be unloaded. | |
int | valuesPerBlock |
Private Types | |
typedef boost::mutex | Mutex |
Private Member Functions | |
Reference & | operator= (const Reference &o) |
Assignment operator. Clears ref counts and rebuilds mutex array. | |
Reference (const Reference &o) | |
Copy constructor. Clears ref counts and rebuilds mutex array. | |
Reference (const std::string filename, const std::string layerPath) | |
Constructor. Requires the filename and layer path of the field to be known. | |
Private Attributes | |
hid_t | m_fileHandle |
Holds the Hdf5 handle to the file. | |
Hdf5Util::H5ScopedGopen | m_layerGroup |
Hold the group containing the data open for the duration of the Reference's existence. | |
Mutex | m_mutex |
Mutex to prevent two threads from modifying conflicting data. | |
size_t | m_numActiveBlocks |
Number of currently active blocks. | |
IArchivePtr | m_ogArchive |
Ogawa archive. | |
OgIGroupPtr | m_ogLayerGroup |
Ogawa layer group. | |
OgSparseDataReader< Data_T > * | m_ogReader |
Pointer to the ogawa reader. NULL at construction time. Created in openFile(). | |
boost::shared_ptr< OgSparseDataReader< Data_T > > | m_ogReaderPtr |
Shared pointer to the ogawa reader. | |
OgIGroupPtr | m_ogRoot |
Ogawa archive root. | |
SparseDataReader< Data_T > * | m_reader |
Pointer to the reader object. NULL at construction time. Created in openFile(). | |
Handles information about and block loading for a single SparseField as referenced on disk
Definition at line 105 of file SparseFile.h.
typedef Reference* SparseFile::Reference< Data_T >::Ptr |
Definition at line 116 of file SparseFile.h.
typedef Sparse::SparseBlock<Data_T>* SparseFile::Reference< Data_T >::BlockPtrs |
Definition at line 120 of file SparseFile.h.
|
private |
Definition at line 215 of file SparseFile.h.
SparseFile::Reference< Data_T >::~Reference | ( | ) |
Destructor.
Definition at line 572 of file SparseFile.h.
|
private |
Constructor. Requires the filename and layer path of the field to be known.
Definition at line 559 of file SparseFile.h.
|
private |
Copy constructor. Clears ref counts and rebuilds mutex array.
Definition at line 587 of file SparseFile.h.
References FIELD3D_MTX_T.
|
static |
Returns a shared pointer to a reference. Preferred way of creating References.
Definition at line 660 of file SparseFile.h.
References FIELD3D_MTX_T.
bool SparseFile::Reference< Data_T >::fileIsOpen | ( | ) |
Checks if the file used by this reference is open already.
Definition at line 669 of file SparseFile.h.
void SparseFile::Reference< Data_T >::setNumBlocks | ( | int | numBlocks | ) |
Sets the number of blocks used by the SparseField we're supporting.
Definition at line 677 of file SparseFile.h.
References F3D_MUTEX_ARRAY_SIZE, and FIELD3D_MTX_T.
void SparseFile::Reference< Data_T >::openFile | ( | ) |
Opens the file. This is done just before the first request to loadBlock. This is delayed so that the original file open has closed the file and doesn't cause any Hdf5 hiccups.
Definition at line 537 of file SparseFile.cpp.
References FIELD3D_MTX_T, g_hdf5Mutex, Msg::print(), and Msg::SevWarning.
void SparseFile::Reference< Data_T >::closeFile | ( | ) |
Closes the file. Will be re-opened as needed.
Definition at line 710 of file SparseFile.h.
References FIELD3D_MTX_T, and Msg::print().
void SparseFile::Reference< Data_T >::loadBlock | ( | int | blockIdx | ) |
Loads the block with the given index into memory. We don't pass in a reference to where the data should go since this is already know in the blocks data member.
Definition at line 498 of file SparseFile.cpp.
References FIELD3D_MTX_T.
void SparseFile::Reference< Data_T >::unloadBlock | ( | int | blockIdx | ) |
Unloads the block with the given index from memory.
Definition at line 722 of file SparseFile.h.
void SparseFile::Reference< Data_T >::incBlockRef | ( | int | blockIdx | ) |
Increment reference count on a block, indicates the block is currently in use, so prevents it from being unloaded.
Definition at line 745 of file SparseFile.h.
void SparseFile::Reference< Data_T >::decBlockRef | ( | int | blockIdx | ) |
Decrement reference count on a block.
Definition at line 758 of file SparseFile.h.
int SparseFile::Reference< Data_T >::blockSize | ( | int | blockIdx | ) | const |
Returns the number of bytes used by the data in the block.
Definition at line 771 of file SparseFile.h.
int SparseFile::Reference< Data_T >::totalLoads | ( | ) | const |
Returns the total number of loads of the blocks of this file, for cache statistics.
Definition at line 779 of file SparseFile.h.
References FIELD3D_MTX_T.
int SparseFile::Reference< Data_T >::numLoadedBlocks | ( | ) | const |
Returns the total number of blocks that are currently loaded, for statistics.
Definition at line 793 of file SparseFile.h.
References FIELD3D_MTX_T.
int SparseFile::Reference< Data_T >::totalLoadedBlocks | ( | ) | const |
Returns the total number of blocks that were ever loaded (max 1 per block, not the number of blocks), for statistics.
Definition at line 808 of file SparseFile.h.
References FIELD3D_MTX_T.
float SparseFile::Reference< Data_T >::averageLoads | ( | ) | const |
Returns the average number of loads per accessed block in this file, for cache statistics.
Definition at line 833 of file SparseFile.h.
References FIELD3D_MTX_T.
void SparseFile::Reference< Data_T >::resetCacheStatistics | ( | ) |
Resets counts of total block loads.
Definition at line 851 of file SparseFile.h.
References FIELD3D_MTX_T.
long long int SparseFile::Reference< Data_T >::memSize | ( | ) | const |
Memory use for the Reference.
Definition at line 863 of file SparseFile.h.
References F3D_NO_BLOCKS_ARRAY, F3D_SHORT_MUTEX_ARRAY, and FIELD3D_MTX_T.
|
private |
Assignment operator. Clears ref counts and rebuilds mutex array.
Definition at line 600 of file SparseFile.h.
References F3D_MUTEX_ARRAY_SIZE, FIELD3D_MTX_T, and SparseFile::Reference< Data_T >::filename.
std::string SparseFile::Reference< Data_T >::filename |
Definition at line 127 of file SparseFile.h.
Referenced by SparseFile::Reference< Data_T >::operator=().
std::string SparseFile::Reference< Data_T >::layerPath |
Definition at line 128 of file SparseFile.h.
int SparseFile::Reference< Data_T >::valuesPerBlock |
Definition at line 129 of file SparseFile.h.
Referenced by SparseField< Data_T >::addReference().
int SparseFile::Reference< Data_T >::numVoxels |
Definition at line 130 of file SparseFile.h.
int SparseFile::Reference< Data_T >::numBlocks |
Definition at line 131 of file SparseFile.h.
int SparseFile::Reference< Data_T >::occupiedBlocks |
Definition at line 132 of file SparseFile.h.
std::vector<int> SparseFile::Reference< Data_T >::fileBlockIndices |
Index in file for each block.
Definition at line 135 of file SparseFile.h.
Referenced by SparseField< Data_T >::setupReferenceBlocks().
std::vector<int> SparseFile::Reference< Data_T >::blockLoaded |
Whether each block is loaded. We don't use bools since vector<bool> is weird.
Definition at line 138 of file SparseFile.h.
BlockPtrs SparseFile::Reference< Data_T >::blocks |
Pointers to each block. This is so we can go in and manipulate them as we please.
Definition at line 141 of file SparseFile.h.
Referenced by SparseField< Data_T >::setupReferenceBlocks().
std::vector<bool> SparseFile::Reference< Data_T >::blockUsed |
Flags of whether the blocks have been accessed since they were last considered for deallocation by the Second-chance/Clock caching system.
Definition at line 145 of file SparseFile.h.
std::vector<int> SparseFile::Reference< Data_T >::loadCounts |
Per-block counts of the number of times each block has been loaded, for cache statistics.
Definition at line 148 of file SparseFile.h.
std::vector<int> SparseFile::Reference< Data_T >::refCounts |
Per-block counts of the number of current references to the blocks. If a block's ref count is non-zero, then the block shouldn't be unloaded.
Definition at line 152 of file SparseFile.h.
boost::mutex* SparseFile::Reference< Data_T >::blockMutex |
Allocated array of mutexes, one per block, to lock each block individually, for guaranteeing thread-safe updates of the ref counts.
Definition at line 156 of file SparseFile.h.
int SparseFile::Reference< Data_T >::blockMutexSize |
Size of the mutex array. Used as modulus base.
Definition at line 159 of file SparseFile.h.
|
private |
Holds the Hdf5 handle to the file.
Definition at line 231 of file SparseFile.h.
|
private |
Hold the group containing the data open for the duration of the Reference's existence.
Definition at line 235 of file SparseFile.h.
|
private |
Pointer to the reader object. NULL at construction time. Created in openFile().
Definition at line 239 of file SparseFile.h.
|
private |
Shared pointer to the ogawa reader.
Definition at line 242 of file SparseFile.h.
|
private |
Pointer to the ogawa reader. NULL at construction time. Created in openFile().
Definition at line 245 of file SparseFile.h.
|
private |
Ogawa archive.
Definition at line 247 of file SparseFile.h.
|
private |
Ogawa archive root.
Definition at line 249 of file SparseFile.h.
|
private |
Ogawa layer group.
Definition at line 251 of file SparseFile.h.
|
mutableprivate |
Mutex to prevent two threads from modifying conflicting data.
Definition at line 254 of file SparseFile.h.
|
private |
Number of currently active blocks.
Definition at line 257 of file SparseFile.h.