Index: base/strings/utf_offset_string_conversions.cc |
diff --git a/base/strings/utf_offset_string_conversions.cc b/base/strings/utf_offset_string_conversions.cc |
index 731175f97367cd7cf6f14b14c4e05af920626556..c2270bfce2ff3f468e5280f3a0bad9b8a88f9d99 100644 |
--- a/base/strings/utf_offset_string_conversions.cc |
+++ b/base/strings/utf_offset_string_conversions.cc |
@@ -37,7 +37,7 @@ void OffsetAdjuster::AdjustOffset(const Adjustments& adjustments, |
size_t* offset) { |
if (*offset == string16::npos) |
return; |
- size_t adjustment = 0; |
+ int adjustment = 0; |
for (Adjustments::const_iterator i = adjustments.begin(); |
i != adjustments.end(); ++i) { |
if (*offset <= i->original_offset) |
@@ -46,12 +46,43 @@ void OffsetAdjuster::AdjustOffset(const Adjustments& adjustments, |
*offset = string16::npos; |
return; |
} |
- adjustment += (i->original_length - i->output_length); |
+ adjustment += static_cast<int>(i->original_length - i->output_length); |
} |
*offset -= adjustment; |
} |
// static |
+void OffsetAdjuster::UnadjustOffsets( |
+ const Adjustments& adjustments, |
+ std::vector<size_t>* offsets_for_unadjustment) { |
+ if (!offsets_for_unadjustment || adjustments.empty()) |
+ return; |
+ for (std::vector<size_t>::iterator i(offsets_for_unadjustment->begin()); |
+ i != offsets_for_unadjustment->end(); ++i) |
+ UnadjustOffset(adjustments, &(*i)); |
+} |
+ |
+// static |
+void OffsetAdjuster::UnadjustOffset(const Adjustments& adjustments, |
+ size_t* offset) { |
+ if (*offset == string16::npos) |
+ return; |
+ int adjustment = 0; |
+ for (Adjustments::const_iterator i = adjustments.begin(); |
+ i != adjustments.end(); ++i) { |
+ if (*offset + adjustment <= i->original_offset) |
+ break; |
+ adjustment += static_cast<int>(i->original_length - i->output_length); |
+ if ((*offset + adjustment) < |
+ (i->original_offset + i->original_length)) { |
+ *offset = string16::npos; |
+ return; |
+ } |
+ } |
+ *offset += adjustment; |
+} |
+ |
+// static |
void OffsetAdjuster::MergeSequentialAdjustments( |
const Adjustments& first_adjustments, |
Adjustments* adjustments_on_adjusted_string) { |