OpenVDB 14.0.0
Loading...
Searching...
No Matches
GridDescriptor.h
Go to the documentation of this file.
1// Copyright Contributors to the OpenVDB Project
2// SPDX-License-Identifier: Apache-2.0
3
4#ifndef OPENVDB_IO_GRIDDESCRIPTOR_HAS_BEEN_INCLUDED
5#define OPENVDB_IO_GRIDDESCRIPTOR_HAS_BEEN_INCLUDED
6
7#include <openvdb/Grid.h>
8#include <iostream>
9#include <string>
10
11namespace openvdb {
13namespace OPENVDB_VERSION_NAME {
14namespace io {
15
16/// This structure stores useful information that describes a grid on disk.
17/// It can be used to retrieve I/O information about the grid such as
18/// offsets into the file where the grid is located, its type, etc.
20{
21public:
23 GridDescriptor(const Name& name, const Name& gridType, bool saveFloatAsHalf = false);
24 GridDescriptor(const GridDescriptor&) = default;
27
28 const Name& gridType() const { return mGridType; }
29 const Name& gridName() const { return mGridName; }
30 const Name& uniqueName() const { return mUniqueName; }
31
32 const Name& instanceParentName() const { return mInstanceParentName; }
33 void setInstanceParentName(const Name& name) { mInstanceParentName = name; }
34 bool isInstance() const { return !mInstanceParentName.empty(); }
35
36 bool saveFloatAsHalf() const { return mSaveFloatAsHalf; }
37
38 void setGridPos(int64_t pos) { mGridPos = pos; }
39 int64_t getGridPos() const { return mGridPos; }
40
41 void setBlockPos(int64_t pos) { mBlockPos = pos; }
42 int64_t getBlockPos() const { return mBlockPos; }
43
44 void setEndPos(int64_t pos) { mEndPos = pos; }
45 int64_t getEndPos() const { return mEndPos; }
46
47 // These methods seek to the right position in the given stream.
48 void seekToGrid(std::istream&) const;
49 void seekToBlocks(std::istream&) const;
50 void seekToEnd(std::istream&) const;
51
52 void seekToGrid(std::ostream&) const;
53 void seekToBlocks(std::ostream&) const;
54 void seekToEnd(std::ostream&) const;
55
56 /// @brief Write out this descriptor's header information (all data except for
57 /// stream offsets).
58 void writeHeader(std::ostream&) const;
59
60 /// @brief Since positions into the stream are known at a later time, they are
61 /// written out separately.
62 void writeStreamPos(std::ostream&) const;
63
64 /// @brief Read this descriptor's header information (all data except for
65 /// stream offsets) from the given stream.
66 void readHeader(std::istream&);
67
68 /// @brief Read stream positions (grid, block, and end offsets) from the
69 /// given stream.
70 void readStreamPos(std::istream&);
71
72 /// @brief Append the number @a n to the given name (separated by an ASCII
73 /// "record separator" character) and return the resulting name.
74 static Name addSuffix(const Name&, int n);
75 /// @brief Strip from the given name any suffix that is separated by an ASCII
76 /// "record separator" character and return the resulting name.
77 static Name stripSuffix(const Name&);
78 /// @brief Given a name with suffix N, return "name[N]", otherwise just return "name".
79 /// Use this to produce a human-readable string from a descriptor's unique name.
80 static std::string nameAsString(const Name&);
81 /// @brief Given a string of the form "name[N]", return "name" with the suffix N
82 /// separated by an ASCII "record separator" character). Otherwise just return
83 /// the string as is.
84 static Name stringAsUniqueName(const std::string&);
85
86private:
87 /// Name of the grid
88 Name mGridName;
89 /// Unique name for this descriptor
90 Name mUniqueName;
91 /// If nonempty, the name of another grid that shares this grid's tree
92 Name mInstanceParentName;
93 /// The type of the grid
94 Name mGridType;
95 /// Are floats quantized to 16 bits on disk?
96 bool mSaveFloatAsHalf;
97 /// Location in the stream where the grid data is stored
98 int64_t mGridPos;
99 /// Location in the stream where the grid blocks are stored
100 int64_t mBlockPos;
101 /// Location in the stream where the next grid descriptor begins
102 int64_t mEndPos;
103};
104
105} // namespace io
106} // namespace OPENVDB_VERSION_NAME
107} // namespace openvdb
108
109#endif // OPENVDB_IO_GRIDDESCRIPTOR_HAS_BEEN_INCLUDED
#define OPENVDB_API
Definition Platform.h:286
void readStreamPos(std::istream &)
Read stream positions (grid, block, and end offsets) from the given stream.
GridDescriptor(const GridDescriptor &)=default
const Name & gridName() const
Definition GridDescriptor.h:29
void setBlockPos(int64_t pos)
Definition GridDescriptor.h:41
int64_t getBlockPos() const
Definition GridDescriptor.h:42
void readHeader(std::istream &)
Read this descriptor's header information (all data except for stream offsets) from the given stream.
void writeStreamPos(std::ostream &) const
Since positions into the stream are known at a later time, they are written out separately.
void writeHeader(std::ostream &) const
Write out this descriptor's header information (all data except for stream offsets).
static std::string nameAsString(const Name &)
Given a name with suffix N, return "name[N]", otherwise just return "name". Use this to produce a hum...
const Name & uniqueName() const
Definition GridDescriptor.h:30
void seekToGrid(std::istream &) const
void seekToGrid(std::ostream &) const
void seekToEnd(std::istream &) const
const Name & instanceParentName() const
Definition GridDescriptor.h:32
void seekToBlocks(std::istream &) const
const Name & gridType() const
Definition GridDescriptor.h:28
GridDescriptor & operator=(const GridDescriptor &)=default
void seekToBlocks(std::ostream &) const
int64_t getGridPos() const
Definition GridDescriptor.h:39
static Name stripSuffix(const Name &)
Strip from the given name any suffix that is separated by an ASCII "record separator" character and r...
int64_t getEndPos() const
Definition GridDescriptor.h:45
void seekToEnd(std::ostream &) const
GridDescriptor(const Name &name, const Name &gridType, bool saveFloatAsHalf=false)
void setInstanceParentName(const Name &name)
Definition GridDescriptor.h:33
bool saveFloatAsHalf() const
Definition GridDescriptor.h:36
static Name stringAsUniqueName(const std::string &)
Given a string of the form "name[N]", return "name" with the suffix N separated by an ASCII "record s...
bool isInstance() const
Definition GridDescriptor.h:34
static Name addSuffix(const Name &, int n)
Append the number n to the given name (separated by an ASCII "record separator" character) and return...
void setGridPos(int64_t pos)
Definition GridDescriptor.h:38
void setEndPos(int64_t pos)
Definition GridDescriptor.h:44
std::string Name
Definition Name.h:19
Definition Exceptions.h:13
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition version.h.in:121
#define OPENVDB_USE_VERSION_NAMESPACE
Definition version.h.in:291