mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-09-11 19:27:11 +03:00
66 lines
1.3 KiB
C++
66 lines
1.3 KiB
C++
#include "FileStream.h"
|
|
|
|
#include <stdexcept>
|
|
#include "gzfilebuf.h"
|
|
|
|
using namespace std;
|
|
|
|
namespace {
|
|
bool IsGzipFile(const std::string &filename) {
|
|
return filename.size() > 3 &&
|
|
filename.substr(filename.size() - 3, 3) == ".gz";
|
|
}
|
|
} // namespace
|
|
|
|
inputfilestream::inputfilestream(const std::string &filePath)
|
|
: std::istream(0), m_streambuf(0), is_good(false)
|
|
{
|
|
// check if file is readable
|
|
std::filebuf* fb = new std::filebuf();
|
|
is_good = (fb->open(filePath.c_str(), std::ios::in) != NULL);
|
|
|
|
if (IsGzipFile(filePath)) {
|
|
fb->close();
|
|
delete fb;
|
|
m_streambuf = new gzfilebuf(filePath.c_str());
|
|
} else {
|
|
m_streambuf = fb;
|
|
}
|
|
this->init(m_streambuf);
|
|
}
|
|
|
|
inputfilestream::~inputfilestream()
|
|
{
|
|
delete m_streambuf;
|
|
m_streambuf = 0;
|
|
}
|
|
|
|
void inputfilestream::close()
|
|
{
|
|
}
|
|
|
|
outputfilestream::outputfilestream(const std::string &filePath)
|
|
: std::ostream(0), m_streambuf(0), is_good(false)
|
|
{
|
|
// check if file is readable
|
|
std::filebuf* fb = new std::filebuf();
|
|
is_good = (fb->open(filePath.c_str(), std::ios::out) != NULL);
|
|
|
|
if (IsGzipFile(filePath)) {
|
|
throw runtime_error("Output to a zipped file not supported!");
|
|
} else {
|
|
m_streambuf = fb;
|
|
}
|
|
this->init(m_streambuf);
|
|
}
|
|
|
|
outputfilestream::~outputfilestream()
|
|
{
|
|
delete m_streambuf;
|
|
m_streambuf = 0;
|
|
}
|
|
|
|
void outputfilestream::close()
|
|
{
|
|
}
|