1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 5 // created: 2016dec30 Markus W. Scherer 12 #if U_SHOW_CPLUSPLUS_API 87 array(stackArray), capacity(STACK_CAPACITY), length(0), delta(0), numChanges(0),
95 array(stackArray), capacity(STACK_CAPACITY), length(other.length),
96 delta(other.delta), numChanges(other.numChanges),
97 errorCode_(other.errorCode_) {
107 array(stackArray), capacity(STACK_CAPACITY), length(src.length),
108 delta(src.delta), numChanges(src.numChanges),
109 errorCode_(src.errorCode_) {
148 void addUnchanged(int32_t unchangedLength);
154 void addReplace(int32_t oldLength, int32_t newLength);
172 int32_t lengthDelta()
const{
return delta; }
209 array(nullptr), index(0), length(0),
210 remaining(0), onlyChanges_(false), coarse(false),
211 dir(0), changed(false), oldLength_(0), newLength_(0),
212 srcIndex(0), replIndex(0), destIndex(0) {}
254 return findIndex(i,
true, errorCode) == 0;
277 return findIndex(i,
false, errorCode) == 0;
381 // TODO: Throw an exception if we aren't in a change edit? 394 #ifndef U_HIDE_INTERNAL_API 401 #endif// U_HIDE_INTERNAL_API 408 int32_t readLength(int32_t head);
409 void updateNextIndexes();
410 void updatePreviousIndexes();
417 const uint16_t *array;
418 int32_t index, length;
419 // 0 if we are not within compressed equal-length changes. 420 // Otherwise the number of remaining changes, including the current one. 422 UBool onlyChanges_, coarse;
424 int8_t dir;
// iteration direction: back(<0), initial(0), forward(>0) 426 int32_t oldLength_, newLength_;
427 int32_t srcIndex, replIndex, destIndex;
439 returnIterator(array, length,
true,
true);
451 returnIterator(array, length,
false,
true);
463 returnIterator(array, length,
true,
false);
474 returnIterator(array, length,
false,
false);
507 void releaseArray() noexcept;
511 void setLastUnit(int32_t last) { array[length - 1] =
static_cast<uint16_t
>(last); }
512 int32_t lastUnit()
const{
return length > 0 ? array[length - 1] : 0xffff; }
514 void append(int32_t r);
517 staticconst int32_t STACK_CAPACITY = 100;
524 uint16_t stackArray[STACK_CAPACITY];
529 #endif/* U_SHOW_CPLUSPLUS_API */ Records lengths of string edits but not replacement text.
Iterator getFineIterator() const
Returns an Iterator for fine-grained change and no-change edits (full granularity of change edits is ...
Edits(const Edits &other)
Copy constructor.
Edits & operator=(const Edits &other)
Assignment operator.
Iterator getCoarseChangesIterator() const
Returns an Iterator for coarse-grained change edits (adjacent change edits are treated as one).
Edits & operator=(Edits &&src) noexcept
Move assignment operator, might leave src empty.
void reset() noexcept
Resets the data but may not release memory.
Edits(Edits &&src) noexcept
Move constructor, might leave src empty.
Edits()
Constructs an empty object.
Iterator getCoarseIterator() const
Returns an Iterator for coarse-grained change and no-change edits (adjacent change edits are treated ...
Iterator getFineChangesIterator() const
Returns an Iterator for fine-grained change edits (full granularity of change edits is retained).
int32_t numberOfChanges() const
Edits & mergeAndAppend(const Edits &ab, const Edits &bc, UErrorCode &errorCode)
Merges the two input Edits and appends the result to this object.
UMemory is the common ICU base class.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Access to the list of edits.
int32_t destinationIndex() const
The start index of the current span in the destination string; the span has length newLength.
UBool findDestinationIndex(int32_t i, UErrorCode &errorCode)
Moves the iterator to the edit that contains the destination index.
Iterator(const Iterator &other)=default
Copy constructor.
int32_t destinationIndexFromSourceIndex(int32_t i, UErrorCode &errorCode)
Computes the destination index corresponding to the given source index.
int32_t newLength() const
The length of the current span in the destination string, which starts at destinationIndex,...
int32_t sourceIndex() const
The start index of the current span in the source string; the span has length oldLength.
Iterator & operator=(const Iterator &other)=default
Assignment operator.
UnicodeString & toString(UnicodeString &appendTo) const
A string representation of the current edit represented by the iterator for debugging.
UBool next(UErrorCode &errorCode)
Advances the iterator to the next edit.
int32_t oldLength() const
The length of the current span in the source string, which starts at sourceIndex.
Iterator()
Default constructor, empty iterator.
UBool findSourceIndex(int32_t i, UErrorCode &errorCode)
Moves the iterator to the edit that contains the source index.
int32_t sourceIndexFromDestinationIndex(int32_t i, UErrorCode &errorCode)
Computes the source index corresponding to the given destination index.
UBool hasChange() const
Returns whether the edit currently represented by the iterator is a change edit.
int32_t replacementIndex() const
The start index of the current span in the replacement string; the span has length newLength.
int8_t UBool
The ICU boolean type, a signed-byte integer.
C++ API: Common ICU base class UObject.
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
@ U_ZERO_ERROR
No error, no warning.
#define U_COMMON_API
Set to export library symbols from inside the common library, and to import them from outside.