Chromium Code Reviews

Unified Diff: source/i18n/dtptngen_impl.h

Issue 2440913002: Update ICU to 58.1
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « source/i18n/dtptngen.cpp ('k') | source/i18n/dtrule.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « source/i18n/dtptngen.cpp ('k') | source/i18n/dtrule.cpp » ('j') | no next file with comments »

Powered by Google App Engine