/* ********************************************************************** * 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