#ifndef FILE_STORAGE_H #define FILE_STORAGE_H #include #include #include template inline void WriteVariable(std::ostream& out, const T& var) { out.write(reinterpret_cast(&var), sizeof(T)); } template inline void ReadVariable(std::istream& in, T& var) { in.read(reinterpret_cast(&var), sizeof(T)); } template inline T ReadVariable(std::istream& in) { T val; in.read(reinterpret_cast(&val), sizeof(T)); return val; } template<> void WriteVariable(std::ostream& out, const cv::Mat& mat); template<> void ReadVariable(std::istream& in, cv::Mat& mat); template<> void ReadVariable(std::istream& in, CvMat*& mat); template<> void WriteVariable(std::ostream& out, const cv::PCA& pca); template<> void ReadVariable(std::istream& in, cv::PCA& pca); /// Vectors of vectors not supported template void WriteVec(std::ostream& out, const std::vector& vec) { WriteVariable(out, vec.size()); for (size_t i = 0; i < vec.size(); i++) WriteVariable(out, vec[i]); } /// Vectors of vectors not supported template void ReadVec(std::istream& in, std::vector& vec) { size_t size; ReadVariable(in, size); vec.resize(size); for (size_t i = 0; i < size; i++) { T var; ReadVariable(in, var); vec[i] = var; } } /// Vectors of vectors not supported template void WriteVec(std::ostream& out, const cv::Vec<_Tp, cn>& vec) { for (int i = 0; i < cn; ++i) WriteVariable(out, vec[i]); } /// Vectors of vectors not supported template void ReadVec(std::istream& in, cv::Vec<_Tp, cn>& vec) { for (int i = 0; i < cn; ++i) ReadVariable(in, vec[i]); } #endif /* FILE_STORAGE_H */