| 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 |