17 #include "../declspec.h"
32 namespace Test {
class TestBulk; }
39 class ZgyInternalMeta;
50 friend class Test::TestBulk;
52 typedef std::function<bool(
int,
const std::string&)> LoggerFn;
56 std::shared_ptr<FileADT> _file;
57 std::shared_ptr<ZgyInternalMeta> _metadata;
59 bool _compressed_write;
61 double _written_sample_min;
62 double _written_sample_max;
67 const std::shared_ptr<FileADT>& file,
68 const std::shared_ptr<ZgyInternalMeta>& metadata,
69 bool compressed_write,
70 const LoggerFn& logger = LoggerFn());
72 std::pair<bool,double> readConstantValue(
73 const std::array<std::int64_t,3>& start,
74 const std::array<std::int64_t,3>& size,
75 int32_t lod,
bool as_float);
77 void readToExistingBuffer(
78 const std::shared_ptr<DataBuffer>& data,
79 const std::array<std::int64_t,3>& start,
80 int32_t lod,
bool as_float);
82 std::shared_ptr<DataBuffer> readToNewBuffer(
83 const std::array<std::int64_t,3>& start,
84 const std::array<std::int64_t,3>& size,
85 int32_t lod,
bool as_float,
bool check_constant);
88 const std::shared_ptr<DataBuffer>& data,
89 const std::array<std::int64_t,3>& start,
90 int32_t lod,
bool is_storage,
95 bool errorflag()
const {
return _is_bad; }
96 void set_errorflag(
bool flag) { _is_bad = flag; }
97 LoggerFn set_logger(
const LoggerFn& logger) {
98 LoggerFn old = _loggerfn;
102 std::array<double,2> valueRangeWritten()
const {
103 return std::array<double,2>{_written_sample_min, _written_sample_max};
108 bool _logger(
int priority,
const std::string& ss = std::string())
const;
110 bool _logger(
int priority,
const std::ios& ss)
const;
112 void _validateUserPosition(
113 const std::array<std::int64_t,3>& start,
114 const std::array<std::int64_t,3>& size,
117 std::shared_ptr<DataBuffer> _scaleDataToFloat(
118 const std::shared_ptr<DataBuffer>& data);
120 std::shared_ptr<DataBuffer> _scaleDataToStorage(
121 const std::shared_ptr<DataBuffer>& data);
123 static double _decodeConstant(std::uint32_t in,
RawDataType dtype);
125 static std::int32_t _encodeConstant(
double in,
RawDataType dtype);
127 std::vector<LutInfoEx> _partsNeeded(
128 const std::array<std::int64_t,3>& start,
129 const std::array<std::int64_t,3>& size,
132 void _deliverOneBrick(
133 const std::shared_ptr<DataBuffer>& result,
134 const std::array<std::int64_t,3>& start,
135 const std::array<std::int64_t,3>& startpos,
136 const void *raw, std::int64_t rawsize,
141 std::array<std::int64_t,3> _usedPartOfBrick(
142 const std::array<std::int64_t,3>& size,
143 const std::array<std::int64_t,3>& brickpos,
146 bool _isUsedPartOfBrickAllConstant(
147 const std::shared_ptr<DataBuffer>& data,
148 const std::array<std::int64_t,3>& brickpos,
151 static void _setPaddingToEdge(
152 const std::shared_ptr<DataBuffer>& data,
153 const std::array<std::int64_t,3>& used,
154 int modulo,
int dim);
156 static void _setPaddingToConst(
157 const std::shared_ptr<DataBuffer>& data,
158 const std::array<std::int64_t,3>& used,
159 double missingvalue,
int dim);
161 static void _setPaddingSamples(
162 const std::shared_ptr<DataBuffer>& data,
163 const std::array<std::int64_t,3>& used,
166 void _writeWithRetry(
169 std::int64_t fileoffset,
170 const std::array<std::int64_t,3>& brickpos,
173 void _writeOneNormalBrick(
174 const std::shared_ptr<DataBuffer>& data,
175 std::int64_t fileoffset,
176 const std::array<std::int64_t,3>& brickpos,
180 void _writeOneConstantBrick(
181 const std::shared_ptr<DataBuffer>& data,
182 const std::array<std::int64_t,3>& brickpos,
185 bool _mustLeakOldBrick(
186 const std::shared_ptr<DataBuffer>& data,
191 const std::shared_ptr<DataBuffer>& data,
192 const std::array<std::int64_t,3>& brickpos,
196 void _writeAlignedRegion(
197 const std::shared_ptr<DataBuffer>& data,
198 const std::array<std::int64_t,3>& start,