OpenVDB  8.1.1
Archive.h
Go to the documentation of this file.
1 // Copyright Contributors to the OpenVDB Project
2 // SPDX-License-Identifier: MPL-2.0
3 
4 #ifndef OPENVDB_IO_ARCHIVE_HAS_BEEN_INCLUDED
5 #define OPENVDB_IO_ARCHIVE_HAS_BEEN_INCLUDED
6 
7 #include <openvdb/version.h>
8 #include "Compression.h" // for COMPRESS_ZIP, etc.
9 #include <openvdb/Grid.h>
10 #include <openvdb/MetaMap.h>
11 #include <openvdb/Platform.h>
12 #include <openvdb/version.h> // for VersionId
13 #include <boost/uuid/uuid.hpp>
14 #include <cstdint>
15 #include <iosfwd>
16 #include <map>
17 #include <memory>
18 #include <string>
19 
20 
21 class TestFile;
22 
23 namespace openvdb {
25 namespace OPENVDB_VERSION_NAME {
26 namespace io {
27 
28 class GridDescriptor;
29 
30 
33 {
34 public:
37 
38  static const uint32_t DEFAULT_COMPRESSION_FLAGS;
39 
40  Archive();
41  Archive(const Archive&) = default;
42  Archive& operator=(const Archive&) = default;
43  virtual ~Archive();
44 
46  virtual Ptr copy() const;
47 
50  std::string getUniqueTag() const;
52  bool isIdentical(const std::string& uuidStr) const;
53 
55  uint32_t fileVersion() const { return mFileVersion; }
58  VersionId libraryVersion() const { return mLibraryVersion; }
61  std::string version() const;
62 
65  bool isInstancingEnabled() const { return mEnableInstancing; }
69  void setInstancingEnabled(bool b) { mEnableInstancing = b; }
70 
72  static bool hasBloscCompression();
73 
75  static bool hasZLibCompression();
76 
78  uint32_t compression() const { return mCompression; }
83  void setCompression(uint32_t c) { mCompression = c; }
84 
87  bool isGridStatsMetadataEnabled() const { return mEnableGridStats; }
90  void setGridStatsMetadataEnabled(bool b) { mEnableGridStats = b; }
91 
93  virtual void write(const GridCPtrVec&, const MetaMap& = MetaMap()) const {}
94 
100  static bool isDelayedLoadingEnabled();
101 
102 protected:
105  bool inputHasGridOffsets() const { return mInputHasGridOffsets; }
106  void setInputHasGridOffsets(bool b) { mInputHasGridOffsets = b; }
107 
112  void setFormatVersion(std::istream&);
113 
119  void setLibraryVersion(std::istream&);
120 
123  void setDataCompression(std::istream&);
124 
127  void setGridCompression(std::ostream&, const GridBase&) const;
130  static void readGridCompression(std::istream&);
131 
133  static int32_t readGridCount(std::istream&);
134 
136  static void readGrid(GridBase::Ptr, const GridDescriptor&, std::istream&);
139  static void readGrid(GridBase::Ptr, const GridDescriptor&, std::istream&, const BBoxd&);
142  static void readGrid(GridBase::Ptr, const GridDescriptor&, std::istream&, const CoordBBox&);
143 
144  using NamedGridMap = std::map<Name /*uniqueName*/, GridBase::Ptr>;
145 
148  void connectInstance(const GridDescriptor&, const NamedGridMap&) const;
149 
153  void writeGrid(GridDescriptor&, GridBase::ConstPtr, std::ostream&, bool seekable) const;
158  void writeGridInstance(GridDescriptor&, GridBase::ConstPtr,
159  std::ostream&, bool seekable) const;
160 
163  bool readHeader(std::istream&);
167  void writeHeader(std::ostream&, bool seekable) const;
168 
170  void write(std::ostream&, const GridPtrVec&, bool seekable, const MetaMap& = MetaMap()) const;
172  void write(std::ostream&, const GridCPtrVec&, bool seekable, const MetaMap& = MetaMap()) const;
174 
175 private:
176  friend class ::TestFile;
177 
179  uint32_t mFileVersion;
181  VersionId mLibraryVersion;
183  mutable boost::uuids::uuid mUuid;// needs to be mutable since writeHeader is const!
186  bool mInputHasGridOffsets;
189  bool mEnableInstancing;
191  uint32_t mCompression;
193  bool mEnableGridStats;
194 }; // class Archive
195 
196 } // namespace io
197 } // namespace OPENVDB_VERSION_NAME
198 } // namespace openvdb
199 
200 #endif // OPENVDB_IO_ARCHIVE_HAS_BEEN_INCLUDED
#define OPENVDB_API
Helper macros for defining library symbol visibility.
Definition: Platform.h:240
bool isInstancingEnabled() const
Return true if trees shared by multiple grids are written out only once, false if they are written ou...
Definition: Archive.h:65
VersionId libraryVersion() const
Return the (major, minor) version number of the library that was used to write the input stream...
Definition: Archive.h:58
virtual void write(const GridCPtrVec &, const MetaMap &=MetaMap()) const
Write the grids in the given container to this archive&#39;s output stream.
Definition: Archive.h:93
static const uint32_t DEFAULT_COMPRESSION_FLAGS
Definition: Archive.h:38
bool inputHasGridOffsets() const
Return true if the input stream contains grid offsets that allow for random access or partial reading...
Definition: Archive.h:105
std::string Name
Definition: Name.h:17
Definition: version.h.in:237
OPENVDB_API void setDataCompression(std::ios_base &, uint32_t compressionFlags)
Associate with the given stream a bitwise OR of compression option flags (COMPRESS_ZIP, COMPRESS_ACTIVE_MASK, etc.) specifying whether and how input data is compressed or output data should be compressed.
bool isGridStatsMetadataEnabled() const
Return true if grid statistics (active voxel count and bounding box, etc.) are computed and written a...
Definition: Archive.h:87
Abstract base class for typed grids.
Definition: Grid.h:77
Definition: GridDescriptor.h:19
std::shared_ptr< T > SharedPtr
Definition: openvdb/Types.h:110
uint32_t fileVersion() const
Return the file format version number of the input stream.
Definition: Archive.h:55
SharedPtr< GridBase > Ptr
Definition: Grid.h:80
void setCompression(uint32_t c)
Specify whether and how the data stream should be compressed.
Definition: Archive.h:83
std::vector< GridBase::Ptr > GridPtrVec
Definition: Grid.h:514
Definition: openvdb/Exceptions.h:13
SharedPtr< Archive > Ptr
Definition: Archive.h:35
std::vector< GridBase::ConstPtr > GridCPtrVec
Definition: Grid.h:519
Grid serializer/unserializer.
Definition: Archive.h:32
void setInputHasGridOffsets(bool b)
Definition: Archive.h:106
SharedPtr< const Archive > ConstPtr
Definition: Archive.h:36
void setGridStatsMetadataEnabled(bool b)
Specify whether grid statistics (active voxel count and bounding box, etc.) should be computed and wr...
Definition: Archive.h:90
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h.in:116
SharedPtr< const GridBase > ConstPtr
Definition: Grid.h:81
std::map< Name, GridBase::Ptr > NamedGridMap
Definition: Archive.h:144
Container that maps names (strings) to values of arbitrary types.
Definition: MetaMap.h:19
void setInstancingEnabled(bool b)
Specify whether trees shared by multiple grids should be written out only once (true) or once per gri...
Definition: Archive.h:69
uint32_t compression() const
Return a bit mask specifying compression options for the data stream.
Definition: Archive.h:78
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h.in:178