file_storage.h

Peter Minin, 2013-12-15 09:35 pm

Download (1.8 kB)

 
1
#ifndef FILE_STORAGE_H
2
#define FILE_STORAGE_H
3
4
#include <vector>
5
#include <iostream>
6
#include <opencv2/opencv.hpp>
7
8
template<class T> inline void WriteVariable(std::ostream& out, const T& var) {
9
        out.write(reinterpret_cast<const char*>(&var), sizeof(T));
10
}
11
12
template<class T> inline void ReadVariable(std::istream& in, T& var) {
13
        in.read(reinterpret_cast<char*>(&var), sizeof(T));
14
}
15
16
template<class T> inline T ReadVariable(std::istream& in) {
17
        T val;
18
        in.read(reinterpret_cast<char*>(&val), sizeof(T));
19
        return val;
20
}
21
22
template<> void WriteVariable<cv::Mat>(std::ostream& out, const cv::Mat& mat);
23
template<> void ReadVariable<cv::Mat>(std::istream& in, cv::Mat& mat);
24
template<> void ReadVariable<CvMat*>(std::istream& in, CvMat*& mat);
25
template<> void WriteVariable<cv::PCA>(std::ostream& out, const cv::PCA& pca);
26
template<> void ReadVariable<cv::PCA>(std::istream& in, cv::PCA& pca);
27
28
/// Vectors of vectors not supported
29
template<class T> void WriteVec(std::ostream& out, const std::vector<T>& vec) {
30
        WriteVariable(out, vec.size());
31
        for (size_t i = 0; i < vec.size(); i++)
32
                WriteVariable(out, vec[i]);
33
}
34
35
/// Vectors of vectors not supported
36
template<class T> void ReadVec(std::istream& in, std::vector<T>& vec) {
37
        size_t size;
38
        ReadVariable(in, size);
39
        vec.resize(size);
40
        for (size_t i = 0; i < size; i++) {
41
                T var;
42
                ReadVariable(in, var);
43
                vec[i] = var;
44
        }
45
}
46
47
/// Vectors of vectors not supported
48
template<typename _Tp, int cn>
49
void WriteVec(std::ostream& out, const cv::Vec<_Tp, cn>& vec) {
50
        for (int i = 0; i < cn; ++i)
51
                WriteVariable(out, vec[i]);
52
}
53
54
/// Vectors of vectors not supported
55
template<typename _Tp, int cn>
56
void ReadVec(std::istream& in, cv::Vec<_Tp, cn>& vec) {
57
        for (int i = 0; i < cn; ++i)
58
                ReadVariable(in, vec[i]);
59
}
60
61
#endif /* FILE_STORAGE_H */