81 #include "../declspec.h"
82 #include "../exception.h"
129 std::string filename;
130 std::array<std::int64_t,3> size;
131 std::array<std::int64_t,3> bricksize;
133 std::array<float,2> datarange;
136 std::string zunitname, hunitname;
137 double zunitfactor, hunitfactor;
139 std::array<float,2> annotstart, annotinc;
140 std::array<std::array<double,2>,4> corners;
146 , bricksize{64,64,64}
147 , datatype(RawDataType::Float32)
149 , zunitdim(RawVerticalDimension::Unknown)
150 , hunitdim(RawHorizontalDimension::Unknown)
159 , corners{0,0,0,0,0,0,0,0}
182 typedef std::vector<std::uint8_t> podbytes_t;
183 virtual podbytes_t podbytes()
const = 0;
184 virtual void dump(std::ostream& out,
const std::string& prefix =
"") = 0;
195 virtual void read(
const std::shared_ptr<FileADT>& file, std::int64_t offset) = 0;
196 virtual void byteswap() = 0;
198 virtual std::array<std::uint8_t,4> magic()
const = 0;
199 virtual std::uint32_t version()
const = 0;
209 virtual void read(
const std::shared_ptr<FileADT>& file, std::int64_t offset) = 0;
210 virtual void byteswap() = 0;
211 virtual void calculate(
const std::shared_ptr<IInfoHeaderAccess>& ih) = 0;
213 virtual std::int64_t infoff()
const = 0;
214 virtual std::int64_t stroff()
const = 0;
215 virtual std::int64_t alphalupoff()
const = 0;
216 virtual std::int64_t bricklupoff()
const = 0;
217 virtual std::int64_t histoff()
const = 0;
218 virtual std::int64_t infsize()
const = 0;
219 virtual std::int64_t histsize()
const = 0;
220 virtual std::int64_t alphalupsize()
const = 0;
221 virtual std::int64_t bricklupsize()
const = 0;
231 virtual void read(
const std::shared_ptr<FileADT>& file, std::int64_t offset, std::int64_t size) = 0;
232 virtual void byteswap() = 0;
233 virtual void calculate_cache() = 0;
234 virtual void calculate_read(
const podbytes_t& slbuf,
const std::shared_ptr<IHistHeaderAccess>& hh) = 0;
235 virtual podbytes_t calculate_write() = 0;
237 virtual std::array<std::int64_t,3> bricksize()
const = 0;
238 virtual std::array<float,2> codingrange()
const = 0;
239 virtual std::array<std::uint8_t,16>dataid()
const = 0;
240 virtual std::array<std::uint8_t,16>verid()
const = 0;
241 virtual std::array<std::uint8_t,16>previd()
const = 0;
242 virtual std::string srcname()
const = 0;
243 virtual std::string srcdesc()
const = 0;
245 virtual std::array<std::int64_t,3> size()
const = 0;
246 virtual std::array<float,3> orig()
const = 0;
247 virtual std::array<float,3> inc()
const = 0;
248 virtual std::int64_t scnt()
const = 0;
249 virtual double ssum()
const = 0;
250 virtual double sssq()
const = 0;
251 virtual float smin()
const = 0;
252 virtual float smax()
const = 0;
253 virtual std::array<float,4> gpiline()
const = 0;
254 virtual std::array<float,4> gpxline()
const = 0;
255 virtual std::array<double,4> gpx()
const = 0;
256 virtual std::array<double,4> gpy()
const = 0;
258 virtual std::string hprjsys()
const = 0;
260 virtual double hunitfactor()
const = 0;
261 virtual std::string hunitname()
const = 0;
263 virtual double vunitfactor()
const = 0;
264 virtual std::string vunitname()
const = 0;
265 virtual std::uint32_t slbufsize()
const = 0;
266 virtual const std::array<std::array<double,2>,4>& ocp_index()
const = 0;
267 virtual const std::array<std::array<double,2>,4>& ocp_annot()
const = 0;
268 virtual const std::array<std::array<double,2>,4>& ocp_world()
const = 0;
269 virtual std::int32_t nlods()
const = 0;
272 virtual const std::vector<std::array<std::int64_t,3>>& lodsizes()
const = 0;
273 virtual const std::vector<std::int64_t>& alphaoffsets()
const = 0;
274 virtual const std::vector<std::int64_t>& brickoffsets()
const = 0;
276 virtual std::int64_t bytesperalpha()
const = 0;
277 virtual std::int64_t bytesperbrick()
const = 0;
278 virtual std::int64_t bytespersample()
const = 0;
279 virtual std::array<double,2> storagetofloat()
const = 0;
280 virtual double storagetofloat_slope()
const = 0;
281 virtual double storagetofloat_intercept()
const = 0;
282 virtual double defaultstorage()
const = 0;
283 virtual double defaultvalue()
const = 0;
285 virtual void setstats(std::int64_t scnt,
double ssum,
double sssq,
286 float smin,
float smax) = 0;
296 virtual void read(
const std::shared_ptr<FileADT>& file, std::int64_t offset, std::int64_t size) = 0;
297 virtual void byteswap() = 0;
298 virtual void calculate() = 0;
300 virtual std::int64_t bincount()
const = 0;
301 virtual std::int64_t samplecount()
const = 0;
302 virtual double minvalue()
const = 0;
303 virtual double maxvalue()
const = 0;
304 virtual const std::int64_t* bins()
const = 0;
306 virtual void sethisto(
double minvalue,
double maxvalue,
307 const std::int64_t* bins, std::int64_t bincount) = 0;
317 virtual void read(
const std::shared_ptr<FileADT>& file, std::int64_t offset, std::int64_t size) = 0;
318 virtual void byteswap() = 0;
320 virtual std::uint64_t lookupLinearIndex(std::int64_t index)
const = 0;
321 virtual std::vector<std::uint64_t>& lup() = 0;
322 virtual std::vector<std::uint64_t>& lupend() = 0;
323 virtual const std::vector<std::uint64_t>& lup()
const = 0;
324 virtual const std::vector<std::uint64_t>& lupend()
const = 0;
336 static std::shared_ptr<IFileHeaderAccess> createFileHeader();
337 static std::shared_ptr<IOffsetHeaderAccess> createOffsetHeader(std::uint32_t);
338 static std::shared_ptr<IInfoHeaderAccess> createInfoHeader(std::uint32_t);
339 static std::shared_ptr<IHistHeaderAccess> createHistHeader(std::uint32_t);
340 static std::shared_ptr<ILookupTableAccess> createAlphaLookup(std::uint32_t);
341 static std::shared_ptr<ILookupTableAccess> createBrickLookup(std::uint32_t);
354 typedef std::function<bool(
int,
const std::string&)> LoggerFn;
357 std::shared_ptr<IFileHeaderAccess> _fh;
358 std::shared_ptr<IOffsetHeaderAccess> _oh;
359 std::shared_ptr<IInfoHeaderAccess> _ih;
360 std::shared_ptr<IHistHeaderAccess> _hh;
361 std::shared_ptr<ILookupTableAccess> _alup;
362 std::shared_ptr<ILookupTableAccess> _blup;
387 const LoggerFn& logger = LoggerFn());
389 const LoggerFn& logger = LoggerFn());
391 void dump(std::ostream& out,
const std::string& prefix =
"");
392 bool errorflag()
const {
return _is_bad; }
393 void set_errorflag(
bool flag) { _is_bad = flag; }
394 LoggerFn set_logger(
const LoggerFn& logger) {
395 LoggerFn old = _loggerfn;
399 void flushMeta(
const std::shared_ptr<FileADT>& file);
401 bool _logger(
int priority,
const std::string& ss = std::string())
const;
402 bool _logger(
int priority,
const std::ios& ss)
const;
403 void initFromOpenFile(
const std::shared_ptr<FileADT>&);