Line | Branch | Exec | Source |
---|---|---|---|
1 | // Copyright Contributors to the OpenVDB Project | ||
2 | // SPDX-License-Identifier: MPL-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 | |||
11 | namespace openvdb { | ||
12 | OPENVDB_USE_VERSION_NAMESPACE | ||
13 | namespace OPENVDB_VERSION_NAME { | ||
14 | namespace 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. | ||
19 | 148 | class OPENVDB_API GridDescriptor | |
20 | { | ||
21 | public: | ||
22 | GridDescriptor(); | ||
23 | GridDescriptor(const Name& name, const Name& gridType, bool saveFloatAsHalf = false); | ||
24 |
3/6✓ Branch 2 taken 231 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 231 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 231 times.
✗ Branch 9 not taken.
|
231 | GridDescriptor(const GridDescriptor&) = default; |
25 | GridDescriptor& operator=(const GridDescriptor&) = default; | ||
26 | ~GridDescriptor(); | ||
27 | |||
28 |
0/2✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
122 | const Name& gridType() const { return mGridType; } |
29 | ✗ | const Name& gridName() const { return mGridName; } | |
30 |
4/8✓ Branch 1 taken 19 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 58 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 64 times.
✗ Branch 11 not taken.
|
156 | const Name& uniqueName() const { return mUniqueName; } |
31 | |||
32 |
1/2✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
|
17 | const Name& instanceParentName() const { return mInstanceParentName; } |
33 | 15 | void setInstanceParentName(const Name& name) { mInstanceParentName = name; } | |
34 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
4 | bool isInstance() const { return !mInstanceParentName.empty(); } |
35 | |||
36 |
1/3✗ Branch 0 not taken.
✓ Branch 1 taken 137 times.
✗ Branch 2 not taken.
|
137 | bool saveFloatAsHalf() const { return mSaveFloatAsHalf; } |
37 | |||
38 | 150 | void setGridPos(int64_t pos) { mGridPos = pos; } | |
39 |
10/20✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
|
12 | int64_t getGridPos() const { return mGridPos; } |
40 | |||
41 | 139 | void setBlockPos(int64_t pos) { mBlockPos = pos; } | |
42 |
12/24✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
|
14 | int64_t getBlockPos() const { return mBlockPos; } |
43 | |||
44 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
150 | void setEndPos(int64_t pos) { mEndPos = pos; } |
45 |
12/24✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
|
14 | 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 a grid descriptor from the given stream. | ||
65 | /// @return an empty grid of the type specified by the grid descriptor. | ||
66 | GridBase::Ptr read(std::istream&); | ||
67 | |||
68 | /// @brief Append the number @a n to the given name (separated by an ASCII | ||
69 | /// "record separator" character) and return the resulting name. | ||
70 | static Name addSuffix(const Name&, int n); | ||
71 | /// @brief Strip from the given name any suffix that is separated by an ASCII | ||
72 | /// "record separator" character and return the resulting name. | ||
73 | static Name stripSuffix(const Name&); | ||
74 | /// @brief Given a name with suffix N, return "name[N]", otherwise just return "name". | ||
75 | /// Use this to produce a human-readable string from a descriptor's unique name. | ||
76 | static std::string nameAsString(const Name&); | ||
77 | /// @brief Given a string of the form "name[N]", return "name" with the suffix N | ||
78 | /// separated by an ASCII "record separator" character). Otherwise just return | ||
79 | /// the string as is. | ||
80 | static Name stringAsUniqueName(const std::string&); | ||
81 | |||
82 | private: | ||
83 | /// Name of the grid | ||
84 | Name mGridName; | ||
85 | /// Unique name for this descriptor | ||
86 | Name mUniqueName; | ||
87 | /// If nonempty, the name of another grid that shares this grid's tree | ||
88 | Name mInstanceParentName; | ||
89 | /// The type of the grid | ||
90 | Name mGridType; | ||
91 | /// Are floats quantized to 16 bits on disk? | ||
92 | bool mSaveFloatAsHalf; | ||
93 | /// Location in the stream where the grid data is stored | ||
94 | int64_t mGridPos; | ||
95 | /// Location in the stream where the grid blocks are stored | ||
96 | int64_t mBlockPos; | ||
97 | /// Location in the stream where the next grid descriptor begins | ||
98 | int64_t mEndPos; | ||
99 | }; | ||
100 | |||
101 | } // namespace io | ||
102 | } // namespace OPENVDB_VERSION_NAME | ||
103 | } // namespace openvdb | ||
104 | |||
105 | #endif // OPENVDB_IO_GRIDDESCRIPTOR_HAS_BEEN_INCLUDED | ||
106 |