Home | History | Annotate | Download | only in nacl_io
      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