11 #ifndef odc_core_codec_Integer_H
12 #define odc_core_codec_Integer_H
29 template<
typename ByteOrder,
typename ValueType>
41 this->
min_ = minmaxmissing;
42 this->
max_ = minmaxmissing;
51 static_assert(
sizeof(ValueType) ==
sizeof(v),
"unsafe casting check");
52 const ValueType&
val(
reinterpret_cast<const ValueType&
>(v));
60 template <
typename ByteOrder,
62 typename InternalValueType,
73 unsigned char*
encode(
unsigned char* p,
const double&
d)
override {
74 static_assert(
sizeof(ValueType) ==
sizeof(
d),
"unsafe casting check");
76 const ValueType&
val(
reinterpret_cast<const ValueType&
>(
d));
77 InternalValueType s =
val - this->
min_;
79 ::memcpy(p, &s,
sizeof(s));
84 static_assert(
sizeof(ValueType) ==
sizeof(out),
"unsafe casting check");
86 ValueType* val_out =
reinterpret_cast<ValueType*
>(out);
89 (*val_out) = s + this->
min_;
93 this->
ds().advance(
sizeof(InternalValueType));
100 template <
typename ByteOrder,
102 typename InternalValueType,
113 unsigned char*
encode(
unsigned char* p,
const double&
d)
override {
114 static_assert(
sizeof(ValueType) ==
sizeof(
d),
"unsafe casting check");
116 const ValueType&
val(
reinterpret_cast<const ValueType&
>(
d));
117 InternalValueType s =
val;
119 ::memcpy(p, &s,
sizeof(s));
120 return p +
sizeof(s);
124 static_assert(
sizeof(ValueType) ==
sizeof(out),
"unsafe casting check");
126 ValueType* val_out =
reinterpret_cast<ValueType*
>(out);
133 this->
ds().advance(
sizeof(InternalValueType));
139 template<
typename ByteOrder,
typename ValueType>
147 template<
typename ByteOrder,
typename ValueType>
149 constexpr
static const char*
codec_name() {
return "int16"; }
155 template<
typename ByteOrder,
typename ValueType>
157 constexpr
static const char*
codec_name() {
return "int32"; }
static double integerMDI()
void gatherStats(const double &v) override
~BaseCodecInteger() override
BaseCodecInteger(api::ColumnType type, const std::string &name, double minmaxmissing=odc::MDI::integerMDI())
void decode(double *out) override
CodecIntegerDirect(api::ColumnType type)
unsigned char * encode(unsigned char *p, const double &d) override
~CodecIntegerDirect() override
CodecIntegerOffset(api::ColumnType type)
unsigned char * encode(unsigned char *p, const double &d) override
~CodecIntegerOffset() override
void decode(double *out) override
const std::string & name() const
virtual void gatherStats(const double &v)
DataStreamCodec(const std::string &name, api::ColumnType type)
DataStream< ByteOrder > & ds()
constexpr static const char * codec_name()
constexpr static const char * codec_name()
constexpr static const char * codec_name()