GCC Code Coverage Report


Directory: ./
File: openvdb/openvdb/io/GridDescriptor.h
Date: 2022-07-25 17:40:05
Exec Total Coverage
Lines: 14 15 93.3%
Functions: 2 2 100.0%
Branches: 46 101 45.5%

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