| /* |
| ********************************************************************** |
| * Copyright (C) {1999}, International Business Machines Corporation and others. All Rights Reserved. |
| ********************************************************************** |
| * Date Name Description |
| * 11/17/99 aliu Creation. |
| ********************************************************************** |
| */ |
| #ifndef UNIRANGE_H |
| #define UNIRANGE_H |
| |
| #include "unicode/utypes.h" |
| |
| U_NAMESPACE_BEGIN |
| |
| class UnicodeString; |
| |
| /** |
| * %%% INTERNAL CLASS USED BY RuleBasedTransliterator %%% |
| * |
| * A range of Unicode characters. Support the operations of testing for |
| * inclusion (does this range contain this character?) and splitting. |
| * Splitting involves breaking a range into two smaller ranges around a |
| * character inside the original range. The split character is not included |
| * in either range. If the split character is at either extreme end of the |
| * range, one of the split products is an empty range. |
| * |
| * This class is used internally to determine the largest available private |
| * use character range for variable stand-ins. |
| */ |
| class UnicodeRange { |
| |
| public: |
| |
| UChar start; |
| |
| int32_t length; |
| |
| UnicodeRange(UChar start, int32_t length); |
| |
| /** |
| * CALLER OWNS RESULT. |
| */ |
| UnicodeRange* clone() const; |
| |
| UBool contains(UChar c) const; |
| |
| /** |
| * Assume that contains(c) is true. Split this range into two new |
| * ranges around the character c. Make this range one of the new ranges |
| * (modify it in place) and return the other new range. The character |
| * itself is not included in either range. If the split results in an |
| * empty range (that is, if c == start or c == start + length - 1) then |
| * return null. |
| * |
| * MODIFIES THIS RANGE IN PLACE. |
| * |
| * CALLER OWNS RESULT. |
| */ |
| UnicodeRange* split(UChar c); |
| |
| /** |
| * Finds the largest subrange of this range that is unused by the |
| * given string. A subrange is unused by a string if the string |
| * contains no characters in that range. If the given string |
| * contains no characters in this range, then this range itself is |
| * returned. |
| * |
| * CALLER OWNS RESULT. |
| */ |
| UnicodeRange* largestUnusedSubrange(const UnicodeString& str, UErrorCode &status) const; |
| |
| private: |
| |
| // For UVector of UnicodeRange* objects |
| static void U_CALLCONV deleter(void*); |
| |
| }; |
| |
| U_NAMESPACE_END |
| |
| #endif |