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