X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fengine%2FPairEntry.java;h=a0bcfeeac0a8e793071149cb2fc3e5bc456b222d;hb=5f7b259669237dad4cbfdec8536537815846979b;hp=e19e334da224c4444204b482e370d5dae855726e;hpb=8500d63029ad2e54d55a750fc1d9f59781102b27;p=Dictionary.git diff --git a/src/com/hughes/android/dictionary/engine/PairEntry.java b/src/com/hughes/android/dictionary/engine/PairEntry.java index e19e334..a0bcfee 100644 --- a/src/com/hughes/android/dictionary/engine/PairEntry.java +++ b/src/com/hughes/android/dictionary/engine/PairEntry.java @@ -14,27 +14,26 @@ package com.hughes.android.dictionary.engine; -import com.hughes.util.StringUtil; -import com.hughes.util.raf.RAFListSerializer; -import com.hughes.util.raf.RAFSerializable; -import com.ibm.icu.text.Transliterator; - import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.regex.Pattern; -public class PairEntry extends AbstractEntry implements RAFSerializable, - Comparable { +import com.hughes.util.StringUtil; +import com.hughes.util.raf.RAFListSerializerSkippable; +import com.ibm.icu.text.Transliterator; + +public class PairEntry extends AbstractEntry implements Comparable { public final List pairs; public PairEntry(final EntrySource entrySource) { super(entrySource); - pairs = new ArrayList(1); + pairs = new ArrayList<>(1); } public PairEntry(final EntrySource entrySource, final String lang1, final String lang2) { @@ -43,12 +42,17 @@ public class PairEntry extends AbstractEntry implements RAFSerializable= 7 ? StringUtil.readVarInt(raf) : raf.readInt(); - pairs = new ArrayList(size); - for (int i = 0; i < size; ++i) { - pairs.add(new Pair(raf.readUTF(), raf.readUTF())); + // Use singletonList for better performance in common case + if (size == 1) pairs = Collections.singletonList(new Pair(raf.readUTF(), raf.readUTF())); + else + { + pairs = new ArrayList<>(size); + for (int i = 0; i < size; ++i) { + pairs.add(new Pair(raf.readUTF(), raf.readUTF())); + } } } @@ -56,14 +60,14 @@ public class PairEntry extends AbstractEntry implements RAFSerializable 0; - raf.writeUTF(pairs.get(i).lang1); - raf.writeUTF(pairs.get(i).lang2); + for (Pair p : pairs) { + assert p.lang1.length() > 0; + raf.writeUTF(p.lang1); + raf.writeUTF(p.lang2); } } - static final class Serializer implements RAFListSerializer { + static final class Serializer implements RAFListSerializerSkippable { final Dictionary dictionary; @@ -76,6 +80,25 @@ public class PairEntry extends AbstractEntry implements RAFSerializable= 7) + { + StringUtil.readVarInt(raf); + size = StringUtil.readVarInt(raf); + } + else + { + raf.skipBytes(2); + size = raf.readInt(); + } + for (int i = 0; i < 2*size; ++i) { + int l = raf.readUnsignedShort(); + raf.skipBytes(l); + } + } + @Override public void write(DataOutput raf, PairEntry t) throws IOException { t.write(raf); @@ -99,12 +122,12 @@ public class PairEntry extends AbstractEntry implements RAFSerializable searchTokens, - final Pattern orderedMatchPattern, final Transliterator normalizer, - final boolean swapPairEntries) { + final Pattern orderedMatchPattern, final Transliterator normalizer, + final boolean swapPairEntries) { final int side = swapPairEntries ? 1 : 0; final List pairs = getEntry().pairs; final String[] pairSides = new String[pairs.size()]; @@ -172,7 +195,7 @@ public class PairEntry extends AbstractEntry implements RAFSerializable 0 && lang2.trim().length() > 0)) { - System.err.println("poop"); - } - assert lang1.trim().length() > 0 || lang2.trim().length() > 0 : "Empty pair!!!"; assert lang1.trim().length() > 0 && lang2.trim().length() > 0 : "Empty pair!!!"; } @@ -228,7 +248,7 @@ public class PairEntry extends AbstractEntry implements RAFSerializable