]> granicus.if.org Git - icu/commitdiff
ICU-13775 Fix build issues on MinGW and Clang-for-Windows (with exported template...
authorJeff Genovy <29107334+jefgen@users.noreply.github.com>
Fri, 25 May 2018 07:27:56 +0000 (07:27 +0000)
committerJeff Genovy <29107334+jefgen@users.noreply.github.com>
Fri, 25 May 2018 07:27:56 +0000 (07:27 +0000)
X-SVN-Rev: 41460

icu4c/source/i18n/number_utils.h
icu4c/source/i18n/numparse_affixes.h
icu4c/source/i18n/numparse_compositions.h
icu4c/source/i18n/numparse_impl.h

index 86f56983a402747c58add1ed0964556a4b626cf9..e11da1394226f66ead8924cf252d02b4ad03e930 100644 (file)
 #include "decNumber.h"
 #include "charstr.h"
 
-U_NAMESPACE_BEGIN namespace number {
+U_NAMESPACE_BEGIN
+
+#define DECNUM_INITIAL_CAPACITY 34
+
+// Export an explicit template instantiation of the MaybeStackHeaderAndArray that is used as a data member of DecNum.
+// When building DLLs for Windows this is required even though no direct access to the MaybeStackHeaderAndArray leaks out of the i18n library.
+// (See digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples.)
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackHeaderAndArray<decNumber, char, DECNUM_INITIAL_CAPACITY>;
+#endif
+
+namespace number {
 namespace impl {
 
 struct MicroProps : public MicroPropsGenerator {
@@ -192,15 +203,6 @@ getPatternForStyle(const Locale& locale, const char* nsName, CldrPatternStyle st
 } // namespace utils
 
 
-#define DECNUM_INITIAL_CAPACITY 34
-
-  // Export an explicit template instantiation of the MaybeStackHeaderAndArray that is used as a data member of DecNum.
-  // When building DLLs for Windows this is required even though no direct access to the MaybeStackHeaderAndArray leaks out of the i18n library.
-  // (See digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples.)
-#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
-template class U_I18N_API MaybeStackHeaderAndArray<decNumber, char, DECNUM_INITIAL_CAPACITY>;
-#endif
-
 /** A very thin C++ wrapper around decNumber.h */
 // Exported as U_I18N_API for tests
 class U_I18N_API DecNum : public UMemory {
index 5449d227da5d360fb296e4c28899e3936bdeb729..1a90b31b3e23fcd1d4d0eaa63439878951643bae 100644 (file)
@@ -15,7 +15,8 @@
 
 #include <array>
 
-U_NAMESPACE_BEGIN namespace numparse {
+U_NAMESPACE_BEGIN
+namespace numparse {
 namespace impl {
 
 // Forward-declaration of implementation classes for friending
@@ -44,13 +45,6 @@ class CodePointMatcher : public NumberParseMatcher, public UMemory {
 };
 
 
-// Export an explicit template instantiation of the MaybeStackArray that is used as a data member of CodePointMatcherWarehouse.
-// When building DLLs for Windows this is required even though no direct access to the MaybeStackArray leaks out of the i18n library.
-// (See numparse_compositions.h, digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples.)
-#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
-template class U_I18N_API MaybeStackArray<CodePointMatcher*, 3>;
-#endif
-
 /**
  * A warehouse to retain ownership of CodePointMatchers.
  */
@@ -163,14 +157,6 @@ class AffixPatternMatcherBuilder : public TokenConsumer, public MutableMatcherCo
     void addMatcher(NumberParseMatcher& matcher) override;
 };
 
-// Export an explicit template instantiation of the CompactUnicodeString that is used as a data member of AffixPatternMatcher.
-// Also an explicit template instantiation of the MaybeStackArray that is used inside of the CompactUnicodeString.
-// When building DLLs for Windows this is required even though no direct access to the CompactUnicodeString leaks out of the i18n library.
-// (See digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples.)
-#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
-template class U_I18N_API MaybeStackArray<UChar, 4>;
-template class U_I18N_API CompactUnicodeString<4>;
-#endif
 
 // Exported as U_I18N_API for tests
 class U_I18N_API AffixPatternMatcher : public ArraySeriesMatcher {
@@ -248,6 +234,16 @@ class AffixMatcherWarehouse {
 
 } // namespace impl
 } // namespace numparse
+
+// Export a explicit template instantiations of MaybeStackArray and CompactUnicodeString.
+// When building DLLs for Windows this is required even though no direct access leaks out of the i18n library.
+// (See digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples.)
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackArray<UChar, 4>;
+template class U_I18N_API MaybeStackArray<numparse::impl::CodePointMatcher*, 3>;
+template class U_I18N_API numparse::impl::CompactUnicodeString<4>;
+#endif
+
 U_NAMESPACE_END
 
 #endif //__NUMPARSE_AFFIXES_H__
index 2a993928da8c39a9466d2accc7e6a22cb464fd8e..f085912def1533f392163582a78b113059480718 100644 (file)
@@ -9,9 +9,17 @@
 
 #include "numparse_types.h"
 
-U_NAMESPACE_BEGIN namespace numparse {
-namespace impl {
+U_NAMESPACE_BEGIN
+
+// Export an explicit template instantiation of the MaybeStackArray that is used as a data member of ArraySeriesMatcher.
+// When building DLLs for Windows this is required even though no direct access to the MaybeStackArray leaks out of the i18n library.
+// (See digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples.)
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackArray<const numparse::impl::NumberParseMatcher*, 3>;
+#endif
 
+namespace numparse {
+namespace impl {
 
 /**
  * Base class for AnyMatcher and SeriesMatcher.
@@ -78,13 +86,6 @@ class U_I18N_API SeriesMatcher : public CompositionMatcher {
     SeriesMatcher() = default;
 };
 
-// Export an explicit template instantiation of the MaybeStackArray that is used as a data member of ArraySeriesMatcher.
-// When building DLLs for Windows this is required even though no direct access to the MaybeStackArray leaks out of the i18n library.
-// (See digitlst.h, pluralaffix.h, datefmt.h, and others for similar examples.)
-#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
-template class U_I18N_API MaybeStackArray<const NumberParseMatcher*, 3>;
-#endif
-
 /**
  * An implementation of SeriesMatcher that references an array of matchers.
  *
index 0fd58e549254de634ed3cda533cb376bd9d5cf07..e0e36071860ec2eaf02dafa52612a1031179e1a1 100644 (file)
 #include "numparse_validators.h"
 #include "number_multiplier.h"
 
-U_NAMESPACE_BEGIN namespace numparse {
-namespace impl {
+U_NAMESPACE_BEGIN
 
 // Export an explicit template instantiation of the MaybeStackArray that is used as a data member of NumberParserImpl.
 // When building DLLs for Windows this is required even though no direct access to the MaybeStackArray leaks out of the i18n library.
 // (See numparse_compositions.h, numparse_affixes.h, datefmt.h, and others for similar examples.)
 #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
-template class U_I18N_API MaybeStackArray<const NumberParseMatcher*, 10>;
+template class U_I18N_API MaybeStackArray<const numparse::impl::NumberParseMatcher*, 10>;
 #endif
 
+namespace numparse {
+namespace impl {
+
 // Exported as U_I18N_API for tests
 class U_I18N_API NumberParserImpl : public MutableMatcherCollection {
   public: