You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
3.3 KiB
144 lines
3.3 KiB
#ifndef _DEFILEPATH_HPP
|
|
#define _DEFILEPATH_HPP
|
|
/*-------------------------------------------------------------------------
|
|
* drawElements C++ Base Library
|
|
* -----------------------------
|
|
*
|
|
* Copyright 2014 The Android Open Source Project
|
|
*
|
|
* Licensed 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.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief Filesystem path class.
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "deDefs.hpp"
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace de
|
|
{
|
|
|
|
void FilePath_selfTest (void);
|
|
|
|
class FilePath
|
|
{
|
|
public:
|
|
enum Type
|
|
{
|
|
TYPE_UNKNOWN = 0, /*!< Non-existent or unknown object. */
|
|
TYPE_FILE, /*!< File. */
|
|
TYPE_DIRECTORY, /*!< Directory. */
|
|
|
|
TYPE_LAST
|
|
};
|
|
|
|
static const std::string separator; /*!< Path separator. */
|
|
|
|
FilePath (void);
|
|
FilePath (const std::string& path);
|
|
FilePath (const char* path);
|
|
FilePath (const std::vector<std::string>& components);
|
|
~FilePath (void);
|
|
|
|
bool exists (void) const;
|
|
Type getType (void) const;
|
|
|
|
const char* getPath (void) const;
|
|
std::string getBaseName (void) const;
|
|
std::string getDirName (void) const;
|
|
std::string getFileExtension (void) const;
|
|
|
|
static FilePath join (const FilePath& a, const FilePath& b);
|
|
FilePath& join (const FilePath& b);
|
|
|
|
static FilePath normalize (const FilePath& path);
|
|
FilePath& normalize (void);
|
|
|
|
void split (std::vector<std::string>& components) const;
|
|
static FilePath join (const std::vector<std::string>& components);
|
|
|
|
bool isAbsolutePath (void) const;
|
|
|
|
static bool isSeparator (char c);
|
|
|
|
private:
|
|
bool isRootPath (void) const;
|
|
bool isWinNetPath (void) const;
|
|
bool beginsWithDrive (void) const;
|
|
|
|
std::string m_path;
|
|
};
|
|
|
|
// \todo [2012-09-05 pyry] Move to delibs?
|
|
void createDirectory (const char* path);
|
|
void createDirectoryAndParents (const char* path);
|
|
|
|
inline FilePath::FilePath (void)
|
|
{
|
|
}
|
|
|
|
inline FilePath::FilePath (const std::string& path)
|
|
: m_path(path)
|
|
{
|
|
}
|
|
|
|
inline FilePath::FilePath (const char* path)
|
|
: m_path(path)
|
|
{
|
|
}
|
|
|
|
inline FilePath::~FilePath ()
|
|
{
|
|
}
|
|
|
|
inline FilePath& FilePath::join (const FilePath& b)
|
|
{
|
|
if (m_path == "")
|
|
m_path = b.m_path;
|
|
else
|
|
m_path += separator + b.m_path;
|
|
return *this;
|
|
}
|
|
|
|
inline FilePath FilePath::join (const FilePath& a, const FilePath& b)
|
|
{
|
|
return FilePath(a).join(b);
|
|
}
|
|
|
|
inline const char* FilePath::getPath (void) const
|
|
{
|
|
return m_path.c_str();
|
|
}
|
|
|
|
inline bool FilePath::isSeparator (char c)
|
|
{
|
|
return c == '/' || c == '\\';
|
|
}
|
|
|
|
inline bool FilePath::isRootPath (void) const
|
|
{
|
|
return m_path.length() >= 1 && isSeparator(m_path[0]);
|
|
}
|
|
|
|
inline bool FilePath::isWinNetPath (void) const
|
|
{
|
|
return m_path.length() >= 2 && isSeparator(m_path[0]) && isSeparator(m_path[1]);
|
|
}
|
|
|
|
} // de
|
|
|
|
#endif // _DEFILEPATH_HPP
|