1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*******************************************************************************
31b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert* Copyright (C) 2007-2014, International Business Machines Corporation and
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* others. All Rights Reserved.                                                *
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*******************************************************************************
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* File DTPTNGEN.H
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*******************************************************************************
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "uvector.h"
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef __DTPTNGEN_IMPL_H__
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define __DTPTNGEN_IMPL_H__
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// TODO(claireho): Split off Builder class.
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// TODO(claireho): If splitting off Builder class: As subclass or independent?
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAX_PATTERN_ENTRIES 52
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAX_CLDR_FIELD_LEN  60
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAX_DT_TOKEN        50
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAX_RESOURCE_FIELD  12
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAX_AVAILABLE_FORMATS  12
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define NONE          0
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define EXTRA_FIELD   0x10000
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MISSING_FIELD  0x1000
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define MAX_STRING_ENUMERATION  200
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define SINGLE_QUOTE      ((UChar)0x0027)
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define FORWARDSLASH      ((UChar)0x002F)
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define BACKSLASH         ((UChar)0x005C)
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define SPACE             ((UChar)0x0020)
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define QUOTATION_MARK    ((UChar)0x0022)
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define ASTERISK          ((UChar)0x002A)
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define PLUSSITN          ((UChar)0x002B)
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define COMMA             ((UChar)0x002C)
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define HYPHEN            ((UChar)0x002D)
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define DOT               ((UChar)0x002E)
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define COLON             ((UChar)0x003A)
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_A             ((UChar)0x0041)
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_C             ((UChar)0x0043)
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_D             ((UChar)0x0044)
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_E             ((UChar)0x0045)
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_F             ((UChar)0x0046)
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_G             ((UChar)0x0047)
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_H             ((UChar)0x0048)
4759d709d503bab6e2b61931737e662dd293b40578ccornelius#define CAP_J             ((UChar)0x004A)
4885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define CAP_K             ((UChar)0x004B)
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_L             ((UChar)0x004C)
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_M             ((UChar)0x004D)
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_O             ((UChar)0x004F)
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_Q             ((UChar)0x0051)
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_S             ((UChar)0x0053)
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_T             ((UChar)0x0054)
5583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#define CAP_U             ((UChar)0x0055)
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_V             ((UChar)0x0056)
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_W             ((UChar)0x0057)
5859d709d503bab6e2b61931737e662dd293b40578ccornelius#define CAP_X             ((UChar)0x0058)
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_Y             ((UChar)0x0059)
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CAP_Z             ((UChar)0x005A)
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOWLINE           ((UChar)0x005F)
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_A             ((UChar)0x0061)
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_C             ((UChar)0x0063)
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_D             ((UChar)0x0064)
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_E             ((UChar)0x0065)
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_F             ((UChar)0x0066)
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_G             ((UChar)0x0067)
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_H             ((UChar)0x0068)
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_I             ((UChar)0x0069)
7085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define LOW_J             ((UChar)0x006A)
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_K             ((UChar)0x006B)
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_L             ((UChar)0x006C)
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_M             ((UChar)0x006D)
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_N             ((UChar)0x006E)
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_O             ((UChar)0x006F)
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_P             ((UChar)0x0070)
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_Q             ((UChar)0x0071)
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_R             ((UChar)0x0072)
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_S             ((UChar)0x0073)
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_T             ((UChar)0x0074)
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_U             ((UChar)0x0075)
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_V             ((UChar)0x0076)
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_W             ((UChar)0x0077)
8459d709d503bab6e2b61931737e662dd293b40578ccornelius#define LOW_X             ((UChar)0x0078)
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_Y             ((UChar)0x0079)
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LOW_Z             ((UChar)0x007A)
8785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define DT_SHORT          -0x102
8885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define DT_LONG           -0x103
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define DT_NUMERIC         0x100
9085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define DT_NARROW         -0x101
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define DT_DELTA           0x10
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst int32_t UDATPG_FRACTIONAL_MASK = 1<<UDATPG_FRACTIONAL_SECOND_FIELD;
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst int32_t UDATPG_SECOND_AND_FRACTIONAL_MASK = (1<<UDATPG_SECOND_FIELD) | (1<<UDATPG_FRACTIONAL_SECOND_FIELD);
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef enum dtStrEnum {
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    DT_BASESKELETON,
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    DT_SKELETON,
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    DT_PATTERN
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}dtStrEnum;
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef struct dtTypeElem {
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UChar                  patternChar;
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UDateTimePatternField  field;
10785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int16_t                type;
10885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int16_t                minLen;
10985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int16_t                weight;
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}dtTypeElem;
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass PtnSkeleton : public UMemory {
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t type[UDATPG_FIELD_COUNT];
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString original[UDATPG_FIELD_COUNT];
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString baseOriginal[UDATPG_FIELD_COUNT];
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnSkeleton();
119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnSkeleton(const PtnSkeleton& other);
120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool equals(const PtnSkeleton& other);
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString getSkeleton();
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString getBaseSkeleton();
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~PtnSkeleton();
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass PtnElem : public UMemory {
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString basePattern;
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnSkeleton   *skeleton;
131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString pattern;
13285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UBool         skeletonWasSpecified; // if specified in availableFormats, not derived
133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnElem       *next;
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnElem(const UnicodeString &basePattern, const UnicodeString &pattern);
136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~PtnElem();
137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass FormatParser : public UMemory {
141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString items[MAX_DT_TOKEN];
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t  itemNumber;
144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FormatParser();
146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~FormatParser();
147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void set(const UnicodeString& patternString);
148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool isQuoteLiteral(const UnicodeString& s) const;
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void getQuoteLiteral(UnicodeString& quote, int32_t *itemIndex);
150b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    int32_t getCanonicalIndex(const UnicodeString& s) { return getCanonicalIndex(s, TRUE); }
15185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    int32_t getCanonicalIndex(const UnicodeString& s, UBool strict);
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool isPatternSeparator(UnicodeString& field);
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void setFilter(UErrorCode &status);
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate:
156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru   typedef enum TokenStatus {
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru       START,
158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru       ADD_TOKEN,
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru       SYNTAX_ERROR,
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru       DONE
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru   } ToeknStatus;
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru   TokenStatus status;
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru   virtual TokenStatus setTokens(const UnicodeString& pattern, int32_t startPos, int32_t *len);
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass DistanceInfo : public UMemory {
168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t missingFieldMask;
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t extraFieldMask;
171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
172b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    DistanceInfo() {}
17383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius    virtual ~DistanceInfo();
174b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    void clear() { missingFieldMask = extraFieldMask = 0; }
175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void setTo(DistanceInfo& other);
176b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    void addMissing(int32_t field) { missingFieldMask |= (1<<field); }
177b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    void addExtra(int32_t field) { extraFieldMask |= (1<<field); }
178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass DateTimeMatcher: public UMemory {
181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnSkeleton skeleton;
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void getBasePattern(UnicodeString &basePattern);
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString getPattern();
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void set(const UnicodeString& pattern, FormatParser* fp);
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton& skeleton);
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void copyFrom(const PtnSkeleton& skeleton);
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void copyFrom();
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnSkeleton* getSkeletonPtr();
191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool equals(const DateTimeMatcher* other) const;
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t getDistance(const DateTimeMatcher& other, int32_t includeMask, DistanceInfo& distanceInfo);
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    DateTimeMatcher();
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    DateTimeMatcher(const DateTimeMatcher& other);
19583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius    virtual ~DateTimeMatcher();
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t getFieldMask();
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass PatternMap : public UMemory {
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnElem *boot[MAX_PATTERN_ENTRIES];
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PatternMap();
203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual  ~PatternMap();
20485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    void  add(const UnicodeString& basePattern, const PtnSkeleton& skeleton, const UnicodeString& value, UBool skeletonWasSpecified, UErrorCode& status);
20585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const UnicodeString* getPatternFromBasePattern(UnicodeString& basePattern, UBool& skeletonWasSpecified);
20685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const UnicodeString* getPatternFromSkeleton(PtnSkeleton& skeleton, const PtnSkeleton** specifiedSkeletonPtr = 0);
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void copyFrom(const PatternMap& other, UErrorCode& status);
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnElem* getHeader(UChar baseChar);
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool equals(const PatternMap& other);
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate:
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool isDupAllowed;
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnElem*  getDuplicateElem(const UnicodeString &basePattern, const PtnSkeleton& skeleton, PtnElem *baseElem);
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; // end  PatternMap
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass PatternMapIterator : public UMemory {
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PatternMapIterator();
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~PatternMapIterator();
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void set(PatternMap& patternMap);
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnSkeleton* getSkeleton();
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool hasNext();
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    DateTimeMatcher& next();
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate:
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t bootIndex;
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PtnElem *nodePtr;
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    DateTimeMatcher *matcher;
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    PatternMap *patternMap;
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
23085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass DTSkeletonEnumeration : public StringEnumeration {
231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    DTSkeletonEnumeration(PatternMap &patternMap, dtStrEnum type, UErrorCode& status);
233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~DTSkeletonEnumeration();
234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    static UClassID U_EXPORT2 getStaticClassID(void);
235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual UClassID getDynamicClassID(void) const;
236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual const UnicodeString* snext(UErrorCode& status);
237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual void reset(UErrorCode& status);
238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual int32_t count(UErrorCode& status) const;
239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate:
240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t pos;
241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool isCanonicalItem(const UnicodeString& item);
242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UVector *fSkeletons;
243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
24585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass DTRedundantEnumeration : public StringEnumeration {
246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    DTRedundantEnumeration();
248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual ~DTRedundantEnumeration();
249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    static UClassID U_EXPORT2 getStaticClassID(void);
250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual UClassID getDynamicClassID(void) const;
251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual const UnicodeString* snext(UErrorCode& status);
252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual void reset(UErrorCode& status);
253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    virtual int32_t count(UErrorCode& status) const;
254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void add(const UnicodeString &pattern, UErrorCode& status);
255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate:
256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t pos;
257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool isCanonicalItem(const UnicodeString& item);
258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UVector *fPatterns;
259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END
262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif
264