]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/engine/Index.java
go
[Dictionary.git] / src / com / hughes / android / dictionary / engine / Index.java
1 /**
2  * 
3  */
4 package com.hughes.android.dictionary.engine;
5
6 import java.io.IOException;
7 import java.io.RandomAccessFile;
8 import java.util.Collection;
9 import java.util.List;
10
11 import com.hughes.util.raf.RAFList;
12 import com.hughes.util.raf.RAFSerializable;
13 import com.hughes.util.raf.RAFSerializer;
14 import com.hughes.util.raf.UniformRAFList;
15
16 final class Index implements RAFSerializable<Index> {
17   final Dictionary dict;
18   
19   final String shortName;
20   final String longName;
21     
22   // persisted
23   final List<Index.IndexEntry> sortedIndexEntries;
24
25   // One big list!
26   // Various sub-types.
27   // persisted
28   final List<RowBase> rows;
29   
30   // --------------------------------------------------------------------------
31   
32   public Index(final Dictionary dict, final RandomAccessFile raf) throws IOException {
33     this.dict = dict;
34     shortName = raf.readUTF();
35     longName = raf.readUTF();
36     // TODO: caching
37     sortedIndexEntries = RAFList.create(raf, IndexEntry.SERIALIZER, raf.getFilePointer());
38     rows = UniformRAFList.create(raf, new RowBase.Serializer(this), raf.getFilePointer());
39   }
40   @Override
41   public void write(final RandomAccessFile raf) throws IOException {
42     raf.writeUTF(shortName);
43     raf.writeUTF(longName);
44     RAFList.write(raf, sortedIndexEntries, IndexEntry.SERIALIZER);
45     UniformRAFList.write(raf, (Collection<RowBase>) rows, new RowBase.Serializer(this), 5);
46   }
47
48   
49   static final class IndexEntry implements RAFSerializable<Index.IndexEntry> {
50     String token;
51     int startRow;
52     static final RAFSerializer<IndexEntry> SERIALIZER = new RAFSerializer<IndexEntry> () {
53       @Override
54       public IndexEntry read(RandomAccessFile raf) throws IOException {
55         return new IndexEntry(raf);
56       }
57       @Override
58       public void write(RandomAccessFile raf, IndexEntry t) throws IOException {
59         t.write(raf);
60       }};
61     public IndexEntry(final RandomAccessFile raf) throws IOException {
62       token = raf.readUTF();
63       startRow = raf.readInt();
64     }
65     public void write(RandomAccessFile raf) throws IOException {
66       raf.writeUTF(token);
67       raf.write(startRow);
68     }
69   }
70
71 }