From d3da23149c4abb6c85ff590f7aaeb936164c0bcf Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Sat, 5 Oct 2019 10:27:35 +0200 Subject: [PATCH] add configBitstreamParser an base class for all bitstream file parser --- configBitstreamParser.cpp | 28 ++++++++++++++++++++++++++++ configBitstreamParser.hpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 configBitstreamParser.cpp create mode 100644 configBitstreamParser.hpp diff --git a/configBitstreamParser.cpp b/configBitstreamParser.cpp new file mode 100644 index 0000000..a04bc15 --- /dev/null +++ b/configBitstreamParser.cpp @@ -0,0 +1,28 @@ +#include +#include +#include + +#include "configBitstreamParser.hpp" + +using namespace std; + +ConfigBitstreamParser::ConfigBitstreamParser(string filename, int mode): + _filename(filename), _bit_length(0), + _file_size(0), _fd(filename, + ifstream::in | (ios_base::openmode)mode), _bit_data() +{ + if (!_fd.is_open()) { + cerr << "Error: fail to open " << _filename << endl; + throw std::exception(); + } + _fd.seekg(0, _fd.end); + _file_size = _fd.tellg(); + _fd.seekg(0, _fd.beg); + + _bit_data.reserve(_file_size); +} + +ConfigBitstreamParser::~ConfigBitstreamParser() +{ + _fd.close(); +} diff --git a/configBitstreamParser.hpp b/configBitstreamParser.hpp new file mode 100644 index 0000000..c9273a7 --- /dev/null +++ b/configBitstreamParser.hpp @@ -0,0 +1,29 @@ +#ifndef CONFIGBITSTREAMPARSER_H +#define CONFIGBITSTREAMPARSER_H + +#include +#include +#include + +class ConfigBitstreamParser { + public: + ConfigBitstreamParser(std::string filename, int mode = ASCII_MODE); + ~ConfigBitstreamParser(); + virtual int parse() = 0; + uint8_t *getData() {return (uint8_t*)_bit_data.c_str();} + int getLength() {return _bit_length;} + + enum { + ASCII_MODE = 0, + BIN_MODE = std::ifstream::binary + }; + + protected: + std::string _filename; + int _bit_length; + int _file_size; + std::ifstream _fd; + std::string _bit_data; +}; + +#endif