2004-10-05 10:28:21 +00:00
|
|
|
//
|
|
|
|
// VMime library (http://vmime.sourceforge.net)
|
|
|
|
// Copyright (C) 2002-2004 Vincent Richard <vincent@vincent-richard.net>
|
|
|
|
//
|
|
|
|
// This program is free software; you can redistribute it and/or
|
|
|
|
// modify it under the terms of the GNU General Public License as
|
|
|
|
// published by the Free Software Foundation; either version 2 of
|
|
|
|
// the License, or (at your option) any later version.
|
|
|
|
//
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
// General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
|
|
// along with this program; if not, write to the Free Software
|
|
|
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
//
|
|
|
|
|
2004-12-26 20:23:29 +00:00
|
|
|
#include "vmime/utility/path.hpp"
|
2004-10-05 10:28:21 +00:00
|
|
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
|
|
|
|
|
|
namespace vmime {
|
|
|
|
namespace utility {
|
|
|
|
|
|
|
|
|
|
|
|
path::path()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path::path(const component& c)
|
|
|
|
{
|
|
|
|
m_list.push_back(c);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path::path(const path& p)
|
|
|
|
{
|
|
|
|
m_list.resize(p.m_list.size());
|
|
|
|
std::copy(p.m_list.begin(), p.m_list.end(), m_list.begin());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path::path(const string& s)
|
|
|
|
{
|
|
|
|
m_list.push_back(component(s));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path path::operator/(const path& p) const
|
|
|
|
{
|
|
|
|
path pr(*this);
|
|
|
|
pr /= p;
|
|
|
|
|
|
|
|
return (pr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path path::operator/(const component& c) const
|
|
|
|
{
|
|
|
|
path pr(*this);
|
|
|
|
pr /= c;
|
|
|
|
|
|
|
|
return (pr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path& path::operator/=(const path& p)
|
|
|
|
{
|
|
|
|
const list::size_type size = m_list.size();
|
|
|
|
|
|
|
|
m_list.resize(size + p.m_list.size());
|
|
|
|
std::copy(p.m_list.begin(), p.m_list.end(), m_list.begin() + size);
|
|
|
|
|
|
|
|
return (*this);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path& path::operator/=(const component& c)
|
|
|
|
{
|
|
|
|
m_list.push_back(c);
|
|
|
|
return (*this);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-10-21 15:05:47 +00:00
|
|
|
path path::getParent() const
|
2004-10-05 10:28:21 +00:00
|
|
|
{
|
|
|
|
path p;
|
|
|
|
|
2004-10-21 15:05:47 +00:00
|
|
|
if (!isEmpty())
|
2004-10-05 10:28:21 +00:00
|
|
|
{
|
|
|
|
p.m_list.resize(m_list.size() - 1);
|
|
|
|
std::copy(m_list.begin(), m_list.end() - 1, p.m_list.begin());
|
|
|
|
}
|
|
|
|
|
|
|
|
return (p);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path& path::operator=(const path& p)
|
|
|
|
{
|
|
|
|
m_list.resize(p.m_list.size());
|
|
|
|
std::copy(p.m_list.begin(), p.m_list.end(), m_list.begin());
|
|
|
|
|
|
|
|
return (*this);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path& path::operator=(const component& c)
|
|
|
|
{
|
|
|
|
m_list.resize(1);
|
|
|
|
m_list[0] = c;
|
|
|
|
|
|
|
|
return (*this);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const bool path::operator==(const path& p) const
|
|
|
|
{
|
|
|
|
if (m_list.size() != p.m_list.size())
|
|
|
|
return (false);
|
|
|
|
|
|
|
|
list::const_iterator i = m_list.begin();
|
|
|
|
list::const_iterator j = p.m_list.begin();
|
|
|
|
|
|
|
|
bool equal = true;
|
|
|
|
|
|
|
|
for ( ; equal && i != m_list.end() ; ++i, ++j)
|
|
|
|
//equal = (*i == *j);
|
2004-10-21 15:05:47 +00:00
|
|
|
equal = ((*i).getBuffer() == (*j).getBuffer());
|
2004-10-05 10:28:21 +00:00
|
|
|
|
|
|
|
return (equal);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const bool path::operator!=(const path& p) const
|
|
|
|
{
|
|
|
|
return (!(*this == p));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-10-21 15:05:47 +00:00
|
|
|
const bool path::isEmpty() const
|
2004-10-05 10:28:21 +00:00
|
|
|
{
|
|
|
|
return (m_list.empty());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-10-21 15:05:47 +00:00
|
|
|
const path::component path::getLastComponent() const
|
2004-10-05 10:28:21 +00:00
|
|
|
{
|
2004-10-21 15:05:47 +00:00
|
|
|
return (isEmpty() ? component("") : m_list[m_list.size() - 1]);
|
2004-10-05 10:28:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-10-21 15:05:47 +00:00
|
|
|
path::component& path::getLastComponent()
|
2004-10-05 10:28:21 +00:00
|
|
|
{
|
|
|
|
return (m_list[m_list.size() - 1]);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-10-21 15:05:47 +00:00
|
|
|
const int path::getSize() const
|
2004-10-05 10:28:21 +00:00
|
|
|
{
|
|
|
|
return (m_list.size());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const path::component& path::operator[](const int x) const
|
|
|
|
{
|
|
|
|
return (m_list[x]);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path::component& path::operator[](const int x)
|
|
|
|
{
|
|
|
|
return (m_list[x]);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const bool path::isDirectParentOf(const path& p) const
|
|
|
|
{
|
2004-10-21 15:05:47 +00:00
|
|
|
if (p.getSize() != getSize() + 1)
|
2004-10-05 10:28:21 +00:00
|
|
|
return (false);
|
|
|
|
|
|
|
|
bool equal = true;
|
|
|
|
|
2004-10-21 15:05:47 +00:00
|
|
|
for (list::size_type i = 0 ; equal && i < m_list.size() ; ++i)
|
2004-10-05 10:28:21 +00:00
|
|
|
equal = (m_list[i] == p.m_list[i]);
|
|
|
|
|
|
|
|
return (equal);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-12-22 09:15:15 +00:00
|
|
|
const bool path::isParentOf(const path& p) const
|
|
|
|
{
|
|
|
|
if (p.getSize() < getSize() + 1)
|
|
|
|
return (false);
|
|
|
|
|
|
|
|
bool equal = true;
|
|
|
|
|
|
|
|
for (list::size_type i = 0 ; equal && i < m_list.size() ; ++i)
|
|
|
|
equal = (m_list[i] == p.m_list[i]);
|
|
|
|
|
|
|
|
return (equal);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-12-22 09:52:32 +00:00
|
|
|
void path::renameParent(const path& oldPath, const path& newPath)
|
|
|
|
{
|
|
|
|
if (isEmpty() || oldPath.getSize() > getSize())
|
|
|
|
return;
|
|
|
|
|
|
|
|
bool equal = true;
|
|
|
|
list::size_type i;
|
|
|
|
|
|
|
|
for (i = 0 ; equal && i < oldPath.m_list.size() ; ++i)
|
|
|
|
equal = (m_list[i] == oldPath.m_list[i]);
|
|
|
|
|
|
|
|
if (i != oldPath.m_list.size())
|
|
|
|
return;
|
|
|
|
|
|
|
|
list newList;
|
|
|
|
|
|
|
|
for (list::size_type j = 0 ; j < newPath.m_list.size() ; ++j)
|
|
|
|
newList.push_back(newPath.m_list[j]);
|
|
|
|
|
|
|
|
for (list::size_type j = i ; j < m_list.size() ; ++j)
|
|
|
|
newList.push_back(m_list[j]);
|
|
|
|
|
|
|
|
m_list.resize(newList.size());
|
|
|
|
std::copy(newList.begin(), newList.end(), m_list.begin());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-12-17 23:02:37 +00:00
|
|
|
void path::appendComponent(const path::component& c)
|
|
|
|
{
|
|
|
|
m_list.push_back(c);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const path::component& path::getComponentAt(const int pos) const
|
|
|
|
{
|
|
|
|
return (m_list[pos]);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
path::component& path::getComponentAt(const int pos)
|
|
|
|
{
|
|
|
|
return (m_list[pos]);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-10-05 10:28:21 +00:00
|
|
|
} // utility
|
|
|
|
} // vmime
|