opencv/modules/matlab/io/MatlabIO.hpp

82 lines
1.8 KiB
C++

#ifndef MATLAB_IO_HPP_
#define MATLAB_IO_HPP_
#include <opencv2/core.hpp>
#include "map.hpp"
namespace Matlab {
namespace IO {
static const int VERSION_5 = 5;
static const int VERSION_73 = 73;
}
class Index {
private:
//! the name of the field (if associative container)
std::string name_;
//! beginning of the data field in the file
size_t begin_;
//! address after the last data field
size_t end_;
//! Matlab stored-type
int stored_type_;
//! Matlab actual type (sometimes compression is used)
int type_;
//! is the field compressed?
bool compressed_;
//! are the descendents associative (mappings)
bool associative_;
//! the descendents of this node
union {
//! valid if the container is a sequence (list)
std::vector<Index> sequence_;
//! valid if the container is a mapping (associative)
Map<std::string, Index> mapping_;
};
};
class MatlabIONode {
};
class MatlabIO {
private:
// member variables
static const int HEADER_LENGTH = 116;
static const int SUBSYS_LENGTH = 8;
static const int ENDIAN_LENGTH = 2;
char header_[HEADER_LENGTH+1];
char subsys_[SUBSYS_LENGTH+1];
char endian_[ENDIAN_LENGTH+1];
int version_;
bool byte_swap_;
std::string filename_;
// uses a custom stream buffer for fast memory-mapped access and endian swapping
std::fstream stream_;
//! the main file index. The top-level index must be associative
Index index_;
// internal methods
void getFileHeader();
void setFileHeader();
void getHeader();
void setHeader();
public:
// construct/destruct
MatlabIO() {}
~MatlabIO {}
// global read and write routines
std::string filename(void);
bool open(const std::string& filename, const std::string& mode);
// index the contents of the file
void index();
// print all of the top-level variables in the file
}
#endif