Index: chrome/browser/sync/util/path_helpers.h |
=================================================================== |
--- chrome/browser/sync/util/path_helpers.h (revision 0) |
+++ chrome/browser/sync/util/path_helpers.h (revision 0) |
@@ -0,0 +1,105 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_SYNC_UTIL_PATH_HELPERS_H_ |
+#define CHROME_BROWSER_SYNC_UTIL_PATH_HELPERS_H_ |
+ |
+#include <algorithm> |
+#include <iterator> |
+#include <string> |
+ |
+#include "chrome/browser/sync/util/compat-file.h" |
+#include "chrome/browser/sync/util/sync_types.h" |
+ |
+template <typename StringType> |
+class PathSegmentIterator : public std::iterator<std::forward_iterator_tag, |
+ StringType> { |
+ public: |
+ explicit PathSegmentIterator(const StringType& path) : |
+ path_(path), segment_begin_(0), segment_end_(0) { |
+ ++(*this); |
+ } |
+ |
+ PathSegmentIterator() : segment_begin_(0), segment_end_(0) { } |
+ |
+ // Default copy constructors, constructors, etc. will all do the right thing. |
+ PathSegmentIterator& operator ++() { |
+ segment_begin_ = |
+ std::min(path_.size(), |
+ path_.find_first_not_of(kPathSeparator, segment_end_)); |
+ segment_end_ = |
+ std::min(path_.size(), |
+ path_.find_first_of(kPathSeparator, segment_begin_)); |
+ value_.assign(path_, segment_begin_, segment_end_ - segment_begin_); |
+ return *this; |
+ } |
+ |
+ PathSegmentIterator operator ++(int) { |
+ PathSegmentIterator i(*this); |
+ return ++i; |
+ } |
+ |
+ const StringType& operator * () const { |
+ return value_; |
+ } |
+ const StringType* operator -> () const { |
+ return &value_; |
+ } |
+ |
+ // If the current value and remaining path are equal, then we |
+ // call the iterators equal. |
+ bool operator == (const PathSegmentIterator& i) const { |
+ return 0 == path_.compare(segment_begin_, |
+ path_.size() - segment_begin_, |
+ i.path_, i.segment_begin_, i.path_.size() - i.segment_begin_); |
+ } |
+ |
+ bool operator != (const PathSegmentIterator& i) const { |
+ return !(*this == i); |
+ } |
+ |
+ protected: |
+ StringType path_; |
+ typename StringType::size_type segment_begin_; |
+ typename StringType::size_type segment_end_; |
+ StringType value_; |
+}; |
+ |
+// NOTE: The functions (Strip)LastPathSegment always return values without a |
+// trailing slash. |
+PathString LastPathSegment(const PathString& path); |
+std::string LastPathSegment(const std::string& path); |
+PathString AppendSlash(const PathString& path); |
+PathString GetFullPath(const PathString& path); |
+PathString LowercasePath(const PathString& path); |
+PathString ExpandTilde(const PathString& path); |
+ |
+inline bool HasSuffixPathString(const PathString& str, |
+ const PathString& suffix) { |
+ return str.find(suffix, str.size() - suffix.size()) != PathString::npos; |
+} |
+ |
+inline PathString StripSuffixPathString(const PathString& str, |
+ const PathString& suffix) { |
+ PathString ret(str); |
+ if (HasSuffixPathString(str, suffix)) { |
+ ret.resize(str.size() - suffix.size()); |
+ } |
+ return ret; |
+} |
+ |
+// Returns a string with length or fewer elements, careful to |
+// not truncate a string mid-surrogate pair. |
+PathString TruncatePathString(const PathString& original, int length); |
+ |
+// Makes a path component legal for your OS, but doesn't handle collisions |
+// with other files in the same directory. it can do this by removing |
+// illegal characters and adding ~1 before the first '.' in the filename. |
+// returns PSTR("") if the name is fine as-is |
+// on mac/linux we let names stay unicode normalization form C in the system |
+// and convert to another normal form in fuse handlers. but, if a '/' is in |
+// a filename, we handle it here. |
+PathString MakePathComponentOSLegal(const PathString& component); |
+ |
+#endif // CHROME_BROWSER_SYNC_UTIL_PATH_HELPERS_H_ |
Property changes on: chrome\browser\sync\util\path_helpers.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |