123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484 |
- #ifndef BASE_FILES_FILE_PATH_H_
- #define BASE_FILES_FILE_PATH_H_
- #include <stddef.h>
- #include <functional>
- #include <iosfwd>
- #include <string>
- #include <vector>
- #include "base/base_export.h"
- #include "base/compiler_specific.h"
- #include "base/stl_util.h"
- #include "base/strings/string16.h"
- #include "base/strings/string_piece.h"
- #include "build/build_config.h"
- #if defined(OS_WIN)
- #define FILE_PATH_USES_DRIVE_LETTERS
- #define FILE_PATH_USES_WIN_SEPARATORS
- #endif
- #if defined(OS_WIN)
- #define PRFilePath "ls"
- #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
- #define PRFilePath "s"
- #endif
- #if defined(OS_WIN)
- #define FILE_PATH_LITERAL(x) L##x
- #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
- #define FILE_PATH_LITERAL(x) x
- #endif
- namespace base {
- class Pickle;
- class PickleIterator;
- class BASE_EXPORT FilePath {
- public:
- #if defined(OS_WIN)
-
-
- typedef std::wstring StringType;
- #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
-
-
-
- typedef std::string StringType;
- #endif
- typedef BasicStringPiece<StringType> StringPieceType;
- typedef StringType::value_type CharType;
-
-
-
-
- static const CharType kSeparators[];
-
- static const size_t kSeparatorsLength;
-
- static const CharType kCurrentDirectory[];
-
- static const CharType kParentDirectory[];
-
- static const CharType kExtensionSeparator;
- FilePath();
- FilePath(const FilePath& that);
- explicit FilePath(StringPieceType path);
- ~FilePath();
- FilePath& operator=(const FilePath& that);
-
-
- FilePath(FilePath&& that) noexcept;
-
-
- FilePath& operator=(FilePath&& that) noexcept;
- bool operator==(const FilePath& that) const;
- bool operator!=(const FilePath& that) const;
-
- bool operator<(const FilePath& that) const {
- return path_ < that.path_;
- }
- const StringType& value() const { return path_; }
- bool empty() const { return path_.empty(); }
- void clear() { path_.clear(); }
-
- static bool IsSeparator(CharType character);
-
-
-
-
-
-
-
-
-
-
- void GetComponents(std::vector<FilePath::StringType>* components) const;
-
-
-
-
-
-
- bool IsParent(const FilePath& child) const;
-
-
-
-
-
-
-
-
- bool AppendRelativePath(const FilePath& child, FilePath* path) const;
-
-
-
-
-
-
- FilePath DirName() const WARN_UNUSED_RESULT;
-
-
-
-
- FilePath BaseName() const WARN_UNUSED_RESULT;
-
-
-
-
-
-
-
-
-
-
- StringType Extension() const WARN_UNUSED_RESULT;
-
-
-
-
-
-
-
- StringType FinalExtension() const WARN_UNUSED_RESULT;
-
-
-
- FilePath RemoveExtension() const WARN_UNUSED_RESULT;
-
-
- FilePath RemoveFinalExtension() const WARN_UNUSED_RESULT;
-
-
-
-
-
-
-
- FilePath InsertBeforeExtension(
- StringPieceType suffix) const WARN_UNUSED_RESULT;
- FilePath InsertBeforeExtensionASCII(
- StringPiece suffix) const WARN_UNUSED_RESULT;
-
-
- FilePath AddExtension(StringPieceType extension) const WARN_UNUSED_RESULT;
-
-
- FilePath AddExtensionASCII(StringPiece extension) const WARN_UNUSED_RESULT;
-
-
-
-
- FilePath ReplaceExtension(StringPieceType extension) const WARN_UNUSED_RESULT;
-
-
- bool MatchesExtension(StringPieceType extension) const;
-
-
-
-
-
-
- FilePath Append(StringPieceType component) const WARN_UNUSED_RESULT;
- FilePath Append(const FilePath& component) const WARN_UNUSED_RESULT;
-
-
-
-
-
-
- FilePath AppendASCII(StringPiece component) const WARN_UNUSED_RESULT;
-
-
-
-
- bool IsAbsolute() const;
-
- bool EndsWithSeparator() const WARN_UNUSED_RESULT;
-
-
- FilePath AsEndingWithSeparator() const WARN_UNUSED_RESULT;
-
-
- FilePath StripTrailingSeparators() const WARN_UNUSED_RESULT;
-
-
- bool ReferencesParent() const;
-
-
-
-
- string16 LossyDisplayName() const;
-
-
-
- std::string MaybeAsASCII() const;
-
-
-
-
-
-
-
-
-
-
-
-
-
- std::string AsUTF8Unsafe() const;
-
- string16 AsUTF16Unsafe() const;
-
-
-
-
-
-
-
-
- static FilePath FromUTF8Unsafe(StringPiece utf8);
-
- static FilePath FromUTF16Unsafe(StringPiece16 utf16);
- void WriteToPickle(Pickle* pickle) const;
- bool ReadFromPickle(PickleIterator* iter);
-
-
- FilePath NormalizePathSeparators() const;
-
-
- FilePath NormalizePathSeparatorsTo(CharType separator) const;
-
-
-
-
-
-
-
-
- static int CompareIgnoreCase(StringPieceType string1,
- StringPieceType string2);
- static bool CompareEqualIgnoreCase(StringPieceType string1,
- StringPieceType string2) {
- return CompareIgnoreCase(string1, string2) == 0;
- }
- static bool CompareLessIgnoreCase(StringPieceType string1,
- StringPieceType string2) {
- return CompareIgnoreCase(string1, string2) < 0;
- }
- #if defined(OS_APPLE)
-
-
-
-
-
- static StringType GetHFSDecomposedForm(StringPieceType string);
-
-
-
-
- static int HFSFastUnicodeCompare(StringPieceType string1,
- StringPieceType string2);
- #endif
- #if defined(OS_ANDROID)
-
-
-
-
-
- bool IsContentUri() const;
- #endif
- private:
-
-
-
-
-
- void StripTrailingSeparatorsInternal();
- StringType path_;
- };
- BASE_EXPORT std::ostream& operator<<(std::ostream& out,
- const FilePath& file_path);
- }
- namespace std {
- template <>
- struct hash<base::FilePath> {
- typedef base::FilePath argument_type;
- typedef std::size_t result_type;
- result_type operator()(argument_type const& f) const {
- return hash<base::FilePath::StringType>()(f.value());
- }
- };
- }
- #endif
|