| /* |
| * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef WEBRTC_RTC_BASE_PATHUTILS_H_ |
| #define WEBRTC_RTC_BASE_PATHUTILS_H_ |
| |
| #include <string> |
| |
| #include "webrtc/rtc_base/checks.h" |
| |
| namespace rtc { |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Pathname - parsing of pathnames into components, and vice versa. |
| // |
| // To establish consistent terminology, a filename never contains a folder |
| // component. A folder never contains a filename. A pathname may include |
| // a folder and/or filename component. Here are some examples: |
| // |
| // pathname() /home/john/example.txt |
| // folder() /home/john/ |
| // filename() example.txt |
| // parent_folder() /home/ |
| // folder_name() john/ |
| // basename() example |
| // extension() .txt |
| // |
| // Basename may begin, end, and/or include periods, but no folder delimiters. |
| // If extension exists, it consists of a period followed by zero or more |
| // non-period/non-delimiter characters, and basename is non-empty. |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| class Pathname { |
| public: |
| // Folder delimiters are slash and backslash |
| static bool IsFolderDelimiter(char ch); |
| static char DefaultFolderDelimiter(); |
| |
| Pathname(); |
| Pathname(const Pathname&); |
| Pathname(Pathname&&); |
| Pathname(const std::string& pathname); |
| Pathname(const std::string& folder, const std::string& filename); |
| |
| Pathname& operator=(const Pathname&); |
| Pathname& operator=(Pathname&&); |
| |
| // Normalize changes all folder delimiters to folder_delimiter() |
| void Normalize(); |
| |
| // Reset to the empty pathname |
| void clear(); |
| |
| // Returns true if the pathname is empty. Note: this->pathname().empty() |
| // is always false. |
| bool empty() const; |
| |
| // Returns the folder and filename components. If the pathname is empty, |
| // returns a string representing the current directory (as a relative path, |
| // i.e., "."). |
| std::string pathname() const; |
| void SetPathname(const std::string& pathname); |
| void SetPathname(const std::string& folder, const std::string& filename); |
| |
| std::string folder() const; |
| std::string parent_folder() const; |
| // SetFolder and AppendFolder will append a folder delimiter, if needed. |
| void SetFolder(const std::string& folder); |
| void AppendFolder(const std::string& folder); |
| |
| bool SetBasename(const std::string& basename); |
| |
| // SetExtension will prefix a period, if needed. |
| bool SetExtension(const std::string& extension); |
| |
| std::string filename() const; |
| bool SetFilename(const std::string& filename); |
| |
| private: |
| std::string folder_, basename_, extension_; |
| char folder_delimiter_; |
| }; |
| |
| } // namespace rtc |
| |
| #endif // WEBRTC_RTC_BASE_PATHUTILS_H_ |