]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/engine/Dictionary.java
Improve v7 format compression.
[Dictionary.git] / src / com / hughes / android / dictionary / engine / Dictionary.java
index 2cc05b4f573213659b17636fbb2d2a52a91cd003..f900bab9ea74a5ac7a9c7706e63b5c7c803b636a 100644 (file)
@@ -16,6 +16,7 @@ package com.hughes.android.dictionary.engine;
 
 import com.hughes.android.dictionary.DictionaryInfo;
 import com.hughes.util.CachingList;
+import com.hughes.util.StringUtil;
 import com.hughes.util.raf.RAFList;
 import com.hughes.util.raf.RAFListSerializer;
 import com.hughes.util.raf.RAFSerializable;
@@ -34,7 +35,7 @@ public class Dictionary implements RAFSerializable<Dictionary> {
 
     static final int CACHE_SIZE = 5000;
 
-    static final int CURRENT_DICT_VERSION = 6;
+    static final int CURRENT_DICT_VERSION = 7;
     static final String END_OF_DICTIONARY = "END OF DICTIONARY";
 
     // persisted
@@ -44,6 +45,7 @@ public class Dictionary implements RAFSerializable<Dictionary> {
     public final List<PairEntry> pairEntries;
     public final List<TextEntry> textEntries;
     public final List<HtmlEntry> htmlEntries;
+    public final List<byte[]> htmlData;
     public final List<EntrySource> sources;
     public final List<Index> indices;
 
@@ -59,6 +61,7 @@ public class Dictionary implements RAFSerializable<Dictionary> {
         pairEntries = new ArrayList<PairEntry>();
         textEntries = new ArrayList<TextEntry>();
         htmlEntries = new ArrayList<HtmlEntry>();
+        htmlData = null;
         sources = new ArrayList<EntrySource>();
         indices = new ArrayList<Index>();
     }
@@ -75,25 +78,30 @@ public class Dictionary implements RAFSerializable<Dictionary> {
         // disrupts the offset.
         try {
             final RAFList<EntrySource> rafSources = RAFList.create(raf, new EntrySource.Serializer(
-                    this), raf.getFilePointer());
+                    this), raf.getFilePointer(), dictFileVersion);
             sources = new ArrayList<EntrySource>(rafSources);
             raf.seek(rafSources.getEndOffset());
 
             pairEntries = CachingList.create(
-                    RAFList.create(raf, new PairEntry.Serializer(this), raf.getFilePointer()),
+                    RAFList.create(raf, new PairEntry.Serializer(this), raf.getFilePointer(), dictFileVersion),
                     CACHE_SIZE);
             textEntries = CachingList.create(
-                    RAFList.create(raf, new TextEntry.Serializer(this), raf.getFilePointer()),
+                    RAFList.create(raf, new TextEntry.Serializer(this), raf.getFilePointer(), dictFileVersion),
                     CACHE_SIZE);
             if (dictFileVersion >= 5) {
                 htmlEntries = CachingList.create(
-                        RAFList.create(raf, new HtmlEntry.Serializer(this), raf.getFilePointer()),
+                        RAFList.create(raf, new HtmlEntry.Serializer(this), raf.getFilePointer(), dictFileVersion),
                         CACHE_SIZE);
             } else {
                 htmlEntries = Collections.emptyList();
             }
+            if (dictFileVersion >= 7) {
+                htmlData = RAFList.create(raf, new HtmlEntry.DataDeserializer(), raf.getFilePointer(), dictFileVersion);
+            } else {
+                htmlData = null;
+            }
             indices = CachingList.createFullyCached(RAFList.create(raf, indexSerializer,
-                    raf.getFilePointer()));
+                    raf.getFilePointer(), dictFileVersion));
         } catch (RuntimeException e) {
             final IOException ioe = new IOException("RuntimeException loading dictionary");
             ioe.initCause(e);
@@ -111,11 +119,19 @@ public class Dictionary implements RAFSerializable<Dictionary> {
         raf.writeInt(dictFileVersion);
         raf.writeLong(creationMillis);
         raf.writeUTF(dictInfo);
+        System.out.println("sources start: " + raf.getFilePointer());
         RAFList.write(raf, sources, new EntrySource.Serializer(this));
-        RAFList.write(raf, pairEntries, new PairEntry.Serializer(this));
+        System.out.println("pair start: " + raf.getFilePointer());
+        RAFList.write(raf, pairEntries, new PairEntry.Serializer(this), 64, true);
+        System.out.println("text start: " + raf.getFilePointer());
         RAFList.write(raf, textEntries, new TextEntry.Serializer(this));
-        RAFList.write(raf, htmlEntries, new HtmlEntry.Serializer(this));
+        System.out.println("html start: " + raf.getFilePointer());
+        RAFList.write(raf, htmlEntries, new HtmlEntry.Serializer(this), 64, true);
+        assert htmlData == null;
+        RAFList.write(raf, htmlEntries, new HtmlEntry.DataSerializer(), 128, true);
+        System.out.println("indices start: " + raf.getFilePointer());
         RAFList.write(raf, indices, indexSerializer);
+        System.out.println("end: " + raf.getFilePointer());
         raf.writeUTF(END_OF_DICTIONARY);
     }