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