]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/servslkf.cpp
ICU-8.11.tar.gz
[apple/icu.git] / icuSources / common / servslkf.cpp
diff --git a/icuSources/common/servslkf.cpp b/icuSources/common/servslkf.cpp
new file mode 100644 (file)
index 0000000..b8afaaa
--- /dev/null
@@ -0,0 +1,122 @@
+/**
+ *******************************************************************************
+ * Copyright (C) 2001-2005, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ *
+ *******************************************************************************
+ */
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_SERVICE
+
+#include "unicode/resbund.h"
+#include "uresimp.h"
+#include "cmemory.h"
+#include "servloc.h"
+#include "ustrfmt.h"
+#include "uhash.h"
+#include "charstr.h"
+#include "ucln_cmn.h"
+#include "uassert.h"
+
+#define UNDERSCORE_CHAR ((UChar)0x005f)
+#define AT_SIGN_CHAR    ((UChar)64)
+#define PERIOD_CHAR     ((UChar)46)
+
+U_NAMESPACE_BEGIN
+
+/*
+ ******************************************************************
+ */
+
+SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt,
+                                               const UnicodeString& locale,
+                                               int32_t kind,
+                                               int32_t coverage)
+  : LocaleKeyFactory(coverage)
+  , _obj(objToAdopt)
+  , _id(locale)
+  , _kind(kind)
+{
+}
+
+SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(UObject* objToAdopt,
+                                               const Locale& locale,
+                                               int32_t kind,
+                                               int32_t coverage)
+  : LocaleKeyFactory(coverage)
+  , _obj(objToAdopt)
+  , _id()
+  , _kind(kind)
+{
+    LocaleUtility::initNameFromLocale(locale, _id);
+}
+
+SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory()
+{
+  delete _obj;
+  _obj = NULL;
+}
+
+UObject*
+SimpleLocaleKeyFactory::create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const
+{
+    if (U_SUCCESS(status)) {
+        const LocaleKey& lkey = (const LocaleKey&)key;
+        if (_kind == LocaleKey::KIND_ANY || _kind == lkey.kind()) {
+            UnicodeString keyID;
+            lkey.currentID(keyID);
+            if (_id == keyID) {
+                return service->cloneInstance(_obj);
+            }
+        }
+    }
+    return NULL;
+}
+
+//UBool
+//SimpleLocaleKeyFactory::isSupportedID(const UnicodeString& id, UErrorCode& /* status */) const
+//{
+//    return id == _id;
+//}
+
+void
+SimpleLocaleKeyFactory::updateVisibleIDs(Hashtable& result, UErrorCode& status) const
+{
+    if (U_SUCCESS(status)) {
+        if (_coverage & 0x1) {
+            result.remove(_id);
+        } else {
+            result.put(_id, (void*)this, status);
+        }
+    }
+}
+
+#ifdef SERVICE_DEBUG
+UnicodeString&
+SimpleLocaleKeyFactory::debug(UnicodeString& result) const
+{
+    LocaleKeyFactory::debug(result);
+    result.append(", id: ");
+    result.append(_id);
+    result.append(", kind: ");
+    result.append(_kind);
+    return result;
+}
+
+UnicodeString&
+SimpleLocaleKeyFactory::debugClass(UnicodeString& result) const
+{
+    return result.append("SimpleLocaleKeyFactory");
+}
+#endif
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleLocaleKeyFactory)
+
+U_NAMESPACE_END
+
+/* !UCONFIG_NO_SERVICE */
+#endif
+
+