From 16832f98783c8bfdbabaf0844d918e7eb550b9d9 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Wed, 18 Jul 2018 10:34:34 +0200 Subject: [PATCH] Add helper functions for serialization of simple data types Signed-off-by: Stefan Weil --- src/ccutil/serialis.cpp | 65 ++++++++++++++++++++++++++++++++++++++++- src/ccutil/serialis.h | 26 +++++++++++++++++ 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/src/ccutil/serialis.cpp b/src/ccutil/serialis.cpp index a6b036b9de..fef6029a78 100644 --- a/src/ccutil/serialis.cpp +++ b/src/ccutil/serialis.cpp @@ -24,6 +24,70 @@ namespace tesseract { +bool DeSerialize(FILE* fp, char* data, size_t n) { + return fread(data, sizeof(*data), n, fp) == n; +} + +bool DeSerialize(FILE* fp, float* data, size_t n) { + return fread(data, sizeof(*data), n, fp) == n; +} + +bool DeSerialize(FILE* fp, int8_t* data, size_t n) { + return fread(data, sizeof(*data), n, fp) == n; +} + +bool DeSerialize(FILE* fp, int16_t* data, size_t n) { + return fread(data, sizeof(*data), n, fp) == n; +} + +bool DeSerialize(FILE* fp, int32_t* data, size_t n) { + return fread(data, sizeof(*data), n, fp) == n; +} + +bool DeSerialize(FILE* fp, uint8_t* data, size_t n) { + return fread(data, sizeof(*data), n, fp) == n; +} + +bool DeSerialize(FILE* fp, uint16_t* data, size_t n) { + return fread(data, sizeof(*data), n, fp) == n; +} + +bool DeSerialize(FILE* fp, uint32_t* data, size_t n) { + return fread(data, sizeof(*data), n, fp) == n; +} + +bool Serialize(FILE* fp, const char* data, size_t n) { + return fwrite(data, sizeof(*data), n, fp) == n; +} + +bool Serialize(FILE* fp, const float* data, size_t n) { + return fwrite(data, sizeof(*data), n, fp) == n; +} + +bool Serialize(FILE* fp, const int8_t* data, size_t n) { + return fwrite(data, sizeof(*data), n, fp) == n; +} + +bool Serialize(FILE* fp, const int16_t* data, size_t n) { + return fwrite(data, sizeof(*data), n, fp) == n; +} + +bool Serialize(FILE* fp, const int32_t* data, size_t n) { + return fwrite(data, sizeof(*data), n, fp) == n; +} + +bool Serialize(FILE* fp, const uint8_t* data, size_t n) { + return fwrite(data, sizeof(*data), n, fp) == n; +} + +bool Serialize(FILE* fp, const uint16_t* data, size_t n) { + return fwrite(data, sizeof(*data), n, fp) == n; +} + +bool Serialize(FILE* fp, const uint32_t* data, size_t n) { + return fwrite(data, sizeof(*data), n, fp) == n; +} + TFile::TFile() : offset_(0), data_(nullptr), @@ -172,5 +236,4 @@ int TFile::FWrite(const void* buffer, size_t size, int count) { return count; } - } // namespace tesseract. diff --git a/src/ccutil/serialis.h b/src/ccutil/serialis.h index de9e0eb875..ed9603bdb8 100644 --- a/src/ccutil/serialis.h +++ b/src/ccutil/serialis.h @@ -38,6 +38,12 @@ Replace with "". may be an arbitrary number of tokens namespace tesseract { +// Return number of elements of an array. +template +constexpr size_t countof(T const (&)[N]) noexcept { + return N; +} + // Function to read a GenericVector from a whole file. // Returns false on failure. typedef bool (*FileReader)(const STRING& filename, GenericVector* data); @@ -46,6 +52,26 @@ typedef bool (*FileReader)(const STRING& filename, GenericVector* data); typedef bool (*FileWriter)(const GenericVector& data, const STRING& filename); +// Deserialize data from file. +bool DeSerialize(FILE* fp, char* data, size_t n = 1); +bool DeSerialize(FILE* fp, float* data, size_t n = 1); +bool DeSerialize(FILE* fp, int8_t* data, size_t n = 1); +bool DeSerialize(FILE* fp, int16_t* data, size_t n = 1); +bool DeSerialize(FILE* fp, int32_t* data, size_t n = 1); +bool DeSerialize(FILE* fp, uint8_t* data, size_t n = 1); +bool DeSerialize(FILE* fp, uint16_t* data, size_t n = 1); +bool DeSerialize(FILE* fp, uint32_t* data, size_t n = 1); + +// Serialize data to file. +bool Serialize(FILE* fp, const char* data, size_t n = 1); +bool Serialize(FILE* fp, const float* data, size_t n = 1); +bool Serialize(FILE* fp, const int8_t* data, size_t n = 1); +bool Serialize(FILE* fp, const int16_t* data, size_t n = 1); +bool Serialize(FILE* fp, const int32_t* data, size_t n = 1); +bool Serialize(FILE* fp, const uint8_t* data, size_t n = 1); +bool Serialize(FILE* fp, const uint16_t* data, size_t n = 1); +bool Serialize(FILE* fp, const uint32_t* data, size_t n = 1); + // Simple file class. // Allows for portable file input from memory and from foreign file systems. class TFile {