On Tue, Aug 17, 2010 at 09:46:22AM -0000, nore...@launchpad.net wrote: > File::File(const std::string filename, std::string encoding) > { > - // Get directory and extension > + // Get file path and extension > const boost::filesystem::path path(filename); > - const boost::filesystem::path directory = path.parent_path(); > - const std::string extension = path.extension(); > + const std::string extension = boost::filesystem::extension(path);
Is there a difference between the member function and the free function? > - // Create directory if necessary > - if (!is_directory(directory)) > + // Create directory if we have a parent path > + if ( path.has_parent_path() ) > { > + const boost::filesystem::path directory = path.parent_path(); > cout << "Creating directory \"" << directory.string() << "\"." << endl; > boost::filesystem::create_directories(directory); > } What was the problem here? -- Anders > @@ -49,24 +49,24 @@ > // Get suffix after discarding .gz > const std::string ext = > boost::filesystem::extension(boost::filesystem::basename(path)); > if (ext == ".xml") > - file = new XMLFile(filename, true); > + file.reset(new XMLFile(filename, true)); > else > error("Unknown file type for \"%s\".", filename.c_str()); > } > else if (extension == ".xml") > - file = new XMLFile(filename, false); > + file.reset(new XMLFile(filename, false)); > else if (extension == ".m") > - file = new OctaveFile(filename); > + file.reset(new OctaveFile(filename)); > else if (extension == ".py") > - file = new PythonFile(filename); > + file.reset(new PythonFile(filename)); > else if (extension == ".pvd") > - file = new VTKFile(filename, encoding); > + file.reset(new VTKFile(filename, encoding)); > else if (extension == ".raw") > - file = new RAWFile(filename); > + file.reset(new RAWFile(filename)); > else if (extension == ".xyz") > - file = new XYZFile(filename); > + file.reset(new XYZFile(filename)); > else if (extension == ".bin") > - file = new BinaryFile(filename); > + file.reset(new BinaryFile(filename)); > else > error("Unknown file type for \"%s\".", filename.c_str()); > } > @@ -76,44 +76,42 @@ > switch (type) > { > case xml: > - file = new XMLFile(filename, false); > + file.reset(new XMLFile(filename, false)); > break; > case matlab: > - file = new MatlabFile(filename); > + file.reset(new MatlabFile(filename)); > break; > case octave: > - file = new OctaveFile(filename); > + file.reset(new OctaveFile(filename)); > break; > case python: > - file = new PythonFile(filename); > + file.reset(new PythonFile(filename)); > break; > case vtk: > - file = new VTKFile(filename, encoding); > + file.reset(new VTKFile(filename, encoding)); > break; > case raw: > - file = new RAWFile(filename); > + file.reset(new RAWFile(filename)); > break; > case xyz: > - file = new XYZFile(filename); > + file.reset(new XYZFile(filename)); > break; > case binary: > - file = new BinaryFile(filename); > + file.reset(new BinaryFile(filename)); > break; > default: > - file = 0; > error("Unknown file type for \"%s\".", filename.c_str()); > } > } > > //----------------------------------------------------------------------------- > File::File(std::ostream& outstream) > { > - file = new XMLFile(outstream); > + file.reset(new XMLFile(outstream)); > } > > //----------------------------------------------------------------------------- > File::~File() > { > - delete file; > - file = 0; > + // Do nothing > } > > //----------------------------------------------------------------------------- > void File::operator<<(const Function& u) > @@ -135,7 +133,10 @@ > std::ifstream file(filename.c_str()); > if (!file.is_open()) > return false; > - file.close(); > - return true; > + else > + { > + file.close(); > + return true; > + } > } > > //----------------------------------------------------------------------------- > > === modified file 'dolfin/io/File.h' > --- dolfin/io/File.h 2010-06-02 11:31:31 +0000 > +++ dolfin/io/File.h 2010-08-17 09:43:44 +0000 > @@ -15,6 +15,7 @@ > #include <ostream> > #include <string> > #include <utility> > +#include <boost/scoped_ptr.hpp> > #include "GenericFile.h" > > namespace dolfin > @@ -72,7 +73,7 @@ > private: > > // Pointer to implementation (envelop-letter design) > - GenericFile* file; > + boost::scoped_ptr<GenericFile> file; > > }; > >
signature.asc
Description: Digital signature
_______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : dolfin@lists.launchpad.net Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp