]> git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/quant.h
ICU-511.32.tar.gz
[apple/icu.git] / icuSources / i18n / quant.h
1 /*
2 **********************************************************************
3 * Copyright (C) 2001-2011, International Business Machines Corporation
4 * and others. All Rights Reserved.
5 **********************************************************************
6 * Date Name Description
7 * 07/26/01 aliu Creation.
8 **********************************************************************
9 */
10 #ifndef QUANT_H
11 #define QUANT_H
12
13 #include "unicode/utypes.h"
14
15 #if !UCONFIG_NO_TRANSLITERATION
16
17 #include "unicode/unifunct.h"
18 #include "unicode/unimatch.h"
19
20 U_NAMESPACE_BEGIN
21
22 class Quantifier : public UnicodeFunctor, public UnicodeMatcher {
23
24 public:
25
26 enum { MAX = 0x7FFFFFFF };
27
28 Quantifier(UnicodeFunctor *adoptedMatcher,
29 uint32_t minCount, uint32_t maxCount);
30
31 Quantifier(const Quantifier& o);
32
33 virtual ~Quantifier();
34
35 /**
36 * UnicodeFunctor API. Cast 'this' to a UnicodeMatcher* pointer
37 * and return the pointer.
38 * @return the UnicodeMatcher pointer.
39 */
40 virtual UnicodeMatcher* toMatcher() const;
41
42 /**
43 * Implement UnicodeFunctor
44 * @return a copy of the object.
45 */
46 virtual UnicodeFunctor* clone() const;
47
48 /**
49 * Implement UnicodeMatcher
50 * @param text the text to be matched
51 * @param offset on input, the index into text at which to begin
52 * matching. On output, the limit of the matched text. The
53 * number of matched characters is the output value of offset
54 * minus the input value. Offset should always point to the
55 * HIGH SURROGATE (leading code unit) of a pair of surrogates,
56 * both on entry and upon return.
57 * @param limit the limit index of text to be matched. Greater
58 * than offset for a forward direction match, less than offset for
59 * a backward direction match. The last character to be
60 * considered for matching will be text.charAt(limit-1) in the
61 * forward direction or text.charAt(limit+1) in the backward
62 * direction.
63 * @param incremental if TRUE, then assume further characters may
64 * be inserted at limit and check for partial matching. Otherwise
65 * assume the text as given is complete.
66 * @return a match degree value indicating a full match, a partial
67 * match, or a mismatch. If incremental is FALSE then
68 * U_PARTIAL_MATCH should never be returned.
69 */
70 virtual UMatchDegree matches(const Replaceable& text,
71 int32_t& offset,
72 int32_t limit,
73 UBool incremental);
74
75 /**
76 * Implement UnicodeMatcher
77 * @param result Output param to receive the pattern.
78 * @param escapeUnprintable if True then escape the unprintable characters.
79 * @return A reference to 'result'.
80 */
81 virtual UnicodeString& toPattern(UnicodeString& result,
82 UBool escapeUnprintable = FALSE) const;
83
84 /**
85 * Implement UnicodeMatcher
86 * @param v the given index value.
87 * @return true if this rule matches the given index value.
88 */
89 virtual UBool matchesIndexValue(uint8_t v) const;
90
91 /**
92 * Implement UnicodeMatcher
93 */
94 virtual void addMatchSetTo(UnicodeSet& toUnionTo) const;
95
96 /**
97 * UnicodeFunctor API
98 */
99 virtual void setData(const TransliterationRuleData*);
100
101 /**
102 * ICU "poor man's RTTI", returns a UClassID for the actual class.
103 */
104 virtual UClassID getDynamicClassID() const;
105
106 /**
107 * ICU "poor man's RTTI", returns a UClassID for this class.
108 */
109 static UClassID U_EXPORT2 getStaticClassID();
110
111 private:
112
113 UnicodeFunctor* matcher; // owned
114
115 uint32_t minCount;
116
117 uint32_t maxCount;
118 };
119
120 U_NAMESPACE_END
121
122 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
123
124 #endif