Go to the documentation of this file.
46 #ifndef OPENVDB_TOOLS_STREAM_COMPRESSION_HAS_BEEN_INCLUDED
47 #define OPENVDB_TOOLS_STREAM_COMPRESSION_HAS_BEEN_INCLUDED
49 #include <openvdb/io/io.h>
50 #include <tbb/spin_mutex.h>
55 class TestStreamCompression;
60 namespace compression {
88 const size_t bufferBytes,
const char* uncompressedBuffer,
const size_t uncompressedBytes);
99 const size_t uncompressedBytes,
size_t& compressedBytes,
const bool resize =
true);
115 const size_t bufferBytes,
const char* compressedBuffer);
125 const size_t expectedBytes,
const bool resize =
true);
145 std::streamoff filepos;
146 long compressedBytes;
147 long uncompressedBytes;
151 using Ptr = std::shared_ptr<Page>;
164 const char*
buffer(
const int index)
const;
178 void copy(
const std::unique_ptr<
char[]>& temp,
int pageSize);
181 void decompress(
const std::unique_ptr<
char[]>& temp);
186 std::unique_ptr<Info> mInfo = std::unique_ptr<Info>(
new Info);
187 std::unique_ptr<char[]> mData;
188 tbb::spin_mutex mMutex;
197 using Ptr = std::shared_ptr<PageHandle>;
210 std::unique_ptr<char[]>
read();
213 friend class ::TestStreamCompression;
228 using Ptr = std::shared_ptr<PagedInputStream>;
252 int mUncompressedBytes = 0;
253 std::istream* mIs =
nullptr;
255 bool mSizeOnly =
false;
265 using Ptr = std::shared_ptr<PagedOutputStream>;
288 void compressAndWrite(
const char* buffer,
size_t size);
291 void resize(
size_t size);
293 std::unique_ptr<char[]> mData = std::unique_ptr<char[]>(
new char[
PageSize]);
294 std::unique_ptr<char[]> mCompressedData =
nullptr;
297 std::ostream* mOs =
nullptr;
298 bool mSizeOnly =
false;
306 #endif // OPENVDB_TOOLS_STREAM_COMPRESSION_HAS_BEEN_INCLUDED
bool sizeOnly() const
Definition: StreamCompression.h:273
OPENVDB_API size_t bloscCompressedSize(const char *buffer, const size_t uncompressedBytes)
Convenience wrapper to retrieve the compressed size of buffer when compressed.
PagedInputStream(std::istream &is)
static const int BLOSC_PAD_BYTES
Definition: StreamCompression.h:69
static const int BLOSC_MINIMUM_BYTES
Definition: StreamCompression.h:65
PagedInputStream()=default
PageHandle(const Page::Ptr &page, const int index, const int size)
Create the page handle.
A Paging wrapper to std::istream that is responsible for reading from a given input stream and creati...
Definition: StreamCompression.h:226
A Paging wrapper to std::ostream that is responsible for writing from a given output stream at interv...
Definition: StreamCompression.h:263
OPENVDB_API std::unique_ptr< char[]> bloscDecompress(const char *buffer, const size_t expectedBytes, const bool resize=true)
Decompress and return the the heap-allocated uncompressed buffer.
OPENVDB_API bool bloscCanCompress()
Returns true if compression is available.
void flush()
Manually flushes the current page to disk if non-zero.
Page & page()
Retrieve a reference to the stored page.
std::ostream & getOutputStream()
Set and get the output stream.
Definition: StreamCompression.h:276
void load() const
load the Page into memory
Stores a variable-size, compressed, delayed-load Page of data that is loaded into memory when accesse...
Definition: StreamCompression.h:139
std::shared_ptr< T > SharedPtr
Definition: Types.h:139
void setSizeOnly(bool sizeOnly)
Size-only mode tags the stream as only reading size data.
Definition: StreamCompression.h:235
A PageHandle holds a shared ptr to a Page and a specific stream pointer to a point within the decompr...
Definition: StreamCompression.h:195
PagedOutputStream(std::ostream &os)
std::unique_ptr< char[]> read()
Read and return the buffer, loading and decompressing the Page if necessary.
void readHeader(std::istream &)
Read the Page header.
std::shared_ptr< PagedInputStream > Ptr
Definition: StreamCompression.h:228
void readBuffers(std::istream &, bool delayed)
Read the Page buffers. If delayed is true, stream pointers will be stored to load the data lazily.
long uncompressedBytes() const
Uncompressed bytes of the Paged data, available when the header has been read.
std::istream & getInputStream()
Definition: StreamCompression.h:239
static const int PageSize
Definition: StreamCompression.h:132
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:188
void setInputStream(std::istream &is)
Definition: StreamCompression.h:240
void setSizeOnly(bool sizeOnly)
Size-only mode tags the stream as only writing size data.
Definition: StreamCompression.h:272
void setOutputStream(std::ostream &os)
Definition: StreamCompression.h:277
bool sizeOnly() const
Definition: StreamCompression.h:236
PageHandle::Ptr createHandle(std::streamsize n)
Creates a PageHandle to access the next.
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:136
OPENVDB_API size_t bloscUncompressedSize(const char *buffer)
Retrieves the uncompressed size of buffer when uncompressed.
std::shared_ptr< PagedOutputStream > Ptr
Definition: StreamCompression.h:265
OPENVDB_API std::unique_ptr< char[]> bloscCompress(const char *buffer, const size_t uncompressedBytes, size_t &compressedBytes, const bool resize=true)
Compress and return the heap-allocated compressed buffer.
Definition: Exceptions.h:40
void read(PageHandle::Ptr &pageHandle, std::streamsize n, bool delayed=true)
Takes a pageHandle and updates the referenced page with the current stream pointer position and if de...
const char * buffer(const int index) const
Retrieves a data pointer at the specific.
std::shared_ptr< PageHandle > Ptr
Definition: StreamCompression.h:197
std::shared_ptr< Page > Ptr
Definition: StreamCompression.h:151
SharedPtr< MappedFile > Ptr
Definition: io.h:152
PagedOutputStream & write(const char *str, std::streamsize n)
Writes the given.
bool isOutOfCore() const
Test if the data is out-of-core.