tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

chariter.cpp (2564B)


      1 // © 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4 **********************************************************************
      5 *   Copyright (C) 1999-2011, International Business Machines
      6 *   Corporation and others.  All Rights Reserved.
      7 **********************************************************************
      8 */
      9 
     10 #include "unicode/chariter.h"
     11 
     12 U_NAMESPACE_BEGIN
     13 
     14 ForwardCharacterIterator::~ForwardCharacterIterator() {}
     15 ForwardCharacterIterator::ForwardCharacterIterator()
     16 : UObject()
     17 {}
     18 ForwardCharacterIterator::ForwardCharacterIterator(const ForwardCharacterIterator &other)
     19 : UObject(other)
     20 {}
     21 
     22 
     23 CharacterIterator::CharacterIterator()
     24 : textLength(0), pos(0), begin(0), end(0) {
     25 }
     26 
     27 CharacterIterator::CharacterIterator(int32_t length)
     28 : textLength(length), pos(0), begin(0), end(length) {
     29    if(textLength < 0) {
     30        textLength = end = 0;
     31    }
     32 }
     33 
     34 CharacterIterator::CharacterIterator(int32_t length, int32_t position)
     35 : textLength(length), pos(position), begin(0), end(length) {
     36    if(textLength < 0) {
     37        textLength = end = 0;
     38    }
     39    if(pos < 0) {
     40        pos = 0;
     41    } else if(pos > end) {
     42        pos = end;
     43    }
     44 }
     45 
     46 CharacterIterator::CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position)
     47 : textLength(length), pos(position), begin(textBegin), end(textEnd) {
     48    if(textLength < 0) {
     49        textLength = 0;
     50    }
     51    if(begin < 0) {
     52        begin = 0;
     53    } else if(begin > textLength) {
     54        begin = textLength;
     55    }
     56    if(end < begin) {
     57        end = begin;
     58    } else if(end > textLength) {
     59        end = textLength;
     60    }
     61    if(pos < begin) {
     62        pos = begin;
     63    } else if(pos > end) {
     64        pos = end;
     65    }
     66 }
     67 
     68 CharacterIterator::~CharacterIterator() {}
     69 
     70 CharacterIterator::CharacterIterator(const CharacterIterator &that) :
     71 ForwardCharacterIterator(that),
     72 textLength(that.textLength), pos(that.pos), begin(that.begin), end(that.end)
     73 {
     74 }
     75 
     76 CharacterIterator &
     77 CharacterIterator::operator=(const CharacterIterator &that) {
     78    ForwardCharacterIterator::operator=(that);
     79    textLength = that.textLength;
     80    pos = that.pos;
     81    begin = that.begin;
     82    end = that.end;
     83    return *this;
     84 }
     85 
     86 // implementing first[32]PostInc() directly in a subclass should be faster
     87 // but these implementations make subclassing a little easier
     88 char16_t
     89 CharacterIterator::firstPostInc() {
     90    setToStart();
     91    return nextPostInc();
     92 }
     93 
     94 UChar32
     95 CharacterIterator::first32PostInc() {
     96    setToStart();
     97    return next32PostInc();
     98 }
     99 
    100 U_NAMESPACE_END