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. More... | |
int | blockSize (int blockIdx) const |
Returns the number of bytes used by the data in the block. More... | |
void | closeFile () |
Closes the file. Will be re-opened as needed. 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... | |
long long int | memSize () const |
Memory use for the Reference. 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... | |
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 () | |
Destructor. More... | |
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. More... | |
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... | |
int | blockMutexSize |
Size of the mutex array. Used as modulus base. 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 | 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. More... | |
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. More... | |
Reference (const Reference &o) | |
Copy constructor. 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... | |
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... | |
Mutex | m_mutex |
Mutex to prevent two threads from modifying conflicting data. More... | |
size_t | m_numActiveBlocks |
Number of currently active blocks. More... | |
IArchivePtr | m_ogArchive |
Ogawa archive. More... | |
OgIGroupPtr | m_ogLayerGroup |
Ogawa layer group. More... | |
OgSparseDataReader< Data_T > * | m_ogReader |
Pointer to the ogawa reader. NULL at construction time. Created in openFile(). More... | |
boost::shared_ptr< OgSparseDataReader< Data_T > > | m_ogReaderPtr |
Shared pointer to the ogawa reader. More... | |
OgIGroupPtr | m_ogRoot |
Ogawa archive root. 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 104 of file SparseFile.h.
typedef Reference* SparseFile::Reference< Data_T >::Ptr |
Definition at line 115 of file SparseFile.h.
typedef Sparse::SparseBlock<Data_T>* SparseFile::Reference< Data_T >::BlockPtrs |
Definition at line 119 of file SparseFile.h.
|
private |
Definition at line 214 of file SparseFile.h.
SparseFile::Reference< Data_T >::~Reference | ( | ) |
|
private |
Constructor. Requires the filename and layer path of the field to be known.
Definition at line 558 of file SparseFile.h.
|
private |
Copy constructor. Clears ref counts and rebuilds mutex array.
Definition at line 586 of file SparseFile.h.
|
static |
Returns a shared pointer to a reference. Preferred way of creating References.
Definition at line 659 of file SparseFile.h.
bool SparseFile::Reference< Data_T >::fileIsOpen | ( | ) |
Checks if the file used by this reference is open already.
Definition at line 668 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 676 of file SparseFile.h.
References F3D_MUTEX_ARRAY_SIZE, and detail::min().
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 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 709 of file SparseFile.h.
References 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.
void SparseFile::Reference< Data_T >::unloadBlock | ( | int | blockIdx | ) |
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 744 of file SparseFile.h.
void SparseFile::Reference< Data_T >::decBlockRef | ( | int | blockIdx | ) |
int SparseFile::Reference< Data_T >::blockSize | ( | int | blockIdx | ) | const |
Returns the number of bytes used by the data in the block.
Definition at line 770 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 778 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 792 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 807 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 832 of file SparseFile.h.
References detail::max().
void SparseFile::Reference< Data_T >::resetCacheStatistics | ( | ) |
long long int SparseFile::Reference< Data_T >::memSize | ( | ) | const |
Memory use for the Reference.
Definition at line 862 of file SparseFile.h.
References F3D_NO_BLOCKS_ARRAY, and F3D_SHORT_MUTEX_ARRAY.
|
private |
Assignment operator. Clears ref counts and rebuilds mutex array.
Definition at line 599 of file SparseFile.h.
References SparseFile::Reference< Data_T >::blockLoaded, SparseFile::Reference< Data_T >::blocks, SparseFile::Reference< Data_T >::blockUsed, F3D_MUTEX_ARRAY_SIZE, 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, detail::min(), SparseFile::Reference< Data_T >::numVoxels, SparseFile::Reference< Data_T >::occupiedBlocks, SparseFile::Reference< Data_T >::refCounts, and SparseFile::Reference< Data_T >::valuesPerBlock.
std::string SparseFile::Reference< Data_T >::filename |
Definition at line 126 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 127 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 128 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 >::numVoxels |
Definition at line 129 of file SparseFile.h.
Referenced by SparseField< Data_T >::copySparseField(), and SparseFile::Reference< Data_T >::operator=().
int SparseFile::Reference< Data_T >::numBlocks |
Definition at line 130 of file SparseFile.h.
int SparseFile::Reference< Data_T >::occupiedBlocks |
Definition at line 131 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 134 of file SparseFile.h.
Referenced by SparseFile::Reference< Data_T >::operator=(), 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 137 of file SparseFile.h.
Referenced by SparseFile::Reference< Data_T >::operator=().
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 140 of file SparseFile.h.
Referenced by SparseFile::Reference< Data_T >::operator=(), 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 144 of file SparseFile.h.
Referenced by SparseFile::Reference< Data_T >::operator=().
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 147 of file SparseFile.h.
Referenced by 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 151 of file SparseFile.h.
Referenced by 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 155 of file SparseFile.h.
int SparseFile::Reference< Data_T >::blockMutexSize |
Size of the mutex array. Used as modulus base.
Definition at line 158 of file SparseFile.h.
|
private |
Holds the Hdf5 handle to the file.
Definition at line 230 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 234 of file SparseFile.h.
|
private |
Pointer to the reader object. NULL at construction time. Created in openFile().
Definition at line 238 of file SparseFile.h.
|
private |
Shared pointer to the ogawa reader.
Definition at line 241 of file SparseFile.h.
|
private |
Pointer to the ogawa reader. NULL at construction time. Created in openFile().
Definition at line 244 of file SparseFile.h.
|
private |
Ogawa archive.
Definition at line 246 of file SparseFile.h.
|
private |
Ogawa archive root.
Definition at line 248 of file SparseFile.h.
|
private |
Ogawa layer group.
Definition at line 250 of file SparseFile.h.
|
mutableprivate |
Mutex to prevent two threads from modifying conflicting data.
Definition at line 253 of file SparseFile.h.
|
private |
Number of currently active blocks.
Definition at line 256 of file SparseFile.h.