| Index: source/i18n/dtptngen_impl.h
|
| diff --git a/source/i18n/dtptngen_impl.h b/source/i18n/dtptngen_impl.h
|
| index ec9fb00dfd6e6558e62bcc44502a603147432dcc..00a707585b7a5ba612b9b329d09bbb7ebcc02df0 100644
|
| --- a/source/i18n/dtptngen_impl.h
|
| +++ b/source/i18n/dtptngen_impl.h
|
| @@ -1,7 +1,9 @@
|
| +// Copyright (C) 2016 and later: Unicode, Inc. and others.
|
| +// License & terms of use: http://www.unicode.org/copyright.html
|
| /*
|
| *******************************************************************************
|
| -* Copyright (C) 2007-2015, International Business Machines Corporation and
|
| -* others. All Rights Reserved. *
|
| +* Copyright (C) 2007-2016, International Business Machines Corporation and
|
| +* others. All Rights Reserved.
|
| *******************************************************************************
|
| *
|
| * File DTPTNGEN.H
|
| @@ -9,11 +11,12 @@
|
| *******************************************************************************
|
| */
|
|
|
| -#include "uvector.h"
|
| -
|
| #ifndef __DTPTNGEN_IMPL_H__
|
| #define __DTPTNGEN_IMPL_H__
|
|
|
| +#include "unicode/udatpg.h"
|
| +#include "uvector.h"
|
| +
|
| // TODO(claireho): Split off Builder class.
|
| // TODO(claireho): If splitting off Builder class: As subclass or independent?
|
|
|
| @@ -38,6 +41,7 @@
|
| #define DOT ((UChar)0x002E)
|
| #define COLON ((UChar)0x003A)
|
| #define CAP_A ((UChar)0x0041)
|
| +#define CAP_B ((UChar)0x0042)
|
| #define CAP_C ((UChar)0x0043)
|
| #define CAP_D ((UChar)0x0044)
|
| #define CAP_E ((UChar)0x0045)
|
| @@ -60,6 +64,7 @@
|
| #define CAP_Z ((UChar)0x005A)
|
| #define LOWLINE ((UChar)0x005F)
|
| #define LOW_A ((UChar)0x0061)
|
| +#define LOW_B ((UChar)0x0062)
|
| #define LOW_C ((UChar)0x0063)
|
| #define LOW_D ((UChar)0x0064)
|
| #define LOW_E ((UChar)0x0065)
|
| @@ -109,17 +114,56 @@ typedef struct dtTypeElem {
|
| int16_t weight;
|
| }dtTypeElem;
|
|
|
| +// A compact storage mechanism for skeleton field strings. Several dozen of these will be created
|
| +// for a typical DateTimePatternGenerator instance.
|
| +class SkeletonFields : public UMemory {
|
| +public:
|
| + SkeletonFields();
|
| + void clear();
|
| + void copyFrom(const SkeletonFields& other);
|
| + void clearField(int32_t field);
|
| + UChar getFieldChar(int32_t field) const;
|
| + int32_t getFieldLength(int32_t field) const;
|
| + void populate(int32_t field, const UnicodeString& value);
|
| + void populate(int32_t field, UChar repeatChar, int32_t repeatCount);
|
| + UBool isFieldEmpty(int32_t field) const;
|
| + UnicodeString& appendTo(UnicodeString& string) const;
|
| + UnicodeString& appendFieldTo(int32_t field, UnicodeString& string) const;
|
| + UChar getFirstChar() const;
|
| + inline UBool operator==(const SkeletonFields& other) const;
|
| + inline UBool operator!=(const SkeletonFields& other) const;
|
| +
|
| +private:
|
| + int8_t chars[UDATPG_FIELD_COUNT];
|
| + int8_t lengths[UDATPG_FIELD_COUNT];
|
| +};
|
| +
|
| +inline UBool SkeletonFields::operator==(const SkeletonFields& other) const {
|
| + return (uprv_memcmp(chars, other.chars, sizeof(chars)) == 0
|
| + && uprv_memcmp(lengths, other.lengths, sizeof(lengths)) == 0);
|
| +}
|
| +
|
| +inline UBool SkeletonFields::operator!=(const SkeletonFields& other) const {
|
| + return (! operator==(other));
|
| +}
|
| +
|
| class PtnSkeleton : public UMemory {
|
| public:
|
| int32_t type[UDATPG_FIELD_COUNT];
|
| - UnicodeString original[UDATPG_FIELD_COUNT];
|
| - UnicodeString baseOriginal[UDATPG_FIELD_COUNT];
|
| + SkeletonFields original;
|
| + SkeletonFields baseOriginal;
|
|
|
| PtnSkeleton();
|
| PtnSkeleton(const PtnSkeleton& other);
|
| - UBool equals(const PtnSkeleton& other);
|
| - UnicodeString getSkeleton();
|
| - UnicodeString getBaseSkeleton();
|
| + void copyFrom(const PtnSkeleton& other);
|
| + void clear();
|
| + UBool equals(const PtnSkeleton& other) const;
|
| + UnicodeString getSkeleton() const;
|
| + UnicodeString getBaseSkeleton() const;
|
| + UChar getFirstChar() const;
|
| +
|
| + // TODO: Why is this virtual, as well as the other destructors in this file? We don't want
|
| + // vtables when we don't use class objects polymorphically.
|
| virtual ~PtnSkeleton();
|
| };
|
|
|
| @@ -180,7 +224,7 @@ class DateTimeMatcher: public UMemory {
|
| public:
|
| PtnSkeleton skeleton;
|
|
|
| - void getBasePattern(UnicodeString &basePattern);
|
| + void getBasePattern(UnicodeString& basePattern);
|
| UnicodeString getPattern();
|
| void set(const UnicodeString& pattern, FormatParser* fp);
|
| void set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton& skeleton);
|
|
|