OpenVDB  8.0.1
File.h
Go to the documentation of this file.
1 // Copyright Contributors to the OpenVDB Project
2 // SPDX-License-Identifier: MPL-2.0
3 //
5 
6 #ifndef OPENVDB_IO_FILE_HAS_BEEN_INCLUDED
7 #define OPENVDB_IO_FILE_HAS_BEEN_INCLUDED
8 
9 #include <openvdb/version.h>
10 #include "io.h" // for MappedFile::Notifier
11 #include "Archive.h"
12 #include "GridDescriptor.h"
13 #include <algorithm> // for std::copy()
14 #include <iosfwd>
15 #include <iterator> // for std::back_inserter()
16 #include <map>
17 #include <memory>
18 #include <string>
19 
20 
21 class TestFile;
22 class TestStream;
23 
24 namespace openvdb {
26 namespace OPENVDB_VERSION_NAME {
27 namespace io {
28 
30 class OPENVDB_API File: public Archive
31 {
32 public:
33  using NameMap = std::multimap<Name, GridDescriptor>;
34  using NameMapCIter = NameMap::const_iterator;
35 
36  explicit File(const std::string& filename);
37  ~File() override;
38 
42  File(const File& other);
46  File& operator=(const File& other);
47 
51  SharedPtr<Archive> copy() const override;
52 
55  const std::string& filename() const;
56 
66  bool open(bool delayLoad = true, const MappedFile::Notifier& = MappedFile::Notifier());
67 
69  bool isOpen() const;
70 
72  void close();
73 
76  Index64 getSize() const;
77 
92  void setCopyMaxBytes(Index64 bytes);
93 
95  bool hasGrid(const Name&) const;
96 
99 
102 
107 
113 
118  GridBase::Ptr readGrid(const Name&, const BBoxd&);
119 
121 
124  void write(const GridCPtrVec&, const MetaMap& = MetaMap()) const override;
125 
128  template<typename GridPtrContainerT>
129  void write(const GridPtrContainerT&, const MetaMap& = MetaMap()) const;
130 
134  {
135  public:
136  NameIterator(const NameMapCIter& iter): mIter(iter) {}
137  NameIterator(const NameIterator&) = default;
139 
140  NameIterator& operator++() { mIter++; return *this; }
141 
142  bool operator==(const NameIterator& iter) const { return mIter == iter.mIter; }
143  bool operator!=(const NameIterator& iter) const { return mIter != iter.mIter; }
144 
145  Name operator*() const { return this->gridName(); }
146 
147  Name gridName() const { return GridDescriptor::nameAsString(mIter->second.uniqueName()); }
148 
149  private:
150  NameMapCIter mIter;
151  };
152 
155 
158 
159 private:
161  void readGridDescriptors(std::istream&);
162 
165  NameMapCIter findDescriptor(const Name&) const;
166 
169 
172  GridBase::Ptr readGridByName(const Name&, const BBoxd&);
173 
175  GridBase::ConstPtr readGridPartial(const GridDescriptor&, bool readTopology) const;
176 
178  GridBase::Ptr readGrid(const GridDescriptor&) const;
181  GridBase::Ptr readGrid(const GridDescriptor&, const BBoxd&) const;
184  GridBase::Ptr readGrid(const GridDescriptor&, const CoordBBox&) const;
185 
188  void readGridPartial(GridBase::Ptr, std::istream&, bool isInstance, bool readTopology) const;
189 
193  GridBase::Ptr retrieveCachedGrid(const Name&) const;
194 
195  void writeGrids(const GridCPtrVec&, const MetaMap&) const;
196 
197  MetaMap::Ptr fileMetadata();
198  MetaMap::ConstPtr fileMetadata() const;
199 
200  const NameMap& gridDescriptors() const;
201  NameMap& gridDescriptors();
202 
203  std::istream& inputStream() const;
204 
205  friend class ::TestFile;
206  friend class ::TestStream;
207 
208  struct Impl;
209  std::unique_ptr<Impl> mImpl;
210 };
211 
212 
214 
215 
216 inline void
217 File::write(const GridCPtrVec& grids, const MetaMap& meta) const
218 {
219  this->writeGrids(grids, meta);
220 }
221 
222 
223 template<typename GridPtrContainerT>
224 inline void
225 File::write(const GridPtrContainerT& container, const MetaMap& meta) const
226 {
227  GridCPtrVec grids;
228  std::copy(container.begin(), container.end(), std::back_inserter(grids));
229  this->writeGrids(grids, meta);
230 }
231 
232 } // namespace io
233 } // namespace OPENVDB_VERSION_NAME
234 } // namespace openvdb
235 
236 #endif // OPENVDB_IO_FILE_HAS_BEEN_INCLUDED
#define OPENVDB_API
Helper macros for defining library symbol visibility.
Definition: Platform.h:208
SharedPtr< const GridBase > ConstPtr
Definition: Grid.h:81
SharedPtr< GridBase > Ptr
Definition: Grid.h:80
Container that maps names (strings) to values of arbitrary types.
Definition: MetaMap.h:20
SharedPtr< const MetaMap > ConstPtr
Definition: MetaMap.h:23
SharedPtr< MetaMap > Ptr
Definition: MetaMap.h:22
Grid serializer/unserializer.
Definition: Archive.h:33
NameIterator(const NameIterator &)=default
~NameIterator()
Definition: File.h:138
Name operator*() const
Definition: File.h:145
Name gridName() const
Definition: File.h:147
NameIterator & operator++()
Definition: File.h:140
bool operator!=(const NameIterator &iter) const
Definition: File.h:143
NameIterator(const NameMapCIter &iter)
Definition: File.h:136
bool operator==(const NameIterator &iter) const
Definition: File.h:142
Grid archive associated with a file on disk.
Definition: File.h:31
bool isOpen() const
Return true if the file has been opened for reading.
void setCopyMaxBytes(Index64 bytes)
If this file is opened with delayed loading enabled, make a private copy of the file if its size in b...
NameIterator endName() const
GridPtrVecPtr getGrids() const
Read the entire contents of the file and return a list of grid pointers.
bool hasGrid(const Name &) const
Return true if a grid of the given name exists in this file.
File(const std::string &filename)
GridBase::Ptr readGrid(const Name &, const BBoxd &)
Read a grid, including its data blocks, but only where it intersects the given world-space bounding b...
void close()
Close the file once we are done reading from it.
const std::string & filename() const
Return the name of the file with which this archive is associated.
NameMap::const_iterator NameMapCIter
Definition: File.h:34
SharedPtr< Archive > copy() const override
Return a copy of this archive.
NameIterator beginName() const
GridBase::Ptr readGrid(const Name &)
Read an entire grid, including all of its data blocks.
File & operator=(const File &other)
Assignment.
File(const File &other)
Copy constructor.
MetaMap::Ptr getMetadata() const
Return (in a newly created MetaMap) the file-level metadata.
GridBase::Ptr readGridMetadata(const Name &)
Read a grid's metadata and transform only.
bool open(bool delayLoad=true, const MappedFile::Notifier &=MappedFile::Notifier())
Open the file, read the file header and the file-level metadata, and populate the grid descriptors,...
GridPtrVecPtr readAllGridMetadata()
Read just the grid metadata and transforms from the file and return a list of pointers to grids that ...
Index64 getSize() const
Return this file's current size on disk in bytes.
Index64 copyMaxBytes() const
Return the size in bytes above which this file will not be automatically copied during delayed loadin...
std::multimap< Name, GridDescriptor > NameMap
Definition: File.h:33
Definition: GridDescriptor.h:20
std::function< void(std::string)> Notifier
Definition: io.h:156
Axis-aligned bounding box of signed integer coordinates.
Definition: Coord.h:249
std::string Name
Definition: Name.h:17
SharedPtr< GridPtrVec > GridPtrVecPtr
Definition: Grid.h:517
GridType::Ptr createGrid(const typename GridType::ValueType &background)
Create a new grid of type GridType with a given background value.
Definition: Grid.h:1746
uint64_t Index64
Definition: openvdb/Types.h:31
std::shared_ptr< T > SharedPtr
Definition: openvdb/Types.h:92
std::vector< GridBase::ConstPtr > GridCPtrVec
Definition: Grid.h:519
Definition: openvdb/Exceptions.h:13
Library and file format version numbers.
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:101
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:153