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