52 std::vector<std::int32_t> subChunkIds;
54 SubChunks() : chunkId(-1) {}
56 void swap(SubChunks & sc) {
57 std::swap(chunkId, sc.chunkId);
58 subChunkIds.swap(sc.subChunkIds);
75 Chunker(std::int32_t numStripes,
76 std::int32_t numSubStripesPerStripe);
78 bool operator==(Chunker
const & c)
const {
79 return _numStripes == c._numStripes &&
80 _numSubStripesPerStripe == c._numSubStripesPerStripe;
83 bool operator!=(Chunker
const & c)
const {
84 return _numStripes != c._numStripes ||
85 _numSubStripesPerStripe != c._numSubStripesPerStripe;
97 return _numSubStripesPerStripe;
117 bool valid(std::int32_t chunkId)
const;
119 Box getChunkBoundingBox(std::int32_t stripe, std::int32_t chunk)
const;
120 Box getSubChunkBoundingBox(std::int32_t subStripe, std::int32_t subChunk)
const;
124 return chunkId / (2 * _numStripes);
128 std::int32_t
getChunk(std::int32_t chunkId, std::int32_t stripe)
const {
129 return chunkId - stripe*2*_numStripes;
135 std::int32_t numChunksPerStripe;
136 std::int32_t numSubChunksPerChunk;
140 numChunksPerStripe(0),
141 numSubChunksPerChunk(0)
147 std::int32_t numSubChunksPerChunk;
149 SubStripe() : subChunkWidth(), numSubChunksPerChunk(0) {}
152 std::int32_t _getChunkId(std::int32_t stripe, std::int32_t chunk)
const {
153 return stripe * 2 * _numStripes + chunk;
156 std::int32_t _getSubChunkId(std::int32_t stripe, std::int32_t subStripe,
157 std::int32_t chunk, std::int32_t subChunk)
const {
158 std::int32_t y = subStripe - stripe * _numSubStripesPerStripe;
159 std::int32_t x = subChunk -
160 chunk * _subStripes[subStripe].numSubChunksPerChunk;
161 return y * _maxSubChunksPerSubStripeChunk + x;
164 void _getSubChunks(std::vector<SubChunks> & subChunks,
166 NormalizedAngleInterval
const & lon,
170 std::int32_t maxSS)
const;
172 std::int32_t _numStripes;
173 std::int32_t _numSubStripesPerStripe;
174 std::int32_t _numSubStripes;
175 std::int32_t _maxSubChunksPerSubStripeChunk;
176 Angle _subStripeHeight;
177 std::vector<Stripe> _stripes;
178 std::vector<SubStripe> _subStripes;