| // $Id: InputFileStream.h 2939 2010-02-24 11:15:44Z jfouet $ | |
| /*********************************************************************** | |
| Moses - factored phrase-based language decoder | |
| Copyright (C) 2006 University of Edinburgh | |
| This library is free software; you can redistribute it and/or | |
| modify it under the terms of the GNU Lesser General Public | |
| License as published by the Free Software Foundation; either | |
| version 2.1 of the License, or (at your option) any later version. | |
| This library is distributed in the hope that it will be useful, | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| Lesser General Public License for more details. | |
| You should have received a copy of the GNU Lesser General Public | |
| License along with this library; if not, write to the Free Software | |
| Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| ***********************************************************************/ | |
| namespace probingpt | |
| { | |
| /** Version of std::ostream with transparent compression. | |
| * | |
| * Transparently compresses output when writing to a file whose name ends in | |
| * ".gz". Or, writes to stdout instead of a file when given a filename | |
| * consisting of just a dash ("-"). | |
| */ | |
| class OutputFileStream: public boost::iostreams::filtering_ostream | |
| { | |
| private: | |
| /** File that needs flushing & closing when we close this stream. | |
| * | |
| * Is NULL when no file is opened, e.g. when writing to standard output. | |
| */ | |
| std::ofstream *m_outFile; | |
| /// Is this stream open? | |
| bool m_open; | |
| public: | |
| /** Create an unopened OutputFileStream. | |
| * | |
| * Until it's been opened, nothing can be done with this stream. | |
| */ | |
| OutputFileStream(); | |
| /// Create an OutputFileStream, and open it by calling Open(). | |
| OutputFileStream(const std::string &filePath); | |
| virtual ~OutputFileStream(); | |
| // TODO: Can we please just always throw an exception when this fails? | |
| /** Open stream. | |
| * | |
| * If filePath is "-" (just a dash), this opens the stream for writing to | |
| * standard output. Otherwise, it opens the given file. If the filename | |
| * has the ".gz" suffix, output will be transparently compressed. | |
| * | |
| * Call Close() to close the file. | |
| * | |
| * Returns whether opening the file was successful. It may also throw an | |
| * exception on failure. | |
| */ | |
| bool Open(const std::string &filePath); | |
| /// Flush and close stream. After this, the stream can be opened again. | |
| void Close(); | |
| }; | |
| } | |