• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
Path()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