From 77cefa924cb6b971ece974ac4593b0a30cbe285e Mon Sep 17 00:00:00 2001 From: curt Date: Fri, 8 Aug 2003 19:54:49 +0000 Subject: [PATCH] Add a routines that takes a search path (separated by sgSearchPathSep) and seperates them into a vector of strings which it then returns. --- simgear/misc/sg_path.cxx | 50 +++++++++++++++++++++++++++++++++++----- simgear/misc/sg_path.hxx | 18 +++++++-------- 2 files changed, 52 insertions(+), 16 deletions(-) diff --git a/simgear/misc/sg_path.cxx b/simgear/misc/sg_path.cxx index dc9be8eb..1aeb12ce 100644 --- a/simgear/misc/sg_path.cxx +++ b/simgear/misc/sg_path.cxx @@ -23,12 +23,28 @@ // $Id$ +#include + #include #include #include "sg_path.hxx" +/** + * define directory path separators + */ + +#ifdef macintosh +static const char sgDirPathSep = ':'; +static const char sgDirPathSepBad = '/'; +#else +static const char sgDirPathSep = '/'; +static const char sgDirPathSepBad = ':'; +#endif +static const char sgSearchPathSep = ';'; + + // If Unix, replace all ":" with "/". If MacOS, replace all "/" with // ":" it should go without saying that neither of these characters // should be used in file or directory names. In windoze, allow the @@ -44,8 +60,8 @@ SGPath::fix() continue; } #endif - if ( path[i] == SG_BAD_PATH_SEP ) { - path[i] = SG_PATH_SEP; + if ( path[i] == sgDirPathSepBad ) { + path[i] = sgDirPathSep; } } } @@ -83,8 +99,8 @@ void SGPath::append( const string& p ) { if ( path.size() == 0 ) { path = p; } else { - if ( p[0] != SG_PATH_SEP ) { - path += SG_PATH_SEP; + if ( p[0] != sgDirPathSep ) { + path += sgDirPathSep; } path += p; } @@ -106,7 +122,7 @@ void SGPath::concat( const string& p ) { // Get the file part of the path (everything after the last path sep) string SGPath::file() const { - int index = path.rfind(SG_PATH_SEP); + int index = path.rfind(sgDirPathSep); if (index >= 0) { return path.substr(index + 1); } else { @@ -117,7 +133,7 @@ string SGPath::file() const { // get the directory part of the path. string SGPath::dir() const { - int index = path.rfind(SG_PATH_SEP); + int index = path.rfind(sgDirPathSep); if (index >= 0) { return path.substr(0, index); } else { @@ -153,3 +169,25 @@ bool SGPath::exists() const { fclose(fp); return true; } + + +string_list sgPathSplit( const string &search_path ) { + string tmp = search_path; + string_list result; + result.clear(); + + bool done = false; + + while ( !done ) { + int index = tmp.find(sgSearchPathSep); + if (index >= 0) { + result.push_back( tmp.substr(0, index) ); + tmp = tmp.substr( index + 1 ); + } else { + result.push_back( tmp ); + done = true; + } + } + + return result; +} diff --git a/simgear/misc/sg_path.hxx b/simgear/misc/sg_path.hxx index 9b0e5939..bdb45e01 100644 --- a/simgear/misc/sg_path.hxx +++ b/simgear/misc/sg_path.hxx @@ -31,19 +31,11 @@ #include - #include STL_STRING -SG_USING_STD(string); - +#include -#ifdef macintosh -# define SG_PATH_SEP ':' -# define SG_BAD_PATH_SEP '/' -#else -# define SG_PATH_SEP '/' -# define SG_BAD_PATH_SEP ':' -#endif +SG_USING_STD(string); /** @@ -141,6 +133,12 @@ private: }; +/** + * Split a directory search path into a vector of individual paths + */ +string_list sgPathSplit( const string &search_path ); + + #endif // _SG_PATH_HXX -- 2.39.5