OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FileNameUtils.h
Go to the documentation of this file.
1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2  *
3  * This library is open source and may be redistributed and/or modified under
4  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5  * (at your option) any later version. The full license is in LICENSE file
6  * included with this distribution, and on the openscenegraph.org website.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * OpenSceneGraph Public License for more details.
12 */
13 
14 #ifndef OSGDB_FILENAMEUTILS
15 #define OSGDB_FILENAMEUTILS 1
16 
17 #include <osgDB/Export>
18 
19 #include <string>
20 #include <vector>
21 
22 namespace osgDB {
23 
25 extern OSGDB_EXPORT std::string getFilePath(const std::string& filename);
27 extern OSGDB_EXPORT std::string getFileExtension(const std::string& filename);
29 extern OSGDB_EXPORT std::string getFileExtensionIncludingDot(const std::string& filename);
31 extern OSGDB_EXPORT std::string getLowerCaseFileExtension(const std::string& filename);
33 extern OSGDB_EXPORT std::string getSimpleFileName(const std::string& fileName);
35 extern OSGDB_EXPORT std::string getNameLessExtension(const std::string& fileName);
37 extern OSGDB_EXPORT std::string getNameLessAllExtensions(const std::string& fileName);
39 extern OSGDB_EXPORT std::string getStrippedName(const std::string& fileName);
44 extern OSGDB_EXPORT std::string getPathRelative(const std::string& from, const std::string& to);
46 extern OSGDB_EXPORT std::string getPathRoot(const std::string& path);
48 extern OSGDB_EXPORT bool isAbsolutePath(const std::string& path);
49 
50 
52 extern OSGDB_EXPORT std::string convertFileNameToWindowsStyle(const std::string& fileName);
54 extern OSGDB_EXPORT std::string convertFileNameToUnixStyle(const std::string& fileName);
55 extern OSGDB_EXPORT std::string convertToLowerCase(const std::string& fileName);
56 
57 const char UNIX_PATH_SEPARATOR = '/';
58 const char WINDOWS_PATH_SEPARATOR = '\\';
59 
63 extern OSGDB_EXPORT bool isFileNameNativeStyle(const std::string& fileName);
65 extern OSGDB_EXPORT std::string convertFileNameToNativeStyle(const std::string& fileName);
66 
67 extern OSGDB_EXPORT bool equalCaseInsensitive(const std::string& lhs,const std::string& rhs);
68 extern OSGDB_EXPORT bool equalCaseInsensitive(const std::string& lhs,const char* rhs);
69 
70 extern OSGDB_EXPORT bool containsServerAddress(const std::string& filename);
71 extern OSGDB_EXPORT std::string getServerProtocol(const std::string& filename);
72 extern OSGDB_EXPORT std::string getServerAddress(const std::string& filename);
73 extern OSGDB_EXPORT std::string getServerFileName(const std::string& filename);
74 
76 extern OSGDB_EXPORT std::string concatPaths(const std::string& left, const std::string& right);
77 
79 extern OSGDB_EXPORT std::string getRealPath(const std::string& path);
80 
82 extern OSGDB_EXPORT void getPathElements(const std::string& path, std::vector<std::string> & out_elements);
83 
86 {
87  inline bool operator() (const std::string& lhs, const std::string& rhs) const
88  {
89  std::string::size_type size_lhs = lhs.size();
90  std::string::size_type size_rhs = rhs.size();
91  std::string::size_type pos_lhs = 0;
92  std::string::size_type pos_rhs = 0;
93  while(pos_lhs<size_lhs && pos_rhs<size_rhs)
94  {
95  char c_lhs = lhs[pos_rhs];
96  char c_rhs = rhs[pos_rhs];
97  bool numeric_lhs = lhs[pos_lhs]>='0' && lhs[pos_lhs]<='9';
98  bool numeric_rhs = rhs[pos_rhs]>='0' && rhs[pos_rhs]<='9';
99  if (numeric_lhs && numeric_rhs)
100  {
101  std::string::size_type start_lhs = pos_lhs;
102  ++pos_lhs;
103  while(pos_lhs<size_lhs && (lhs[pos_lhs]>='0' && lhs[pos_lhs]<='9')) ++pos_lhs;
104 
105  std::string::size_type start_rhs = pos_rhs;
106  ++pos_rhs;
107  while(pos_rhs<size_rhs && (rhs[pos_rhs]>='0' && rhs[pos_rhs]<='9')) ++pos_rhs;
108 
109  if (pos_lhs<pos_rhs) return true;
110  else if (pos_rhs<pos_lhs) return false;
111 
112  while(start_lhs<pos_lhs && start_rhs<pos_rhs)
113  {
114  if (lhs[start_lhs]<rhs[start_rhs]) return true;
115  if (lhs[start_lhs]>rhs[start_rhs]) return false;
116  ++start_lhs;
117  ++start_rhs;
118  }
119  }
120  else
121  {
122  if (c_lhs<c_rhs) return true;
123  else if (c_rhs<c_lhs) return false;
124 
125  ++pos_lhs;
126  ++pos_rhs;
127  }
128  }
129 
130  return pos_lhs<pos_rhs;
131  }
132 };
133 
134 }
135 
136 #endif
OSGDB_EXPORT bool containsServerAddress(const std::string &filename)
OSGDB_EXPORT std::string getFileExtensionIncludingDot(const std::string &filename)
OSGDB_EXPORT std::string getLowerCaseFileExtension(const std::string &filename)
bool operator()(const std::string &lhs, const std::string &rhs) const
Definition: FileNameUtils.h:87
OSGDB_EXPORT std::string convertFileNameToNativeStyle(const std::string &fileName)
OSGDB_EXPORT std::string getFileExtension(const std::string &filename)
OSGDB_EXPORT std::string convertFileNameToWindowsStyle(const std::string &fileName)
OSGDB_EXPORT char getNativePathSeparator()
OSGDB_EXPORT std::string convertFileNameToUnixStyle(const std::string &fileName)
OSGDB_EXPORT bool isFileNameNativeStyle(const std::string &fileName)
const char UNIX_PATH_SEPARATOR
Definition: FileNameUtils.h:57
const char WINDOWS_PATH_SEPARATOR
Definition: FileNameUtils.h:58
OSGDB_EXPORT void getPathElements(const std::string &path, std::vector< std::string > &out_elements)
OSGDB_EXPORT std::string getServerFileName(const std::string &filename)
OSGDB_EXPORT std::string getPathRelative(const std::string &from, const std::string &to)
Definition: Archive.h:24
OSGDB_EXPORT std::string getRealPath(const std::string &path)
#define OSGDB_EXPORT
Definition: Export.h:39
OSGDB_EXPORT bool equalCaseInsensitive(const std::string &lhs, const std::string &rhs)
OSGDB_EXPORT std::string getServerAddress(const std::string &filename)
OSGDB_EXPORT bool isAbsolutePath(const std::string &path)
OSGDB_EXPORT std::string getServerProtocol(const std::string &filename)
OSGDB_EXPORT std::string getStrippedName(const std::string &fileName)
OSGDB_EXPORT std::string getFilePath(const std::string &filename)
OSGDB_EXPORT std::string concatPaths(const std::string &left, const std::string &right)
OSGDB_EXPORT std::string getPathRoot(const std::string &path)
OSGDB_EXPORT std::string getSimpleFileName(const std::string &fileName)
OSGDB_EXPORT std::string getNameLessAllExtensions(const std::string &fileName)
OSGDB_EXPORT std::string convertToLowerCase(const std::string &fileName)
OSGDB_EXPORT std::string getNameLessExtension(const std::string &fileName)