X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmisc%2Fsg_path.hxx;h=0684d5701927b5f7b0bb320218a1b6dd06280ec3;hb=e4e31be7d43569a92a5d9fa7e784381b66cbd95a;hp=f843061bb911c32f49360e9d442bfc9ce691096b;hpb=0911fa4fa2d418fbbbaf8cf9891609aee87b411d;p=simgear.git diff --git a/simgear/misc/sg_path.hxx b/simgear/misc/sg_path.hxx index f843061b..0684d570 100644 --- a/simgear/misc/sg_path.hxx +++ b/simgear/misc/sg_path.hxx @@ -18,10 +18,9 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -32,12 +31,10 @@ #include #include -#include STL_STRING +#include #include -SG_USING_STD(string); - #ifdef _MSC_VER typedef int mode_t; #endif @@ -54,18 +51,30 @@ class SGPath { private: - string path; + std::string path; public: /** Default constructor */ SGPath(); + /** Copy contructor */ + SGPath(const SGPath& p); + + SGPath& operator=(const SGPath& p); + /** * Construct a path based on the starting path provided. * @param p initial path */ - SGPath( const string& p ); + SGPath( const std::string& p ); + + /** + * Construct a path based on the starting path provided and a relative subpath + * @param p initial path + * @param r relative subpath + */ + SGPath( const SGPath& p, const std::string& r ); /** Destructor */ ~SGPath(); @@ -74,61 +83,68 @@ public: * Set path to a new value * @param p new path */ - void set( const string& p ); + void set( const std::string& p ); SGPath& operator= ( const char* p ) { this->set(p); return *this; } /** * Append another piece to the existing path. Inserts a path * separator between the existing component and the new component. * @param p additional path component */ - void append( const string& p ); + void append( const std::string& p ); /** * Append a new piece to the existing path. Inserts a search path * separator to the existing path and the new patch component. * @param p additional path component */ - void add( const string& p ); + void add( const std::string& p ); /** * Concatenate a string to the end of the path without inserting a * path separator. - * @param p addtional path suffix + * @param p additional path suffix */ - void concat( const string& p ); + void concat( const std::string& p ); /** * Get the file part of the path (everything after the last path sep) * @return file string */ - string file() const; + std::string file() const; /** * Get the directory part of the path. * @return directory string */ - string dir() const; + std::string dir() const; /** * Get the base part of the path (everything but the extension.) * @return the base string */ - string base() const; + std::string base() const; /** - * Get the extention part of the path (everything after the final ".") - * @return the extention string + * Get the extension part of the path (everything after the final ".") + * @return the extension string */ - string extension() const; + std::string extension() const; - /** Get the path string + /** + * Get the path string * @return path string */ - string str() const { return path; } + std::string str() const { return path; } - /** Get the path string + /** + * Get the path string * @return path in "C" string (ptr to char array) form. */ - const char* c_str() { return path.c_str(); } + const char* c_str() const { return path.c_str(); } + + /** + * Get the path string in OS native form + */ + std::string str_native() const; /** * Determine if file exists by attempting to fopen it. @@ -138,20 +154,50 @@ public: /** * Create the designated directory. + * @return 0 on success, or <0 on failure. */ - void create_dir(mode_t mode); + int create_dir(mode_t mode); + bool isFile() const; + bool isDir() const; + + /** + * Opposite sense to isAbsolute + */ + bool isRelative() const { return !isAbsolute(); } + + /** + * Is this an absolute path? + * I.e starts with a directory seperator, or a single character + colon + */ + bool isAbsolute() const; + + /** + * check for default constructed path + */ + bool isNull() const; private: void fix(); + void validate() const; + + mutable bool _cached; + mutable bool _exists; + mutable bool _isDir; + mutable bool _isFile; }; +/** + * Split a directory string into a list of it's parent directories. + */ +string_list sgPathBranchSplit( const std::string &path ); + /** * Split a directory search path into a vector of individual paths */ -string_list sgPathSplit( const string &search_path ); +string_list sgPathSplit( const std::string &search_path ); #endif // _SG_PATH_HXX