caniter.h revision 83a171d1a62abf406f7f44ae671823d5ec20db7d
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * Copyright (C) 1996-2011, International Business Machines Corporation and 483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************************* 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef CANITER_H 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CANITER_H 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_NORMALIZATION 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uobject.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unistr.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \file 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \brief C++ API: Canonical Iterator 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** Should permutation skip characters with combining class zero 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Should be either TRUE or FALSE. This is a compile time option 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.4 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef CANITER_SKIP_ZEROES 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CANITER_SKIP_ZEROES TRUE 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass Hashtable; 3450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass Normalizer2; 3527f654740f2a26ad62a5c155af9199af9e69b889clairehoclass Normalizer2Impl; 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This class allows one to iterate through all the strings that are canonically equivalent to a given 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * string. For example, here are some sample results: 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruResults for: {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA} 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru1: \\u0041\\u030A\\u0064\\u0307\\u0327 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA} 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru2: \\u0041\\u030A\\u0064\\u0327\\u0307 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE} 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru3: \\u0041\\u030A\\u1E0B\\u0327 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA} 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru4: \\u0041\\u030A\\u1E11\\u0307 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE} 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru5: \\u00C5\\u0064\\u0307\\u0327 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA} 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru6: \\u00C5\\u0064\\u0327\\u0307 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE} 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru7: \\u00C5\\u1E0B\\u0327 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA} 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru8: \\u00C5\\u1E11\\u0307 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE} 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru9: \\u212B\\u0064\\u0307\\u0327 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA} 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru10: \\u212B\\u0064\\u0327\\u0307 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE} 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru11: \\u212B\\u1E0B\\u0327 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA} 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru12: \\u212B\\u1E11\\u0307 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE} 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *<br>Note: the code is intended for use with small strings, and is not suitable for larger ones, 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * since it has not been optimized for that situation. 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Note, CanonicalIterator is not intended to be subclassed. 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @author M. Davis 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @author C++ port by V. Weinstein 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.4 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass U_COMMON_API CanonicalIterator : public UObject { 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Construct a CanonicalIterator object 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param source string to get results for 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Fill-in parameter which receives the status of this operation. 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.4 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CanonicalIterator(const UnicodeString &source, UErrorCode &status); 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** Destructor 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Cleans pieces 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.4 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~CanonicalIterator(); 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Gets the NFD form of the current source we are iterating over. 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return gets the source: NOTE: it is the NFD form of source 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.4 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString getSource(); 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Resets the iterator so that one can start again from the beginning. 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.4 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void reset(); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the next canonically equivalent string. 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <br><b>Warning: The strings are not guaranteed to be in any particular order.</b> 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the next string that is canonically equivalent. A bogus string is returned when 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the iteration is done. 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.4 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString next(); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set a new source for this iterator. Allows object reuse. 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param newSource the source string to iterate against. This allows the same iterator to be used 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * while changing the source string, saving object creation. 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Fill-in parameter which receives the status of this operation. 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.4 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void setSource(const UnicodeString &newSource, UErrorCode &status); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#ifndef U_HIDE_INTERNAL_API 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Dumb recursive implementation of permutation. 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * TODO: optimize 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param source the string to find permutations for 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param skipZeros determine if skip zeros 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param result the results in a set. 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Fill-in parameter which receives the status of this operation. 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static void U_EXPORT2 permute(UnicodeString &source, UBool skipZeros, Hashtable *result, UErrorCode &status); 13083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif /* U_HIDE_INTERNAL_API */ 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for this class. 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.2 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static UClassID U_EXPORT2 getStaticClassID(); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for the actual class. 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.2 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UClassID getDynamicClassID() const; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ===================== PRIVATES ============================== 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // private default constructor 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CanonicalIterator(); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Copy constructor. Private for now. 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CanonicalIterator(const CanonicalIterator& other); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Assignment operator. Private for now. 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CanonicalIterator& operator=(const CanonicalIterator& other); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // fields 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString source; 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool done; 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 2 dimensional array holds the pieces of the string with 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // their different canonically equivalent representations 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString **pieces; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pieces_length; 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t *pieces_lengths; 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // current is used in iterating to combine pieces 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t *current; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t current_length; 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // transient fields 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString buffer; 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const Normalizer2 &nfd; 18227f654740f2a26ad62a5c155af9199af9e69b889claireho const Normalizer2Impl &nfcImpl; 18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // we have a segment, in NFD. Find all the strings that are canonically equivalent to it. 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString *getEquivalents(const UnicodeString &segment, int32_t &result_len, UErrorCode &status); //private String[] getEquivalents(String segment) 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //Set getEquivalents2(String segment); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Hashtable *getEquivalents2(Hashtable *fillinResult, const UChar *segment, int32_t segLen, UErrorCode &status); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //Hashtable *getEquivalents2(const UnicodeString &segment, int32_t segLen, UErrorCode &status); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * See if the decomposition of cp2 is at segment starting at segmentPos 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (with canonical rearrangment!) 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If so, take the remainder, and return the equivalents 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //Set extract(int comp, String segment, int segmentPos, StringBuffer buffer); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Hashtable *extract(Hashtable *fillinResult, UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //Hashtable *extract(UChar32 comp, const UnicodeString &segment, int32_t segLen, int32_t segmentPos, UErrorCode &status); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void cleanPieces(); 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_NORMALIZATION */ 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 209