11 #ifndef odc_core_Codec_H
12 #define odc_core_Codec_H
23 namespace eckit {
class DataHandle; }
38 virtual std::unique_ptr<Codec>
clone();
42 char*
encode(
char* p,
const double&
d) {
return reinterpret_cast<char*
>(
encode(
reinterpret_cast<uint8_t*
>(p),
d)); }
43 virtual unsigned char*
encode(
unsigned char* p,
const double&
d) = 0;
44 virtual void decode(
double* out) = 0;
82 throw eckit::SeriousBug(
"Data size cannot be changed from 1x8 bytes", Here());
87 virtual void print(std::ostream& s)
const;
120 template <
typename ByteOrder>
static void count(void *counter, const double *data, size_t n)
Codec(const std::string &name, api::ColumnType type)
virtual void decode(double *out)=0
void setDataStream(GeneralDataStream &ds)
virtual size_t numStrings() const
virtual size_t dataSizeDoubles() const
virtual void copyStrings(Codec &rhs)
const std::string & name() const
virtual void print(std::ostream &s) const
double missingValue() const
void save(GeneralDataStream &ds)
char * encode(char *p, const double &d)
virtual void clearDataStream()=0
int32_t hasMissing() const
virtual void gatherStats(const double &v)
friend std::ostream & operator<<(std::ostream &s, const Codec &p)
void load(GeneralDataStream &ds)
virtual std::unique_ptr< Codec > clone()
virtual void dataSizeDoubles(size_t count)
virtual unsigned char * encode(unsigned char *p, const double &d)=0
Codec & operator=(const Codec &)
DataStream< ByteOrder > * ds_
void clearDataStream() override
DataStreamCodec(const std::string &name, api::ColumnType type)
void save(DataStream< ByteOrder > &ds) override
void load(DataStream< ByteOrder > &ds) override
void setDataStream(DataStream< ByteOrder > &ds) override
DataStream< ByteOrder > & ds()