1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef LIBRARIES_NACL_IO_PATH_H_ 6 #define LIBRARIES_NACL_IO_PATH_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "sdk_util/macros.h" 12 13 namespace nacl_io { 14 15 typedef std::vector<std::string> StringArray_t; 16 17 class Path { 18 public: 19 Path() {} 20 Path(const Path& path); 21 22 // This constructor splits path by '/' as a starting point for this Path. 23 // If the path begins with the character '/', the path is considered 24 // to be absolute. 25 explicit Path(const std::string& path); 26 27 // Return true of the first path item is '/'. 28 bool IsAbsolute() const; 29 30 // Return true if this is the root path (i.e. it has no parent) 31 bool IsRoot() const; 32 33 // Return a part of the path 34 const std::string& Part(size_t index) const; 35 36 // Return the number of path parts 37 size_t Size() const; 38 39 // Update the path. 40 Path& Append(const std::string& path); 41 Path& Prepend(const std::string& path); 42 Path& Set(const std::string& path); 43 44 // Return the parent path. 45 Path Parent() const; 46 std::string Basename() const; 47 48 std::string Join() const; 49 std::string Range(size_t start, size_t end) const; 50 StringArray_t Split() const; 51 52 // Collapse the string list removing extraneous '.', '..' path components 53 static StringArray_t Normalize(const StringArray_t& paths); 54 static std::string Join(const StringArray_t& paths); 55 static std::string Range(const StringArray_t& paths, 56 size_t start, 57 size_t end); 58 static StringArray_t Split(const std::string& paths); 59 // Operator versions 60 Path& operator=(const Path& p); 61 Path& operator=(const std::string& str); 62 bool operator==(const Path& other) { return Split() == other.Split(); } 63 bool operator!=(const Path& other) { return !operator==(other); } 64 65 private: 66 // Internal representation of the path stored an array of string representing 67 // the directory traversal. The first string is a "/" if this is an absolute 68 // path. 69 StringArray_t paths_; 70 }; 71 72 } // namespace nacl_io 73 74 #endif // PACKAGES_LIBRARIES_NACL_IO_PATH_H_ 75