16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2007-2013, International Business Machines Corporation and
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* others. All Rights Reserved.                                                *
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File DTPTNGEN.H
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uvector.h"
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __DTPTNGEN_IMPL_H__
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __DTPTNGEN_IMPL_H__
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// TODO(claireho): Split off Builder class.
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// TODO(claireho): If splitting off Builder class: As subclass or independent?
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define MAX_PATTERN_ENTRIES 52
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define MAX_CLDR_FIELD_LEN  60
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define MAX_DT_TOKEN        50
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define MAX_RESOURCE_FIELD  12
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define MAX_AVAILABLE_FORMATS  12
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define NONE          0
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define EXTRA_FIELD   0x10000
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define MISSING_FIELD  0x1000
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define MAX_STRING_ENUMERATION  200
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SINGLE_QUOTE      ((UChar)0x0027)
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define FORWARDSLASH      ((UChar)0x002F)
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define BACKSLASH         ((UChar)0x005C)
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SPACE             ((UChar)0x0020)
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define QUOTATION_MARK    ((UChar)0x0022)
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ASTERISK          ((UChar)0x002A)
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PLUSSITN          ((UChar)0x002B)
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define COMMA             ((UChar)0x002C)
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define HYPHEN            ((UChar)0x002D)
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define DOT               ((UChar)0x002E)
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define COLON             ((UChar)0x003A)
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_A             ((UChar)0x0041)
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_C             ((UChar)0x0043)
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_D             ((UChar)0x0044)
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_E             ((UChar)0x0045)
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_F             ((UChar)0x0046)
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_G             ((UChar)0x0047)
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_H             ((UChar)0x0048)
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_J             ((UChar)0x004A)
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_K             ((UChar)0x004B)
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_L             ((UChar)0x004C)
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_M             ((UChar)0x004D)
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_O             ((UChar)0x004F)
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_Q             ((UChar)0x0051)
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_S             ((UChar)0x0053)
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_T             ((UChar)0x0054)
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_U             ((UChar)0x0055)
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_V             ((UChar)0x0056)
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_W             ((UChar)0x0057)
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_X             ((UChar)0x0058)
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_Y             ((UChar)0x0059)
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAP_Z             ((UChar)0x005A)
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOWLINE           ((UChar)0x005F)
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_A             ((UChar)0x0061)
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_C             ((UChar)0x0063)
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_D             ((UChar)0x0064)
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_E             ((UChar)0x0065)
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_F             ((UChar)0x0066)
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_G             ((UChar)0x0067)
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_H             ((UChar)0x0068)
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_I             ((UChar)0x0069)
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_J             ((UChar)0x006A)
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_K             ((UChar)0x006B)
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_L             ((UChar)0x006C)
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_M             ((UChar)0x006D)
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_N             ((UChar)0x006E)
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_O             ((UChar)0x006F)
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_P             ((UChar)0x0070)
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_Q             ((UChar)0x0071)
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_R             ((UChar)0x0072)
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_S             ((UChar)0x0073)
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_T             ((UChar)0x0074)
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_U             ((UChar)0x0075)
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_V             ((UChar)0x0076)
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_W             ((UChar)0x0077)
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_X             ((UChar)0x0078)
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_Y             ((UChar)0x0079)
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LOW_Z             ((UChar)0x007A)
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define DT_SHORT          -0x102
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define DT_LONG           -0x103
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define DT_NUMERIC         0x100
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define DT_NARROW         -0x101
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define DT_DELTA           0x10
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst int32_t UDATPG_FRACTIONAL_MASK = 1<<UDATPG_FRACTIONAL_SECOND_FIELD;
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst int32_t UDATPG_SECOND_AND_FRACTIONAL_MASK = (1<<UDATPG_SECOND_FIELD) | (1<<UDATPG_FRACTIONAL_SECOND_FIELD);
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum dtStrEnum {
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DT_BASESKELETON,
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DT_SKELETON,
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DT_PATTERN
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}dtStrEnum;
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct dtTypeElem {
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UChar                  patternChar;
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDateTimePatternField  field;
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int16_t                type;
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int16_t                minLen;
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int16_t                weight;
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}dtTypeElem;
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass PtnSkeleton : public UMemory {
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t type[UDATPG_FIELD_COUNT];
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString original[UDATPG_FIELD_COUNT];
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString baseOriginal[UDATPG_FIELD_COUNT];
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnSkeleton();
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnSkeleton(const PtnSkeleton& other);
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool equals(const PtnSkeleton& other);
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString getSkeleton();
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString getBaseSkeleton();
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~PtnSkeleton();
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass PtnElem : public UMemory {
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString basePattern;
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnSkeleton   *skeleton;
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString pattern;
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool         skeletonWasSpecified; // if specified in availableFormats, not derived
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnElem       *next;
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnElem(const UnicodeString &basePattern, const UnicodeString &pattern);
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~PtnElem();
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass FormatParser : public UMemory {
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString items[MAX_DT_TOKEN];
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t  itemNumber;
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FormatParser();
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~FormatParser();
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void set(const UnicodeString& patternString);
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool isQuoteLiteral(const UnicodeString& s) const;
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void getQuoteLiteral(UnicodeString& quote, int32_t *itemIndex);
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t getCanonicalIndex(const UnicodeString& s) { return getCanonicalIndex(s, TRUE); }
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t getCanonicalIndex(const UnicodeString& s, UBool strict);
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool isPatternSeparator(UnicodeString& field);
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void setFilter(UErrorCode &status);
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   typedef enum TokenStatus {
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org       START,
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org       ADD_TOKEN,
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org       SYNTAX_ERROR,
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org       DONE
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   } ToeknStatus;
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   TokenStatus status;
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   virtual TokenStatus setTokens(const UnicodeString& pattern, int32_t startPos, int32_t *len);
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DistanceInfo : public UMemory {
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t missingFieldMask;
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t extraFieldMask;
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DistanceInfo() {}
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~DistanceInfo();
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void clear() { missingFieldMask = extraFieldMask = 0; }
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void setTo(DistanceInfo& other);
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void addMissing(int32_t field) { missingFieldMask |= (1<<field); }
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void addExtra(int32_t field) { extraFieldMask |= (1<<field); }
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DateTimeMatcher: public UMemory {
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnSkeleton skeleton;
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void getBasePattern(UnicodeString &basePattern);
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString getPattern();
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void set(const UnicodeString& pattern, FormatParser* fp);
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton& skeleton);
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void copyFrom(const PtnSkeleton& skeleton);
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void copyFrom();
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnSkeleton* getSkeletonPtr();
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool equals(const DateTimeMatcher* other) const;
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t getDistance(const DateTimeMatcher& other, int32_t includeMask, DistanceInfo& distanceInfo);
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateTimeMatcher();
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateTimeMatcher(const DateTimeMatcher& other);
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~DateTimeMatcher();
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t getFieldMask();
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass PatternMap : public UMemory {
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnElem *boot[MAX_PATTERN_ENTRIES];
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PatternMap();
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual  ~PatternMap();
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void  add(const UnicodeString& basePattern, const PtnSkeleton& skeleton, const UnicodeString& value, UBool skeletonWasSpecified, UErrorCode& status);
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UnicodeString* getPatternFromBasePattern(UnicodeString& basePattern, UBool& skeletonWasSpecified);
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UnicodeString* getPatternFromSkeleton(PtnSkeleton& skeleton, const PtnSkeleton** specifiedSkeletonPtr = 0);
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void copyFrom(const PatternMap& other, UErrorCode& status);
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnElem* getHeader(UChar baseChar);
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool equals(const PatternMap& other);
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool isDupAllowed;
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnElem*  getDuplicateElem(const UnicodeString &basePattern, const PtnSkeleton& skeleton, PtnElem *baseElem);
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; // end  PatternMap
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass PatternMapIterator : public UMemory {
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PatternMapIterator();
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~PatternMapIterator();
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void set(PatternMap& patternMap);
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnSkeleton* getSkeleton();
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool hasNext();
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateTimeMatcher& next();
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t bootIndex;
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PtnElem *nodePtr;
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateTimeMatcher *matcher;
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    PatternMap *patternMap;
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DTSkeletonEnumeration : public StringEnumeration {
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DTSkeletonEnumeration(PatternMap &patternMap, dtStrEnum type, UErrorCode& status);
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~DTSkeletonEnumeration();
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UClassID U_EXPORT2 getStaticClassID(void);
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UClassID getDynamicClassID(void) const;
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual const UnicodeString* snext(UErrorCode& status);
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void reset(UErrorCode& status);
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t count(UErrorCode& status) const;
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t pos;
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool isCanonicalItem(const UnicodeString& item);
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UVector *fSkeletons;
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DTRedundantEnumeration : public StringEnumeration {
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DTRedundantEnumeration();
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~DTRedundantEnumeration();
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UClassID U_EXPORT2 getStaticClassID(void);
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UClassID getDynamicClassID(void) const;
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual const UnicodeString* snext(UErrorCode& status);
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void reset(UErrorCode& status);
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual int32_t count(UErrorCode& status) const;
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void add(const UnicodeString &pattern, UErrorCode& status);
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t pos;
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool isCanonicalItem(const UnicodeString& item);
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UVector *fPatterns;
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
264