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.
5 #ifndef LIBRARIES_NACL_IO_PATH_H_
6 #define LIBRARIES_NACL_IO_PATH_H_
11 #include "sdk_util/macros.h"
15 typedef std::vector
<std::string
> StringArray_t
;
20 Path(const Path
& path
);
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
25 explicit Path(const std::string
& path
);
27 // Return true of the first path item is '/'.
28 bool IsAbsolute() const;
30 // Return true if this is the root path (i.e. it has no parent)
33 // Return a part of the path
34 const std::string
& Part(size_t index
) const;
36 // Return the number of path parts
40 Path
& Append(const Path
& path
);
41 Path
& Append(const std::string
& path
);
42 Path
& Set(const std::string
& path
);
44 Path
& Set(const StringArray_t path
);
46 // Return the parent path.
48 std::string
Basename() const;
50 std::string
Join() const;
51 std::string
Range(size_t start
, size_t end
) const;
52 StringArray_t
Split() const;
54 // Collapse the string list removing extraneous '.', '..' path components
55 static StringArray_t
Normalize(const StringArray_t
& paths
);
56 static std::string
Join(const StringArray_t
& paths
);
57 static std::string
Range(const StringArray_t
& paths
,
60 static StringArray_t
Split(const std::string
& paths
);
62 Path
& operator=(const Path
& p
);
63 Path
& operator=(const std::string
& str
);
64 bool operator==(const Path
& other
) { return Split() == other
.Split(); }
65 bool operator!=(const Path
& other
) { return !operator==(other
); }
68 // Internal representation of the path stored an array of string representing
69 // the directory traversal. The first string is a "/" if this is an absolute
74 } // namespace nacl_io
76 #endif // PACKAGES_LIBRARIES_NACL_IO_PATH_H_