blob: e09a27de899fff38df65288c4cddfed80d9b88c0 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include <precomp.h>
#include <cosv/dirchain.hxx>
// NOT FULLY DECLARED SERVICES
#include <cosv/bstream.hxx>
namespace csv
{
namespace ploc
{
DirectoryChain::DirectoryChain()
{
}
DirectoryChain::DirectoryChain( const char * i_sSubPath,
bool i_bPathIsAlwaysDir,
const char * i_sDelimiter )
{
Set( i_sSubPath, i_bPathIsAlwaysDir, i_sDelimiter );
}
DirectoryChain::~DirectoryChain()
{
}
void
DirectoryChain::Set( const char * i_sSubPath,
bool i_bPathIsAlwaysDir,
const char * i_sDelimiter )
{
csv_assert(i_sDelimiter != 0);
if (i_sSubPath == 0)
return;
const char * pRestPath = i_sSubPath;
if (*pRestPath == *i_sDelimiter)
++pRestPath;
for ( const char * pDirEnd = strchr(pRestPath,*i_sDelimiter);
pDirEnd != 0;
pDirEnd = strchr(pRestPath,*i_sDelimiter) )
{
aPath.push_back( String(pRestPath, pDirEnd) );
pRestPath = pDirEnd + 1;
}
if (*pRestPath != 0 AND i_bPathIsAlwaysDir)
aPath.push_back( String(pRestPath) );
}
void
DirectoryChain::PushFront( const String & i_sName )
{
aPath.insert( aPath.begin(), i_sName );
}
void
DirectoryChain::PushFront( const DirectoryChain & i_sPath )
{
aPath.insert( aPath.begin(), i_sPath.Begin(), i_sPath.End() );
}
void
DirectoryChain::PushBack( const String & i_sName )
{
aPath.push_back(i_sName);
}
void
DirectoryChain::PushBack( const DirectoryChain & i_sPath )
{
aPath.insert( aPath.end(), i_sPath.Begin(), i_sPath.End() );
}
void
DirectoryChain::PopFront( uintt i_nCount )
{
if (i_nCount <= aPath.size())
aPath.erase( aPath.begin(), aPath.begin() + i_nCount );
else
aPath.erase( aPath.begin(), aPath.end() );
}
void
DirectoryChain::PopBack( uintt i_nCount )
{
if (i_nCount <= aPath.size())
aPath.erase( aPath.end() - i_nCount, aPath.end() );
else
aPath.erase( aPath.begin(), aPath.end() );
}
void
DirectoryChain::Get( ostream & o_rPath,
const char * i_sDelimiter ) const
{
for ( std::vector<String>::const_iterator it = aPath.begin();
it != aPath.end();
++it )
{
o_rPath << (*it).c_str() << i_sDelimiter;
}
}
void
DirectoryChain::Get( bostream & o_rPath,
const char * i_sDelimiter ) const
{
uintt deliLen = strlen(i_sDelimiter);
for ( std::vector<String>::const_iterator it = aPath.begin();
it != aPath.end();
++it )
{
o_rPath.write( (*it).c_str() );
o_rPath.write( i_sDelimiter, deliLen);
}
}
} // namespace ploc
} // namespace csv