+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
*
-* Copyright (C) 1998-2012, International Business Machines
+* Copyright (C) 1998-2014, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
#include "unicode/utypes.h"
-#if !UCONFIG_NO_FORMATTING
+#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_CONVERSION
#include "locbund.h"
#include "cmemory.h"
#include "cstring.h"
#include "ucln_io.h"
+#include "mutex.h"
#include "umutex.h"
#include "unicode/ustring.h"
#include "unicode/uloc.h"
}
U_CDECL_END
-
static inline UNumberFormat * copyInvariantFormatter(ULocaleBundle *result, UNumberFormatStyle style) {
+ U_NAMESPACE_USE
+ static UMutex *gLock = STATIC_NEW(UMutex);
+ Mutex lock(gLock);
if (result->fNumberFormat[style-1] == NULL) {
- UErrorCode status = U_ZERO_ERROR;
- UBool needsInit;
-
- UMTX_CHECK(NULL, gPosixNumberFormat[style-1] == NULL, needsInit);
- if (needsInit) {
+ if (gPosixNumberFormat[style-1] == NULL) {
+ UErrorCode status = U_ZERO_ERROR;
UNumberFormat *formatAlias = unum_open(style, NULL, 0, "en_US_POSIX", NULL, &status);
-
- /* Cache upon first request. */
if (U_SUCCESS(status)) {
- umtx_lock(NULL);
gPosixNumberFormat[style-1] = formatAlias;
ucln_io_registerCleanup(UCLN_IO_LOCBUND, locbund_cleanup);
- umtx_unlock(NULL);
}
}
-
/* Copy the needed formatter. */
- result->fNumberFormat[style-1] = unum_clone(gPosixNumberFormat[style-1], &status);
+ if (gPosixNumberFormat[style-1] != NULL) {
+ UErrorCode status = U_ZERO_ERROR;
+ result->fNumberFormat[style-1] = unum_clone(gPosixNumberFormat[style-1], &status);
+ }
}
return result->fNumberFormat[style-1];
}