Field3D
|
#include <SparseFile.h>
Public Types | |
typedef std::vector < Sparse::SparseBlock< Data_T > * > | BlockPtrs |
Public Member Functions | |
float | averageLoads () const |
Returns the average number of loads per accessed block in this file, for cache statistics. More... | |
int | blockSize (int blockIdx) const |
Returns the number of bytes used by the data in the block. More... | |
void | decBlockRef (int blockIdx) |
Decrement reference count on a block. More... | |
bool | fileIsOpen () |
Checks if the file used by this reference is open already. More... | |
void | incBlockRef (int blockIdx) |
Increment reference count on a block, indicates the block is currently in use, so prevents it from being unloaded. More... | |
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. More... | |
int | numLoadedBlocks () const |
Returns the total number of blocks that are currently loaded, for statistics. More... | |
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. More... | |
Reference & | operator= (const Reference &o) |
Assignment operator. Clears ref counts and rebuilds mutex array. More... | |
Reference (const std::string filename, const std::string layerPath) | |
Constructor. Requires the filename and layer path of the field to be known. More... | |
Reference (const Reference &o) | |
Copy constructor. Clears ref counts and rebuilds mutex array. More... | |
void | resetCacheStatistics () |
Resets counts of total block loads. More... | |
void | setNumBlocks (int numBlocks) |
Sets the number of blocks used by the SparseField we're supporting. More... | |
int | totalLoadedBlocks () const |
Returns the total number of blocks that were ever loaded (max 1 per block, not the number of blocks), for statistics. More... | |
int | totalLoads () const |
Returns the total number of loads of the blocks of this file, for cache statistics. More... | |
void | unloadBlock (int blockIdx) |
Unloads the block with the given index from memory. More... | |
~Reference () | |
Public Attributes | |
std::vector< int > | blockLoaded |
Whether each block is loaded. We don't use bools since vector<bool> is weird. More... | |
boost::mutex * | blockMutex |
Allocated array of mutexes, one per block, to lock each block individually, for guaranteeing thread-safe updates of the ref counts. More... | |
BlockPtrs | blocks |
Pointers to each block. This is so we can go in and manipulate them as we please. More... | |
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. More... | |
std::vector< int > | fileBlockIndices |
Index in file for each block. More... | |
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. More... | |
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. More... | |
int | valuesPerBlock |
Private Attributes | |
hid_t | m_fileHandle |
Holds the Hdf5 handle to the file. More... | |
Hdf5Util::H5ScopedGopen | m_layerGroup |
Hold the group containing the data open for the duration of the Reference's existence. More... | |
boost::mutex | m_mutex |
Mutex to prevent two threads from modifying conflicting data. More... | |
SparseDataReader< Data_T > * | m_reader |
Pointer to the reader object. NULL at construction time. Created in openFile(). More... | |
Handles information about and block loading for a single SparseField as referenced on disk
Definition at line 95 of file SparseFile.h.
typedef std::vector<Sparse::SparseBlock<Data_T>*> SparseFile::Reference< Data_T >::BlockPtrs |
Definition at line 101 of file SparseFile.h.
SparseFile::Reference< Data_T >::Reference | ( | const std::string | filename, |
const std::string | layerPath | ||
) |
Constructor. Requires the filename and layer path of the field to be known.
Definition at line 475 of file SparseFile.h.
SparseFile::Reference< Data_T >::~Reference | ( | ) |
Definition at line 486 of file SparseFile.h.
SparseFile::Reference< Data_T >::Reference | ( | const Reference< Data_T > & | o) |
Copy constructor. Clears ref counts and rebuilds mutex array.
Definition at line 498 of file SparseFile.h.
Reference< Data_T > & SparseFile::Reference< Data_T >::operator= | ( | const Reference< Data_T > & | o) |
Assignment operator. Clears ref counts and rebuilds mutex array.
Definition at line 509 of file SparseFile.h.
References SparseFile::Reference< Data_T >::blockLoaded, SparseFile::Reference< Data_T >::blocks, SparseFile::Reference< Data_T >::blockUsed, SparseFile::Reference< Data_T >::fileBlockIndices, SparseFile::Reference< Data_T >::filename, SparseFile::Reference< Data_T >::layerPath, SparseFile::Reference< Data_T >::loadCounts, SparseFile::Reference< Data_T >::m_fileHandle, SparseFile::Reference< Data_T >::occupiedBlocks, SparseFile::Reference< Data_T >::refCounts, and SparseFile::Reference< Data_T >::valuesPerBlock.
bool SparseFile::Reference< Data_T >::fileIsOpen | ( | ) |
Checks if the file used by this reference is open already.
Definition at line 543 of file SparseFile.h.
Referenced by SparseFileManager::activateBlock().
void SparseFile::Reference< Data_T >::setNumBlocks | ( | int | numBlocks) |
Sets the number of blocks used by the SparseField we're supporting.
Definition at line 551 of file SparseFile.h.
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 569 of file SparseFile.h.
References Msg::print(), and Msg::SevWarning.
Referenced by SparseFileManager::activateBlock().
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 600 of file SparseFile.h.
Referenced by SparseFileManager::activateBlock().
void SparseFile::Reference< Data_T >::unloadBlock | ( | int | blockIdx) |
Unloads the block with the given index from memory.
Definition at line 617 of file SparseFile.h.
Referenced by SparseFileManager::deallocateBlock().
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 629 of file SparseFile.h.
Referenced by SparseFileManager::incBlockRef().
void SparseFile::Reference< Data_T >::decBlockRef | ( | int | blockIdx) |
Decrement reference count on a block.
Definition at line 638 of file SparseFile.h.
Referenced by SparseFileManager::decBlockRef().
int SparseFile::Reference< Data_T >::blockSize | ( | int | blockIdx) | const |
Returns the number of bytes used by the data in the block.
Definition at line 647 of file SparseFile.h.
Referenced by SparseFileManager::activateBlock(), SparseFileManager::deallocateBlock(), and SparseFileManager::removeFieldFromCache().
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 655 of file SparseFile.h.
int SparseFile::Reference< Data_T >::numLoadedBlocks | ( | ) | const |
Returns the total number of blocks that are currently loaded, for statistics.
Definition at line 669 of file SparseFile.h.
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 684 of file SparseFile.h.
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 709 of file SparseFile.h.
void SparseFile::Reference< Data_T >::resetCacheStatistics | ( | ) |
std::string SparseFile::Reference< Data_T >::filename |
Definition at line 105 of file SparseFile.h.
Referenced by SparseField< Data_T >::copySparseField(), and SparseFile::Reference< Data_T >::operator=().
std::string SparseFile::Reference< Data_T >::layerPath |
Definition at line 106 of file SparseFile.h.
Referenced by SparseField< Data_T >::copySparseField(), and SparseFile::Reference< Data_T >::operator=().
int SparseFile::Reference< Data_T >::valuesPerBlock |
Definition at line 107 of file SparseFile.h.
Referenced by SparseField< Data_T >::addReference(), SparseField< Data_T >::copySparseField(), and SparseFile::Reference< Data_T >::operator=().
int SparseFile::Reference< Data_T >::occupiedBlocks |
Definition at line 108 of file SparseFile.h.
Referenced by SparseField< Data_T >::copySparseField(), and SparseFile::Reference< Data_T >::operator=().
std::vector<int> SparseFile::Reference< Data_T >::fileBlockIndices |
Index in file for each block.
Definition at line 111 of file SparseFile.h.
Referenced by SparseFileManager::activateBlock(), SparseFileManager::decBlockRef(), SparseFileManager::incBlockRef(), SparseFile::Reference< Data_T >::operator=(), SparseFileManager::removeFieldFromCache(), and 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 114 of file SparseFile.h.
Referenced by SparseFileManager::activateBlock(), SparseFile::Reference< Data_T >::operator=(), and SparseFileManager::removeFieldFromCache().
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 117 of file SparseFile.h.
Referenced by SparseFile::Reference< Data_T >::operator=(), SparseFileManager::removeFieldFromCache(), and 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 121 of file SparseFile.h.
Referenced by SparseFileManager::activateBlock(), SparseFileManager::deallocateBlock(), SparseFile::Reference< Data_T >::operator=(), and SparseFileManager::removeFieldFromCache().
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 124 of file SparseFile.h.
Referenced by SparseFileManager::activateBlock(), and SparseFile::Reference< Data_T >::operator=().
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 128 of file SparseFile.h.
Referenced by SparseFileManager::deallocateBlock(), and SparseFile::Reference< Data_T >::operator=().
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 132 of file SparseFile.h.
Referenced by SparseFileManager::activateBlock(), and SparseFileManager::deallocateBlock().
|
private |
Holds the Hdf5 handle to the file.
Definition at line 187 of file SparseFile.h.
Referenced by SparseFile::Reference< Data_T >::operator=().
|
private |
Hold the group containing the data open for the duration of the Reference's existence.
Definition at line 191 of file SparseFile.h.
|
private |
Pointer to the reader object. NULL at construction time. Created in openFile().
Definition at line 195 of file SparseFile.h.
|
private |
Mutex to prevent two threads from modifying conflicting data.
Definition at line 198 of file SparseFile.h.