1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #include <precomp.h> 25 #include <cosv/ploc.hxx> 26 27 // NOT FULLY DECLARED SERVICES 28 #include <cosv/bstream.hxx> 29 30 31 32 33 namespace csv 34 { 35 namespace ploc 36 { 37 38 39 Path::Path( const char * i_sPath, 40 bool i_bPathIsAlwaysDir, 41 const char * i_sDelimiter ) 42 : pRoot(0) 43 // aPath, 44 // sFile 45 { 46 Set(i_sPath, i_bPathIsAlwaysDir, i_sDelimiter ); 47 } 48 49 Path::Path( const Path & i_rPath ) 50 : pRoot(i_rPath.pRoot->CreateCopy()), 51 aPath(i_rPath.aPath), 52 sFile(i_rPath.sFile) 53 { 54 } 55 56 Path::~Path() 57 { 58 } 59 60 Path & 61 Path::operator=( const Path & i_rPath ) 62 { 63 pRoot = i_rPath.pRoot->CreateCopy(); 64 aPath = i_rPath.aPath; 65 sFile = i_rPath.sFile; 66 return *this; 67 } 68 69 70 void 71 Path::Set( const char * i_sPath, 72 bool i_bPathIsAlwaysDir, 73 const char * i_sDelimiter ) 74 { 75 if ( *i_sDelimiter != '\\' AND *i_sDelimiter != '/' ) 76 return; 77 78 const char * 79 restPath = 0; 80 pRoot = Root::Create_( restPath, i_sPath, i_sDelimiter ); 81 if (restPath == 0) 82 return; 83 84 aPath.Set(restPath, i_bPathIsAlwaysDir, i_sDelimiter); 85 86 if (NOT i_bPathIsAlwaysDir) 87 { 88 const char * 89 file = strrchr( restPath, *i_sDelimiter ); 90 if (file == 0) 91 file = restPath; 92 else 93 file++; 94 sFile = file; 95 } 96 } 97 98 void 99 Path::SetFile( const String & i_sName ) 100 { 101 sFile = i_sName; 102 } 103 104 const char * 105 Path::FileExtension() const 106 { 107 const char * 108 ext = strrchr(sFile, '.'); 109 if (ext != 0) 110 ++ext; 111 else 112 ext = ""; 113 return ext; 114 } 115 116 bool 117 Path::IsValid() const 118 { 119 return RootDir().OwnDelimiter() != 0; 120 } 121 122 void 123 Path::Get( ostream & o_rPath ) const 124 { 125 if (NOT IsValid()) 126 return; 127 128 pRoot->Get( o_rPath ); 129 aPath.Get( o_rPath, pRoot->OwnDelimiter() ); 130 131 if ( sFile.length() > 0 ) 132 o_rPath << sFile; 133 134 } 135 136 void 137 Path::Get( bostream & o_rPath ) const 138 { 139 if (NOT IsValid()) 140 return; 141 142 pRoot->Get( o_rPath ); 143 aPath.Get( o_rPath, pRoot->OwnDelimiter() ); 144 145 if ( sFile.length() > 0 ) 146 o_rPath.write( sFile ); 147 } 148 149 150 151 152 } // namespace ploc 153 } // namespace csv 154