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