• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
126