LCOV - code coverage report
Current view: top level - intl/icu/source/i18n - fpositer.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 54 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 7 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) 2009-2012, International Business Machines Corporation and
       6             : * others. All Rights Reserved.
       7             : ******************************************************************************
       8             : *   Date        Name        Description
       9             : *   12/14/09    doug        Creation.
      10             : ******************************************************************************
      11             : */
      12             : 
      13             : #include "unicode/utypes.h"
      14             : 
      15             : #if !UCONFIG_NO_FORMATTING
      16             : 
      17             : #include "unicode/fpositer.h"
      18             : #include "cmemory.h"
      19             : #include "uvectr32.h"
      20             : 
      21             : U_NAMESPACE_BEGIN
      22             : 
      23           0 : FieldPositionIterator::~FieldPositionIterator() {
      24           0 :   delete data;
      25           0 :   data = NULL;
      26           0 :   pos = -1;
      27           0 : }
      28             : 
      29           0 : FieldPositionIterator::FieldPositionIterator()
      30           0 :     : data(NULL), pos(-1) {
      31           0 : }
      32             : 
      33           0 : FieldPositionIterator::FieldPositionIterator(const FieldPositionIterator &rhs)
      34           0 :   : UObject(rhs), data(NULL), pos(rhs.pos) {
      35             : 
      36           0 :   if (rhs.data) {
      37           0 :     UErrorCode status = U_ZERO_ERROR;
      38           0 :     data = new UVector32(status);
      39           0 :     data->assign(*rhs.data, status);
      40           0 :     if (status != U_ZERO_ERROR) {
      41           0 :       delete data;
      42           0 :       data = NULL;
      43           0 :       pos = -1;
      44             :     }
      45             :   }
      46           0 : }
      47             : 
      48           0 : UBool FieldPositionIterator::operator==(const FieldPositionIterator &rhs) const {
      49           0 :   if (&rhs == this) {
      50           0 :     return TRUE;
      51             :   }
      52           0 :   if (pos != rhs.pos) {
      53           0 :     return FALSE;
      54             :   }
      55           0 :   if (!data) {
      56           0 :     return rhs.data == NULL;
      57             :   }
      58           0 :   return rhs.data ? data->operator==(*rhs.data) : FALSE;
      59             : }
      60             : 
      61           0 : void FieldPositionIterator::setData(UVector32 *adopt, UErrorCode& status) {
      62             :   // Verify that adopt has valid data, and update status if it doesn't.
      63           0 :   if (U_SUCCESS(status)) {
      64           0 :     if (adopt) {
      65           0 :       if (adopt->size() == 0) {
      66           0 :         delete adopt;
      67           0 :         adopt = NULL;
      68           0 :       } else if ((adopt->size() % 3) != 0) {
      69           0 :         status = U_ILLEGAL_ARGUMENT_ERROR;
      70             :       } else {
      71           0 :         for (int i = 1; i < adopt->size(); i += 3) {
      72           0 :           if (adopt->elementAti(i) >= adopt->elementAti(i+1)) {
      73           0 :             status = U_ILLEGAL_ARGUMENT_ERROR;
      74           0 :             break;
      75             :           }
      76             :         }
      77             :       }
      78             :     }
      79             :   }
      80             : 
      81             :   // We own the data, even if status is in error, so we need to delete it now
      82             :   // if we're not keeping track of it.
      83           0 :   if (!U_SUCCESS(status)) {
      84           0 :     delete adopt;
      85           0 :     return;
      86             :   }
      87             : 
      88           0 :   delete data;
      89           0 :   data = adopt;
      90           0 :   pos = adopt == NULL ? -1 : 0;
      91             : }
      92             : 
      93           0 : UBool FieldPositionIterator::next(FieldPosition& fp) {
      94           0 :   if (pos == -1) {
      95           0 :     return FALSE;
      96             :   }
      97             : 
      98           0 :   fp.setField(data->elementAti(pos++));
      99           0 :   fp.setBeginIndex(data->elementAti(pos++));
     100           0 :   fp.setEndIndex(data->elementAti(pos++));
     101             : 
     102           0 :   if (pos == data->size()) {
     103           0 :     pos = -1;
     104             :   }
     105             : 
     106           0 :   return TRUE;
     107             : }
     108             : 
     109             : U_NAMESPACE_END
     110             : 
     111             : #endif /* #if !UCONFIG_NO_FORMATTING */
     112             : 

Generated by: LCOV version 1.13