Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2311)

Unified Diff: base/strings/utf_offset_string_conversions.h

Issue 2953943003: base::OffsetAdjuster: Refactor offset limiting logic into the base::OffsetAdjuster (Closed)
Patch Set: fix Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/strings/utf_offset_string_conversions.h
diff --git a/base/strings/utf_offset_string_conversions.h b/base/strings/utf_offset_string_conversions.h
index 1844601fae03c67d30c2b4214d68e08ac85f32fd..f7419551dad271c75380dfa7dbf88190f5061800 100644
--- a/base/strings/utf_offset_string_conversions.h
+++ b/base/strings/utf_offset_string_conversions.h
@@ -34,7 +34,8 @@ class BASE_EXPORT OffsetAdjuster {
typedef std::vector<Adjustment> Adjustments;
// Adjusts all offsets in |offsets_for_adjustment| to reflect the adjustments
- // recorded in |adjustments|.
+ // recorded in |adjustments|. Adjusted offsets greater than |limit| will be
+ // set to string16::npos.
//
// Offsets represents insertion/selection points between characters: if |src|
// is "abcd", then 0 is before 'a', 2 is between 'b' and 'c', and 4 is at the
@@ -44,12 +45,14 @@ class BASE_EXPORT OffsetAdjuster {
// adjusted (e.g., because it points into the middle of a multibyte sequence),
// it will be set to string16::npos.
static void AdjustOffsets(const Adjustments& adjustments,
- std::vector<size_t>* offsets_for_adjustment);
+ std::vector<size_t>* offsets_for_adjustment,
+ size_t limit = string16::npos);
// Adjusts the single |offset| to reflect the adjustments recorded in
// |adjustments|.
static void AdjustOffset(const Adjustments& adjustments,
- size_t* offset);
+ size_t* offset,
+ size_t limit = string16::npos);
// Adjusts all offsets in |offsets_for_unadjustment| to reflect the reverse
// of the adjustments recorded in |adjustments|. In other words, the offsets
@@ -97,32 +100,15 @@ BASE_EXPORT string16 UTF8ToUTF16WithAdjustments(
const base::StringPiece& utf8,
base::OffsetAdjuster::Adjustments* adjustments);
// As above, but instead internally examines the adjustments and applies them
-// to |offsets_for_adjustment|. See comments by AdjustOffsets().
+// to |offsets_for_adjustment|. Input offsets greater than the length of the
+// input string will be set to string16::npos. See comments by AdjustOffsets().
BASE_EXPORT string16 UTF8ToUTF16AndAdjustOffsets(
const base::StringPiece& utf8,
std::vector<size_t>* offsets_for_adjustment);
-
BASE_EXPORT std::string UTF16ToUTF8AndAdjustOffsets(
const base::StringPiece16& utf16,
std::vector<size_t>* offsets_for_adjustment);
-// Limiting function callable by std::for_each which will replace any value
-// which is greater than |limit| with npos. Typically this is called with a
-// string length to clamp offsets into the string to [0, length] (as opposed to
-// [0, length); see comments above).
-template <typename T>
-struct LimitOffset {
- explicit LimitOffset(size_t limit)
- : limit_(limit) {}
-
- void operator()(size_t& offset) {
- if (offset > limit_)
- offset = T::npos;
- }
-
- size_t limit_;
-};
-
} // namespace base
#endif // BASE_STRINGS_UTF_OFFSET_STRING_CONVERSIONS_H_
« no previous file with comments | « no previous file | base/strings/utf_offset_string_conversions.cc » ('j') | base/strings/utf_offset_string_conversions_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698