xref: /aosp_15_r20/external/icu/libicu/cts_headers/unicode/unifunct.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
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