LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - collationtailoring.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 53 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 9 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) 2013-2015, International Business Machines
       6             : * Corporation and others.  All Rights Reserved.
       7             : *******************************************************************************
       8             : * collationtailoring.cpp
       9             : *
      10             : * created on: 2013mar12
      11             : * created by: Markus W. Scherer
      12             : */
      13             : 
      14             : #include "unicode/utypes.h"
      15             : 
      16             : #if !UCONFIG_NO_COLLATION
      17             : 
      18             : #include "unicode/udata.h"
      19             : #include "unicode/unistr.h"
      20             : #include "unicode/ures.h"
      21             : #include "unicode/uversion.h"
      22             : #include "unicode/uvernum.h"
      23             : #include "cmemory.h"
      24             : #include "collationdata.h"
      25             : #include "collationsettings.h"
      26             : #include "collationtailoring.h"
      27             : #include "normalizer2impl.h"
      28             : #include "uassert.h"
      29             : #include "uhash.h"
      30             : #include "umutex.h"
      31             : #include "utrie2.h"
      32             : 
      33             : U_NAMESPACE_BEGIN
      34             : 
      35           0 : CollationTailoring::CollationTailoring(const CollationSettings *baseSettings)
      36             :         : data(NULL), settings(baseSettings),
      37             :           actualLocale(""),
      38             :           ownedData(NULL),
      39             :           builder(NULL), memory(NULL), bundle(NULL),
      40             :           trie(NULL), unsafeBackwardSet(NULL),
      41           0 :           maxExpansions(NULL) {
      42           0 :     if(baseSettings != NULL) {
      43           0 :         U_ASSERT(baseSettings->reorderCodesLength == 0);
      44           0 :         U_ASSERT(baseSettings->reorderTable == NULL);
      45           0 :         U_ASSERT(baseSettings->minHighNoReorder == 0);
      46             :     } else {
      47           0 :         settings = new CollationSettings();
      48             :     }
      49           0 :     if(settings != NULL) {
      50           0 :         settings->addRef();
      51             :     }
      52           0 :     rules.getTerminatedBuffer();  // ensure NUL-termination
      53           0 :     version[0] = version[1] = version[2] = version[3] = 0;
      54           0 :     maxExpansionsInitOnce.reset();
      55           0 : }
      56             : 
      57           0 : CollationTailoring::~CollationTailoring() {
      58           0 :     SharedObject::clearPtr(settings);
      59           0 :     delete ownedData;
      60           0 :     delete builder;
      61           0 :     udata_close(memory);
      62           0 :     ures_close(bundle);
      63           0 :     utrie2_close(trie);
      64           0 :     delete unsafeBackwardSet;
      65           0 :     uhash_close(maxExpansions);
      66           0 :     maxExpansionsInitOnce.reset();
      67           0 : }
      68             : 
      69             : UBool
      70           0 : CollationTailoring::ensureOwnedData(UErrorCode &errorCode) {
      71           0 :     if(U_FAILURE(errorCode)) { return FALSE; }
      72           0 :     if(ownedData == NULL) {
      73           0 :         const Normalizer2Impl *nfcImpl = Normalizer2Factory::getNFCImpl(errorCode);
      74           0 :         if(U_FAILURE(errorCode)) { return FALSE; }
      75           0 :         ownedData = new CollationData(*nfcImpl);
      76           0 :         if(ownedData == NULL) {
      77           0 :             errorCode = U_MEMORY_ALLOCATION_ERROR;
      78           0 :             return FALSE;
      79             :         }
      80             :     }
      81           0 :     data = ownedData;
      82           0 :     return TRUE;
      83             : }
      84             : 
      85             : void
      86           0 : CollationTailoring::makeBaseVersion(const UVersionInfo ucaVersion, UVersionInfo version) {
      87           0 :     version[0] = UCOL_BUILDER_VERSION;
      88           0 :     version[1] = (ucaVersion[0] << 3) + ucaVersion[1];
      89           0 :     version[2] = ucaVersion[2] << 6;
      90           0 :     version[3] = 0;
      91           0 : }
      92             : 
      93             : void
      94           0 : CollationTailoring::setVersion(const UVersionInfo baseVersion, const UVersionInfo rulesVersion) {
      95           0 :     version[0] = UCOL_BUILDER_VERSION;
      96           0 :     version[1] = baseVersion[1];
      97           0 :     version[2] = (baseVersion[2] & 0xc0) + ((rulesVersion[0] + (rulesVersion[0] >> 6)) & 0x3f);
      98           0 :     version[3] = (rulesVersion[1] << 3) + (rulesVersion[1] >> 5) + rulesVersion[2] +
      99           0 :             (rulesVersion[3] << 4) + (rulesVersion[3] >> 4);
     100           0 : }
     101             : 
     102             : int32_t
     103           0 : CollationTailoring::getUCAVersion() const {
     104           0 :     return ((int32_t)version[1] << 4) | (version[2] >> 6);
     105             : }
     106             : 
     107           0 : CollationCacheEntry::~CollationCacheEntry() {
     108           0 :     SharedObject::clearPtr(tailoring);
     109           0 : }
     110             : 
     111             : U_NAMESPACE_END
     112             : 
     113             : #endif  // !UCONFIG_NO_COLLATION

Generated by: LCOV version 1.13