Revise the design of the Path concept per peer review. Too many changes to

note individually but these essence of it is to not derive from
std::string, clarify the interface, and provide better documentation.
There is now also (untested) implementations for AIX, Darwin, and SunOS.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16078 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Spencer
2004-08-29 05:24:01 +00:00
parent 81bc6e377e
commit 8e66595512
8 changed files with 1100 additions and 349 deletions

View File

@@ -10,10 +10,11 @@
// This header file implements the operating system Path concept.
//
//===----------------------------------------------------------------------===//
#include "llvm/System/Path.h"
namespace llvm {
namespace sys {
using namespace sys;
//===----------------------------------------------------------------------===//
//=== WARNING: Implementation here must contain only TRULY operating system
@@ -21,40 +22,18 @@ namespace sys {
//===----------------------------------------------------------------------===//
bool
Path::is_valid() const {
if ( empty() ) return false;
return true;
Path::is_file() const {
return (is_valid() && path[path.length()-1] != '/');
}
void
Path::fill( char* buffer, unsigned bufflen ) const {
unsigned pathlen = length();
assert( bufflen > pathlen && "Insufficient buffer size" );
unsigned copylen = pathlen <? (bufflen - 1);
this->copy(buffer, copylen, 0 );
buffer[ copylen ] = 0;
bool
Path::is_directory() const {
return (is_valid() && path[path.length()-1] == '/');
}
void
Path::make_directory() {
char end[2];
end[0] = '/';
end[1] = 0;
if ( empty() )
this->assign( end );
else if ( (*this)[length()-1] != '/')
this->append( end );
}
void
Path::make_file() {
if ( (*this)[length()-1] == '/')
this->erase( this->length()-1, 1 );
}
// Include the truly platform-specific parts of this class.
#include "platform/Path.cpp"
}
}
// vim: sw=2