Index: icu46/source/common/mutex.cpp |
=================================================================== |
--- icu46/source/common/mutex.cpp (revision 0) |
+++ icu46/source/common/mutex.cpp (revision 0) |
@@ -0,0 +1,91 @@ |
+/* |
+******************************************************************************* |
+* |
+* Copyright (C) 2008-2010, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+* |
+******************************************************************************* |
+* file name: mutex.cpp |
+* encoding: US-ASCII |
+* tab size: 8 (not used) |
+* indentation:4 |
+*/ |
+ |
+#include "unicode/utypes.h" |
+#include "mutex.h" |
+ |
+U_NAMESPACE_BEGIN |
+ |
+void *SimpleSingleton::getInstance(InstantiatorFn *instantiator, const void *context, |
+ void *&duplicate, |
+ UErrorCode &errorCode) { |
+ duplicate=NULL; |
+ if(U_FAILURE(errorCode)) { |
+ return NULL; |
+ } |
+ void *instance; |
+ UMTX_CHECK(NULL, fInstance, instance); |
+ if(instance!=NULL) { |
+ return instance; |
+ } else { |
+ instance=instantiator(context, errorCode); |
+ Mutex mutex; |
+ if(fInstance==NULL && U_SUCCESS(errorCode)) { |
+ fInstance=instance; |
+ } else { |
+ duplicate=instance; |
+ } |
+ return fInstance; |
+ } |
+} |
+ |
+void *TriStateSingleton::getInstance(InstantiatorFn *instantiator, const void *context, |
+ void *&duplicate, |
+ UErrorCode &errorCode) { |
+ duplicate=NULL; |
+ if(U_FAILURE(errorCode)) { |
+ return NULL; |
+ } |
+ int8_t haveInstance; |
+ UMTX_CHECK(NULL, fHaveInstance, haveInstance); |
+ if(haveInstance>0) { |
+ return fInstance; // instance was created |
+ } else if(haveInstance<0) { |
+ errorCode=fErrorCode; // instance creation failed |
+ return NULL; |
+ } else /* haveInstance==0 */ { |
+ void *instance=instantiator(context, errorCode); |
+ Mutex mutex; |
+ if(fHaveInstance==0) { |
+ if(U_SUCCESS(errorCode)) { |
+ fInstance=instance; |
+ instance=NULL; |
+ fHaveInstance=1; |
+ } else { |
+ fErrorCode=errorCode; |
+ fHaveInstance=-1; |
+ } |
+ } else { |
+ errorCode=fErrorCode; |
+ } |
+ duplicate=instance; |
+ return fInstance; |
+ } |
+} |
+ |
+void TriStateSingleton::reset() { |
+ fInstance=NULL; |
+ fErrorCode=U_ZERO_ERROR; |
+ fHaveInstance=0; |
+} |
+ |
+#if UCONFIG_NO_SERVICE |
+ |
+/* If UCONFIG_NO_SERVICE, then there is no invocation of Mutex elsewhere in |
+ common, so add one here to force an export */ |
+static Mutex *aMutex = 0; |
+ |
+/* UCONFIG_NO_SERVICE */ |
+#endif |
+ |
+U_NAMESPACE_END |
Property changes on: icu46/source/common/mutex.cpp |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |