35 #pragma warning(disable:4250) // inherits via dominance
208 enum class OPENZGY_API SampleDataType
216 namespace Formatters {
217 extern OPENZGY_API std::ostream&
operator<<(std::ostream& os, SampleDataType value);
229 enum class OPENZGY_API UnitDimension
237 namespace Formatters {
238 extern OPENZGY_API std::ostream&
operator<<(std::ostream& os, UnitDimension value);
249 enum class OPENZGY_API DecimationType
268 namespace Formatters {
269 extern OPENZGY_API std::ostream&
operator<<(std::ostream& os, DecimationType value);
284 : cnt(0), sum(0), ssq(0), min(0), max(0)
290 double sum_in,
double ssq_in,
291 double min_in,
double max_in)
292 : cnt(cnt_in), sum(sum_in), ssq(ssq_in), min(min_in), max(max_in)
337 std::vector<std::int64_t>
bins;
339 : samplecount(0), minvalue(0), maxvalue(0), bins()
345 double minvalue_in,
double maxvalue_in,
346 const std::vector<std::int64_t>& bins_in)
347 : samplecount(samplecount_in)
348 , minvalue(minvalue_in)
349 , maxvalue(maxvalue_in)
391 typedef double float64_t;
392 typedef std::array<std::array<float64_t,2>,4> corners_t;
394 typedef std::pair<std::shared_ptr<const void>, std::int64_t>
rawdata_t;
399 friend class ::Test::ZgyWriterMock;
401 std::string _filename;
403 compressor_t _compressor;
404 compressor_t _lodcompressor;
405 std::array<std::int64_t,3> _size;
406 std::array<std::int64_t,3> _bricksize;
407 SampleDataType _datatype;
408 std::array<float,2> _datarange;
409 UnitDimension _zunitdim, _hunitdim;
410 std::string _zunitname, _hunitname;
411 double _zunitfactor, _hunitfactor;
412 float _zstart, _zinc;
413 std::array<float,2> _annotstart, _annotinc;
419 , _iocontext(
nullptr)
423 , _bricksize{64,64,64}
424 , _datatype(SampleDataType::float32)
426 , _zunitdim(UnitDimension::unknown)
427 , _hunitdim(UnitDimension::unknown)
436 , _corners{0,0,0,0,0,0,0,0}
445 out <<
"ZgyWriterArgs\n"
446 <<
" filename: \"" << _filename <<
"\"\n"
447 <<
" iocontext: " << (_iocontext ?
"*" :
"(null)") <<
"\n"
448 <<
" compressor: " << (_compressor ?
"*" :
"(null)") <<
"\n"
449 <<
" lodcompress: " << (_lodcompressor ?
"*" :
"(null)") <<
"\n"
450 <<
" size: (" << _size[0] <<
"," << _size[1] <<
"," << _size[2] <<
")\n"
451 <<
" bricksize: (" << _bricksize[0] <<
"," << _bricksize[1] <<
"," << _bricksize[2] <<
")\n"
452 <<
" datatype: " <<
int(_datatype) <<
"\n"
453 <<
" datarange: " << _datarange[0] <<
" to " << _datarange[1] <<
"\n"
454 <<
" zunit: " << int(_zunitdim) <<
" \"" << _zunitname <<
"\" " << _zunitfactor <<
"\n"
455 <<
" hunit: " << int(_hunitdim) <<
" \"" << _hunitname <<
"\" " << _hunitfactor <<
"\n"
456 <<
" ilstart/inc: " << _annotstart[0] <<
" / " << _annotinc[0] <<
"\n"
457 <<
" xlstart/inc: " << _annotstart[1] <<
" / " << _annotinc[1] <<
"\n"
458 <<
" zstart/inc: " << _zstart <<
" / " << _zinc <<
"\n"
459 <<
" corner0: " << _corners[0][0] <<
", " << _corners[0][1] <<
"\n"
460 <<
" corner1: " << _corners[1][0] <<
", " << _corners[1][1] <<
"\n"
461 <<
" corner2: " << _corners[2][0] <<
", " << _corners[2][1] <<
"\n"
462 <<
" corner3: " << _corners[3][0] <<
", " << _corners[3][1] <<
"\n";
486 ZgyWriterArgs& compressor(
const std::string& name,
const std::vector<std::string>& args);
501 ZgyWriterArgs& lodcompressor(
const std::string& name,
const std::vector<std::string>& args);
514 ZgyWriterArgs&
size(std::int64_t ni, std::int64_t nj, std::int64_t nk) { _size[0]=ni; _size[1]=nj; _size[2]=nk;
return *
this; }
519 ZgyWriterArgs&
bricksize(std::int64_t ni, std::int64_t nj, std::int64_t nk) { _bricksize[0]=ni; _bricksize[1]=nj; _bricksize[2]=nk;
return *
this; }
539 _zunitdim = dimension;
541 _zunitfactor = factor;
551 _hunitdim = dimension;
553 _hunitfactor = factor;
588 ZgyWriterArgs& metafrom(
const std::shared_ptr<OpenZGY::IZgyReader>&);
600 typedef std::int8_t int8_t;
601 typedef std::int16_t int16_t;
602 typedef std::int32_t int32_t;
603 typedef std::int64_t int64_t;
604 typedef float float32_t;
605 typedef double float64_t;
606 typedef std::array<int64_t,3> size3i_t;
607 typedef std::array<std::array<float64_t,2>,4> corners_t;
609 typedef std::pair<std::shared_ptr<const void>, std::int64_t>
rawdata_t;
614 virtual size3i_t size()
const = 0;
615 virtual SampleDataType datatype()
const = 0;
616 virtual std::array<float32_t,2> datarange()
const = 0;
617 virtual UnitDimension zunitdim()
const = 0;
618 virtual UnitDimension hunitdim()
const = 0;
619 virtual std::string zunitname()
const = 0;
620 virtual std::string hunitname()
const = 0;
621 virtual float64_t zunitfactor()
const = 0;
622 virtual float64_t hunitfactor()
const = 0;
623 virtual float32_t zstart()
const = 0;
624 virtual float32_t zinc()
const = 0;
625 virtual std::array<float32_t,2> annotstart()
const = 0;
626 virtual std::array<float32_t,2> annotinc()
const = 0;
627 virtual const corners_t& corners()
const = 0;
628 virtual const corners_t& indexcorners()
const = 0;
629 virtual const corners_t& annotcorners()
const = 0;
630 virtual size3i_t bricksize()
const = 0;
631 virtual std::vector<size3i_t> brickcount()
const = 0;
632 virtual int32_t nlods()
const = 0;
633 virtual void meta()
const = 0;
634 virtual int32_t numthreads()
const = 0;
635 virtual void set_numthreads(int32_t) = 0;
636 virtual void dump(std::ostream&)
const = 0;
666 virtual void transform(
const corners_t& from,
const corners_t& to, std::vector<std::array<float64_t,2>>&)
const = 0;
671 virtual std::array<float64_t,2> transform1(
const corners_t& from,
const corners_t& to,
const std::array<float64_t,2>&)
const = 0;
672 virtual std::array<float64_t,2> annotToIndex(
const std::array<float64_t,2>&)
const = 0;
673 virtual std::array<float64_t,2> annotToWorld(
const std::array<float64_t,2>&)
const = 0;
674 virtual std::array<float64_t,2> indexToAnnot(
const std::array<float64_t,2>&)
const = 0;
675 virtual std::array<float64_t,2> indexToWorld(
const std::array<float64_t,2>&)
const = 0;
676 virtual std::array<float64_t,2> worldToAnnot(
const std::array<float64_t,2>&)
const = 0;
677 virtual std::array<float64_t,2> worldToIndex(
const std::array<float64_t,2>&)
const = 0;
696 virtual void read(
const size3i_t& start,
const size3i_t& size,
float* data,
int lod = 0)
const = 0;
698 virtual void read(
const size3i_t& start,
const size3i_t& size, std::int16_t* data,
int lod = 0)
const = 0;
700 virtual void read(
const size3i_t& start,
const size3i_t& size, std::int8_t* data,
int lod = 0)
const = 0;
702 virtual std::pair<bool,double> readconst(
const size3i_t& start,
const size3i_t& size,
int lod = 0,
bool as_float =
true)
const = 0;
704 virtual void close() = 0;
706 static std::shared_ptr<IZgyReader> open(
const std::string& filename,
const IOContext* iocontext =
nullptr);
731 virtual void write(
const size3i_t& start,
const size3i_t& size,
const float* data)
const = 0;
732 virtual void write(
const size3i_t& start,
const size3i_t& size,
const std::int16_t *data)
const = 0;
733 virtual void write(
const size3i_t& start,
const size3i_t& size,
const std::int8_t* data)
const = 0;
734 virtual void writeconst(
const size3i_t& start,
const size3i_t& size,
const float* data)
const = 0;
736 virtual void writeconst(
const size3i_t& start,
const size3i_t& size,
const std::int16_t * data)
const = 0;
737 virtual void writeconst(
const size3i_t& start,
const size3i_t& size,
const std::int8_t* data)
const = 0;
738 virtual void finalize(
740 const std::vector<DecimationType>& decimation = std::vector<DecimationType>(),
741 const std::function<
bool(std::int64_t,std::int64_t)>& progress =
nullptr,
742 bool force =
false) = 0;
744 virtual void close_incomplete() = 0;
746 virtual void close() = 0;
748 virtual bool errorflag()
const = 0;
749 virtual void set_errorflag(
bool) = 0;
752 static std::shared_ptr<IZgyWriter> open(
const ZgyWriterArgs& args);
771 virtual void deletefile(
const std::string& filename,
bool missing_ok=
true) = 0;
793 static std::shared_ptr<IZgyUtils> utils(
const std::string& prefix,
const IOContext* iocontext);
819 std::ostream& _outfile;
843 bool operator()(std::int64_t done, std::int64_t total);