38a39,40
> #include <gzstream.hh>
>
53c55,60
< {}
---
> {
> for (map_t::iterator i = files.begin(); i != files.end(); i++) {
> if (i->second)
> delete i->second;
> }
> }
54a62,94
> std::ostream *
> OutputDirectory::checkForStdio(const string &name) const
> {
> if (name == "cerr" || name == "stderr")
> return &cerr;
>
> if (name == "cout" || name == "stdout")
> return &cout;
>
> return NULL;
> }
>
> ostream *
> OutputDirectory::openFile(const string &filename,
> ios_base::openmode mode) const
> {
> if (filename.find(".gz", filename.length()-3) < filename.length()) {
> ogzstream *file = new ogzstream(filename.c_str(), mode);
>
> if (!file->is_open())
> fatal("Cannot open file %s", filename);
>
> return file;
> } else {
> ofstream *file = new ofstream(filename.c_str(), mode);
>
> if (!file->is_open())
> fatal("Cannot open file %s", filename);
>
> return file;
> }
> }
>
69c109
< OutputDirectory::directory()
---
> OutputDirectory::directory() const
77,78c117,118
< string
< OutputDirectory::resolve(const string &name)
---
> inline string
> OutputDirectory::resolve(const string &name) const
86,87c126,128
< if (name == "cerr" || name == "stderr")
< return &cerr;
---
> ostream *file = checkForStdio(name);
> if (file)
> return file;
89,90c130,133
< if (name == "cout" || name == "stdout")
< return &cout;
---
> string filename = resolve(name);
> ios_base::openmode mode =
> ios::trunc | binary ? ios::binary : (ios::openmode)0;
> file = openFile(filename, mode);
92,96d134
< ofstream *file = new ofstream(resolve(name).c_str(),
< ios::trunc | binary ? ios::binary : (ios::openmode)0);
< if (!file->is_open())
< fatal("Cannot open file %s", name);
<
103,104c141,143
< if (name == "cerr" || name == "stderr")
< return &cerr;
---
> ostream *file = checkForStdio(name);
> if (file)
> return file;
106,108d144
< if (name == "cout" || name == "stdout")
< return &cout;
<
114,117c150
< ofstream *file = new ofstream(filename.c_str(), ios::trunc);
< if (!file->is_open())
< fatal("Cannot open file %s", filename);
<
---
> file = openFile(filename);