blob: e532ac43b848ea6d845963fa03376924d095a1e6 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ibm.icu4jni.text;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
public class RuleBasedBreakIterator extends BreakIterator {
private CharacterIterator charIter;
private int addr;
RuleBasedBreakIterator(int iterAddr, int type) {
this.addr = iterAddr;
this.type = type;
this.charIter = new StringCharacterIterator("");
}
@Override
public Object clone() {
int cloneAddr = NativeBreakIterator.cloneImpl(this.addr);
RuleBasedBreakIterator rbbi =
new RuleBasedBreakIterator(cloneAddr, this.type);
rbbi.charIter = this.charIter;
return rbbi;
}
@Override
public boolean equals(Object object) {
if(object == null) {
return false;
}
if(!(object instanceof RuleBasedBreakIterator)) {
return false;
}
CharacterIterator iter = ((RuleBasedBreakIterator) object).charIter;
boolean result = this.type == ((RuleBasedBreakIterator) object).type;
return result && iter.equals(this.charIter);
}
@Override
public int hashCode() {
return 42; // No-one uses RuleBasedBreakIterator as a hash key.
}
@Override
public int current() {
return NativeBreakIterator.currentImpl(this.addr);
}
@Override
public int first() {
return NativeBreakIterator.firstImpl(this.addr);
}
@Override
public int following(int offset) {
return NativeBreakIterator.followingImpl(this.addr, offset);
}
@Override
public CharacterIterator getText() {
int newLoc = NativeBreakIterator.currentImpl(this.addr);
this.charIter.setIndex(newLoc);
return this.charIter;
}
@Override
public int last() {
return NativeBreakIterator.lastImpl(this.addr);
}
@Override
public int next(int n) {
return NativeBreakIterator.nextImpl(this.addr, n);
}
@Override
public int next() {
return NativeBreakIterator.nextImpl(this.addr, 1);
}
@Override
public int previous() {
return NativeBreakIterator.previousImpl(this.addr);
}
@Override
public void setText(CharacterIterator newText) {
this.charIter = newText;
StringBuilder sb = new StringBuilder();
char c = newText.first();
while(c != CharacterIterator.DONE) {
sb.append(c);
c = newText.next();
}
NativeBreakIterator.setTextImpl(this.addr, sb.toString());
}
protected void finalize() {
NativeBreakIterator.closeBreakIteratorImpl(this.addr);
}
@Override
public boolean isBoundary(int offset) {
return NativeBreakIterator.isBoundaryImpl(this.addr, offset);
}
@Override
public int preceding(int offset) {
return NativeBreakIterator.precedingImpl(this.addr, offset);
}
}