LCOV - code coverage report
Current view: top level - intl/icu/source/common - servlk.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 63 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 16 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // © 2016 and later: Unicode, Inc. and others.
       2             : // License & terms of use: http://www.unicode.org/copyright.html
       3             : /**
       4             :  *******************************************************************************
       5             :  * Copyright (C) 2001-2014, International Business Machines Corporation and    *
       6             :  * others. All Rights Reserved.                                                *
       7             :  *******************************************************************************
       8             :  *
       9             :  *******************************************************************************
      10             :  */
      11             : #include "unicode/utypes.h"
      12             : 
      13             : #if !UCONFIG_NO_SERVICE
      14             : 
      15             : #include "unicode/resbund.h"
      16             : #include "uresimp.h"
      17             : #include "cmemory.h"
      18             : #include "servloc.h"
      19             : #include "ustrfmt.h"
      20             : #include "uhash.h"
      21             : #include "charstr.h"
      22             : #include "uassert.h"
      23             : 
      24             : #define UNDERSCORE_CHAR ((UChar)0x005f)
      25             : #define AT_SIGN_CHAR    ((UChar)64)
      26             : #define PERIOD_CHAR     ((UChar)46)
      27             : 
      28             : U_NAMESPACE_BEGIN
      29             : 
      30             : LocaleKey*
      31           0 : LocaleKey::createWithCanonicalFallback(const UnicodeString* primaryID,
      32             :                                        const UnicodeString* canonicalFallbackID,
      33             :                                        UErrorCode& status)
      34             : {
      35           0 :     return LocaleKey::createWithCanonicalFallback(primaryID, canonicalFallbackID, KIND_ANY, status);
      36             : }
      37             : 
      38             : LocaleKey*
      39           0 : LocaleKey::createWithCanonicalFallback(const UnicodeString* primaryID,
      40             :                                        const UnicodeString* canonicalFallbackID,
      41             :                                        int32_t kind,
      42             :                                        UErrorCode& status)
      43             : {
      44           0 :     if (primaryID == NULL || U_FAILURE(status)) {
      45           0 :         return NULL;
      46             :     }
      47           0 :     UnicodeString canonicalPrimaryID;
      48           0 :     LocaleUtility::canonicalLocaleString(primaryID, canonicalPrimaryID);
      49           0 :     return new LocaleKey(*primaryID, canonicalPrimaryID, canonicalFallbackID, kind);
      50             : }
      51             : 
      52           0 : LocaleKey::LocaleKey(const UnicodeString& primaryID,
      53             :                      const UnicodeString& canonicalPrimaryID,
      54             :                      const UnicodeString* canonicalFallbackID,
      55           0 :                      int32_t kind)
      56             :   : ICUServiceKey(primaryID)
      57             :   , _kind(kind)
      58             :   , _primaryID(canonicalPrimaryID)
      59             :   , _fallbackID()
      60           0 :   , _currentID()
      61             : {
      62           0 :     _fallbackID.setToBogus();
      63           0 :     if (_primaryID.length() != 0) {
      64           0 :         if (canonicalFallbackID != NULL && _primaryID != *canonicalFallbackID) {
      65           0 :             _fallbackID = *canonicalFallbackID;
      66             :         }
      67             :     }
      68             : 
      69           0 :     _currentID = _primaryID;
      70           0 : }
      71             : 
      72           0 : LocaleKey::~LocaleKey() {}
      73             : 
      74             : UnicodeString&
      75           0 : LocaleKey::prefix(UnicodeString& result) const {
      76           0 :     if (_kind != KIND_ANY) {
      77             :         UChar buffer[64];
      78           0 :         uprv_itou(buffer, 64, _kind, 10, 0);
      79           0 :         UnicodeString temp(buffer);
      80           0 :         result.append(temp);
      81             :     }
      82           0 :     return result;
      83             : }
      84             : 
      85             : int32_t
      86           0 : LocaleKey::kind() const {
      87           0 :     return _kind;
      88             : }
      89             : 
      90             : UnicodeString&
      91           0 : LocaleKey::canonicalID(UnicodeString& result) const {
      92           0 :     return result.append(_primaryID);
      93             : }
      94             : 
      95             : UnicodeString&
      96           0 : LocaleKey::currentID(UnicodeString& result) const {
      97           0 :     if (!_currentID.isBogus()) {
      98           0 :         result.append(_currentID);
      99             :     }
     100           0 :     return result;
     101             : }
     102             : 
     103             : UnicodeString&
     104           0 : LocaleKey::currentDescriptor(UnicodeString& result) const {
     105           0 :     if (!_currentID.isBogus()) {
     106           0 :         prefix(result).append(PREFIX_DELIMITER).append(_currentID);
     107             :     } else {
     108           0 :         result.setToBogus();
     109             :     }
     110           0 :     return result;
     111             : }
     112             : 
     113             : Locale&
     114           0 : LocaleKey::canonicalLocale(Locale& result) const {
     115           0 :     return LocaleUtility::initLocaleFromName(_primaryID, result);
     116             : }
     117             : 
     118             : Locale&
     119           0 : LocaleKey::currentLocale(Locale& result) const {
     120           0 :     return LocaleUtility::initLocaleFromName(_currentID, result);
     121             : }
     122             : 
     123             : UBool
     124           0 : LocaleKey::fallback() {
     125           0 :     if (!_currentID.isBogus()) {
     126           0 :         int x = _currentID.lastIndexOf(UNDERSCORE_CHAR);
     127           0 :         if (x != -1) {
     128           0 :             _currentID.remove(x); // truncate current or fallback, whichever we're pointing to
     129           0 :             return TRUE;
     130             :         }
     131             : 
     132           0 :         if (!_fallbackID.isBogus()) {
     133           0 :             _currentID = _fallbackID;
     134           0 :             _fallbackID.setToBogus();
     135           0 :             return TRUE;
     136             :         }
     137             : 
     138           0 :         if (_currentID.length() > 0) {
     139           0 :             _currentID.remove(0); // completely truncate
     140           0 :             return TRUE;
     141             :         }
     142             : 
     143           0 :         _currentID.setToBogus();
     144             :     }
     145             : 
     146           0 :     return FALSE;
     147             : }
     148             : 
     149             : UBool
     150           0 : LocaleKey::isFallbackOf(const UnicodeString& id) const {
     151           0 :     UnicodeString temp(id);
     152           0 :     parseSuffix(temp);
     153           0 :     return temp.indexOf(_primaryID) == 0 &&
     154           0 :         (temp.length() == _primaryID.length() ||
     155           0 :         temp.charAt(_primaryID.length()) == UNDERSCORE_CHAR);
     156             : }
     157             : 
     158             : #ifdef SERVICE_DEBUG
     159             : UnicodeString&
     160             : LocaleKey::debug(UnicodeString& result) const
     161             : {
     162             :     ICUServiceKey::debug(result);
     163             :     result.append((UnicodeString)" kind: ");
     164             :     result.append(_kind);
     165             :     result.append((UnicodeString)" primaryID: ");
     166             :     result.append(_primaryID);
     167             :     result.append((UnicodeString)" fallbackID: ");
     168             :     result.append(_fallbackID);
     169             :     result.append((UnicodeString)" currentID: ");
     170             :     result.append(_currentID);
     171             :     return result;
     172             : }
     173             : 
     174             : UnicodeString&
     175             : LocaleKey::debugClass(UnicodeString& result) const
     176             : {
     177             :     return result.append((UnicodeString)"LocaleKey ");
     178             : }
     179             : #endif
     180             : 
     181           0 : UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LocaleKey)
     182             : 
     183             : U_NAMESPACE_END
     184             : 
     185             : /* !UCONFIG_NO_SERVICE */
     186             : #endif
     187             : 
     188             : 

Generated by: LCOV version 1.13