Home | History | Annotate | Download | only in coll
      1 /*
      2 *******************************************************************************
      3 * Copyright (C) 2012-2014, International Business Machines
      4 * Corporation and others.  All Rights Reserved.
      5 *******************************************************************************
      6 * IterCollationIterator.java, ported from uitercollationiterator.h/.cpp
      7 *
      8 * C++ version created on: 2012sep23 (from utf16collationiterator.h)
      9 * created by: Markus W. Scherer
     10 */
     11 
     12 package com.ibm.icu.impl.coll;
     13 
     14 import com.ibm.icu.text.UCharacterIterator;
     15 
     16 /**
     17  * UCharIterator-based collation element and character iterator.
     18  * Handles normalized text, with length or NUL-terminated.
     19  * Unnormalized text is handled by a subclass.
     20  */
     21 public class IterCollationIterator extends CollationIterator {
     22     public IterCollationIterator(CollationData d, boolean numeric, UCharacterIterator ui) {
     23         super(d, numeric);
     24         iter = ui;
     25     }
     26 
     27     @Override
     28     public void resetToOffset(int newOffset) {
     29         reset();
     30         iter.setIndex(newOffset);
     31     }
     32 
     33     @Override
     34     public int getOffset() {
     35         return iter.getIndex();
     36     }
     37 
     38     @Override
     39     public int nextCodePoint() {
     40         return iter.nextCodePoint();
     41     }
     42 
     43     @Override
     44     public int previousCodePoint() {
     45         return iter.previousCodePoint();
     46     }
     47 
     48     @Override
     49     protected long handleNextCE32() {
     50         int c = iter.next();
     51         if(c < 0) {
     52             return NO_CP_AND_CE32;
     53         }
     54         return makeCodePointAndCE32Pair(c, trie.getFromU16SingleLead((char)c));
     55     }
     56 
     57     @Override
     58     protected char handleGetTrailSurrogate() {
     59         int trail = iter.next();
     60         if(!isTrailSurrogate(trail) && trail >= 0) { iter.previous(); }
     61         return (char)trail;
     62     }
     63 
     64     @Override
     65     protected void forwardNumCodePoints(int num) {
     66         iter.moveCodePointIndex(num);
     67     }
     68 
     69     @Override
     70     protected void backwardNumCodePoints(int num) {
     71         iter.moveCodePointIndex(-num);
     72     }
     73 
     74     protected UCharacterIterator iter;
     75 }
     76