void LocaleKeyFactory::updateVisibleIDs(Hashtable & result, UErrorCode & status) const { const Hashtable * supported = getSupportedIDs(status); if (supported) { UBool visible = (_coverage & 0x1) == 0; const UHashElement * elem = NULL; int32_t pos = 0; while ((elem = supported->nextElement(pos)) != NULL) { const UnicodeString & id = *((const UnicodeString *)elem->key.pointer); if (!visible) { result.remove(id); } else { result.put(id, (void *)this, status); // this is dummy non-void marker used for set semantics if (U_FAILURE(status)) { break; } } } } }
UBool LocaleKeyFactory::handlesKey(const ICUServiceKey& key, UErrorCode& status) const { const Hashtable* supported = getSupportedIDs(status); if (supported) { UnicodeString id; key.currentID(id); return supported->get(id) != NULL; } return FALSE; }
UnicodeString& CFactory::getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const { if ((_coverage & 0x1) == 0) { UErrorCode status = U_ZERO_ERROR; const Hashtable* ids = getSupportedIDs(status); if (ids && (ids->get(id) != NULL)) { Locale loc; LocaleUtility::initLocaleFromName(id, loc); return _delegate->getDisplayName(loc, locale, result); } } result.setToBogus(); return result; }