1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /* 4*0e209d39SAndroid Build Coastguard Worker ********************************************************************** 5*0e209d39SAndroid Build Coastguard Worker * Copyright (c) 2002-2005, International Business Machines Corporation 6*0e209d39SAndroid Build Coastguard Worker * and others. All Rights Reserved. 7*0e209d39SAndroid Build Coastguard Worker ********************************************************************** 8*0e209d39SAndroid Build Coastguard Worker * Date Name Description 9*0e209d39SAndroid Build Coastguard Worker * 01/14/2002 aliu Creation. 10*0e209d39SAndroid Build Coastguard Worker ********************************************************************** 11*0e209d39SAndroid Build Coastguard Worker */ 12*0e209d39SAndroid Build Coastguard Worker #ifndef UNIFUNCT_H 13*0e209d39SAndroid Build Coastguard Worker #define UNIFUNCT_H 14*0e209d39SAndroid Build Coastguard Worker 15*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 16*0e209d39SAndroid Build Coastguard Worker 17*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API 18*0e209d39SAndroid Build Coastguard Worker 19*0e209d39SAndroid Build Coastguard Worker #include "unicode/uobject.h" 20*0e209d39SAndroid Build Coastguard Worker 21*0e209d39SAndroid Build Coastguard Worker /** 22*0e209d39SAndroid Build Coastguard Worker * \file 23*0e209d39SAndroid Build Coastguard Worker * \brief C++ API: Unicode Functor 24*0e209d39SAndroid Build Coastguard Worker */ 25*0e209d39SAndroid Build Coastguard Worker 26*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN 27*0e209d39SAndroid Build Coastguard Worker 28*0e209d39SAndroid Build Coastguard Worker class UnicodeMatcher; 29*0e209d39SAndroid Build Coastguard Worker class UnicodeReplacer; 30*0e209d39SAndroid Build Coastguard Worker class TransliterationRuleData; 31*0e209d39SAndroid Build Coastguard Worker 32*0e209d39SAndroid Build Coastguard Worker /** 33*0e209d39SAndroid Build Coastguard Worker * <code>UnicodeFunctor</code> is an abstract base class for objects 34*0e209d39SAndroid Build Coastguard Worker * that perform match and/or replace operations on Unicode strings. 35*0e209d39SAndroid Build Coastguard Worker * @author Alan Liu 36*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 37*0e209d39SAndroid Build Coastguard Worker */ 38*0e209d39SAndroid Build Coastguard Worker class U_COMMON_API UnicodeFunctor : public UObject { 39*0e209d39SAndroid Build Coastguard Worker 40*0e209d39SAndroid Build Coastguard Worker public: 41*0e209d39SAndroid Build Coastguard Worker 42*0e209d39SAndroid Build Coastguard Worker /** 43*0e209d39SAndroid Build Coastguard Worker * Destructor 44*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 45*0e209d39SAndroid Build Coastguard Worker */ 46*0e209d39SAndroid Build Coastguard Worker virtual ~UnicodeFunctor(); 47*0e209d39SAndroid Build Coastguard Worker 48*0e209d39SAndroid Build Coastguard Worker /** 49*0e209d39SAndroid Build Coastguard Worker * Return a copy of this object. All UnicodeFunctor objects 50*0e209d39SAndroid Build Coastguard Worker * have to support cloning in order to allow classes using 51*0e209d39SAndroid Build Coastguard Worker * UnicodeFunctor to implement cloning. 52*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 53*0e209d39SAndroid Build Coastguard Worker */ 54*0e209d39SAndroid Build Coastguard Worker virtual UnicodeFunctor* clone() const = 0; 55*0e209d39SAndroid Build Coastguard Worker 56*0e209d39SAndroid Build Coastguard Worker /** 57*0e209d39SAndroid Build Coastguard Worker * Cast 'this' to a UnicodeMatcher* pointer and return the 58*0e209d39SAndroid Build Coastguard Worker * pointer, or null if this is not a UnicodeMatcher*. Subclasses 59*0e209d39SAndroid Build Coastguard Worker * that mix in UnicodeMatcher as a base class must override this. 60*0e209d39SAndroid Build Coastguard Worker * This protocol is required because a pointer to a UnicodeFunctor 61*0e209d39SAndroid Build Coastguard Worker * cannot be cast to a pointer to a UnicodeMatcher, since 62*0e209d39SAndroid Build Coastguard Worker * UnicodeMatcher is a mixin that does not derive from 63*0e209d39SAndroid Build Coastguard Worker * UnicodeFunctor. 64*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 65*0e209d39SAndroid Build Coastguard Worker */ 66*0e209d39SAndroid Build Coastguard Worker virtual UnicodeMatcher* toMatcher() const; 67*0e209d39SAndroid Build Coastguard Worker 68*0e209d39SAndroid Build Coastguard Worker /** 69*0e209d39SAndroid Build Coastguard Worker * Cast 'this' to a UnicodeReplacer* pointer and return the 70*0e209d39SAndroid Build Coastguard Worker * pointer, or null if this is not a UnicodeReplacer*. Subclasses 71*0e209d39SAndroid Build Coastguard Worker * that mix in UnicodeReplacer as a base class must override this. 72*0e209d39SAndroid Build Coastguard Worker * This protocol is required because a pointer to a UnicodeFunctor 73*0e209d39SAndroid Build Coastguard Worker * cannot be cast to a pointer to a UnicodeReplacer, since 74*0e209d39SAndroid Build Coastguard Worker * UnicodeReplacer is a mixin that does not derive from 75*0e209d39SAndroid Build Coastguard Worker * UnicodeFunctor. 76*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 77*0e209d39SAndroid Build Coastguard Worker */ 78*0e209d39SAndroid Build Coastguard Worker virtual UnicodeReplacer* toReplacer() const; 79*0e209d39SAndroid Build Coastguard Worker 80*0e209d39SAndroid Build Coastguard Worker /** 81*0e209d39SAndroid Build Coastguard Worker * Return the class ID for this class. This is useful only for 82*0e209d39SAndroid Build Coastguard Worker * comparing to a return value from getDynamicClassID(). 83*0e209d39SAndroid Build Coastguard Worker * @return The class ID for all objects of this class. 84*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 85*0e209d39SAndroid Build Coastguard Worker */ 86*0e209d39SAndroid Build Coastguard Worker static UClassID U_EXPORT2 getStaticClassID(); 87*0e209d39SAndroid Build Coastguard Worker 88*0e209d39SAndroid Build Coastguard Worker /** 89*0e209d39SAndroid Build Coastguard Worker * Returns a unique class ID <b>polymorphically</b>. This method 90*0e209d39SAndroid Build Coastguard Worker * is to implement a simple version of RTTI, since not all C++ 91*0e209d39SAndroid Build Coastguard Worker * compilers support genuine RTTI. Polymorphic operator==() and 92*0e209d39SAndroid Build Coastguard Worker * clone() methods call this method. 93*0e209d39SAndroid Build Coastguard Worker * 94*0e209d39SAndroid Build Coastguard Worker * <p>Concrete subclasses of UnicodeFunctor should use the macro 95*0e209d39SAndroid Build Coastguard Worker * UOBJECT_DEFINE_RTTI_IMPLEMENTATION from uobject.h to 96*0e209d39SAndroid Build Coastguard Worker * provide definitions getStaticClassID and getDynamicClassID. 97*0e209d39SAndroid Build Coastguard Worker * 98*0e209d39SAndroid Build Coastguard Worker * @return The class ID for this object. All objects of a given 99*0e209d39SAndroid Build Coastguard Worker * class have the same class ID. Objects of other classes have 100*0e209d39SAndroid Build Coastguard Worker * different class IDs. 101*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 102*0e209d39SAndroid Build Coastguard Worker */ 103*0e209d39SAndroid Build Coastguard Worker virtual UClassID getDynamicClassID() const override = 0; 104*0e209d39SAndroid Build Coastguard Worker 105*0e209d39SAndroid Build Coastguard Worker /** 106*0e209d39SAndroid Build Coastguard Worker * Set the data object associated with this functor. The data 107*0e209d39SAndroid Build Coastguard Worker * object provides context for functor-to-standin mapping. This 108*0e209d39SAndroid Build Coastguard Worker * method is required when assigning a functor to a different data 109*0e209d39SAndroid Build Coastguard Worker * object. This function MAY GO AWAY later if the architecture is 110*0e209d39SAndroid Build Coastguard Worker * changed to pass data object pointers through the API. 111*0e209d39SAndroid Build Coastguard Worker * @internal ICU 2.1 112*0e209d39SAndroid Build Coastguard Worker */ 113*0e209d39SAndroid Build Coastguard Worker virtual void setData(const TransliterationRuleData*) = 0; 114*0e209d39SAndroid Build Coastguard Worker 115*0e209d39SAndroid Build Coastguard Worker protected: 116*0e209d39SAndroid Build Coastguard Worker 117*0e209d39SAndroid Build Coastguard Worker /** 118*0e209d39SAndroid Build Coastguard Worker * Since this class has pure virtual functions, 119*0e209d39SAndroid Build Coastguard Worker * a constructor can't be used. 120*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 121*0e209d39SAndroid Build Coastguard Worker */ 122*0e209d39SAndroid Build Coastguard Worker /*UnicodeFunctor();*/ 123*0e209d39SAndroid Build Coastguard Worker 124*0e209d39SAndroid Build Coastguard Worker }; 125*0e209d39SAndroid Build Coastguard Worker 126*0e209d39SAndroid Build Coastguard Worker /*inline UnicodeFunctor::UnicodeFunctor() {}*/ 127*0e209d39SAndroid Build Coastguard Worker 128*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 129*0e209d39SAndroid Build Coastguard Worker 130*0e209d39SAndroid Build Coastguard Worker #endif /* U_SHOW_CPLUSPLUS_API */ 131*0e209d39SAndroid Build Coastguard Worker 132*0e209d39SAndroid Build Coastguard Worker #endif 133