diff options
| author | Michiel Van Der Kolk <not.valid@email.address> | 2005-07-11 15:42:37 +0000 |
|---|---|---|
| committer | Michiel Van Der Kolk <not.valid@email.address> | 2005-07-11 15:42:37 +0000 |
| commit | 9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e (patch) | |
| tree | 4c304cd4151020bd5494d279ee68a105ae3a5a3a /songdbj/RuntimeDatabase.java | |
| parent | dfa8ecbe609ca8ea194d08560a44fb9a92e94b4b (diff) | |
| download | rockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.zip rockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.tar.gz rockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.tar.bz2 rockbox-9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e.tar.xz | |
Songdb java version, source. only 1.5 compatible
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7101 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'songdbj/RuntimeDatabase.java')
| -rw-r--r-- | songdbj/RuntimeDatabase.java | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/songdbj/RuntimeDatabase.java b/songdbj/RuntimeDatabase.java new file mode 100644 index 0000000..e96e820 --- /dev/null +++ b/songdbj/RuntimeDatabase.java @@ -0,0 +1,81 @@ +import java.util.*; +import java.io.*; +import java.lang.reflect.Array; + +/* + TreeSet for runtimedatabase with entry hash used in compareto + fix commandline interface. +*/ + +public class RuntimeDatabase { + protected static RuntimeDatabase instance=null; + protected TreeMap entries; + protected int entrycount; + public static final int headersize = 8; + + protected RuntimeDatabase() { + entries=new TreeMap(); + } + + public static RuntimeDatabase getInstance() { + if(instance==null) + instance=new RuntimeDatabase(); + return instance; + } + + public RundbEntry getEntry(FileEntry file) { + Integer key = new Integer(file.getHash()); + if(!entries.containsKey(key)) { + RundbEntry e = new RundbEntry(file); + entries.put(key,e); + return e; + } + else + return (RundbEntry)entries.get(key); + } + + protected void calcOffsets() { + Collection values = entries.values(); + Iterator i; + int offset=headersize; + i=values.iterator(); + while(i.hasNext()) { + Entry e = (Entry) i.next(); + e.setOffset(offset); + offset+=RundbEntry.entrySize(); + } + entrycount=values.size(); + } + + public int isDirty() { + return 0; + } + + protected void writeHeader(DataOutputStream w) throws IOException { + w.write('R'); + w.write('R'); + w.write('D'); + w.write(0x1); + w.writeInt(entrycount); + } + + public void prepareWrite() { + System.out.println("Calculating Runtime Database Offsets.."); + calcOffsets(); + } + + public void writeDatabase(File f) throws IOException { + int x; + Iterator i; + DataOutputStream w = new DataOutputStream(new FileOutputStream(f)); + System.out.println("Writing runtime database.."); + writeHeader(w); + i=entries.values().iterator(); + while(i.hasNext()) { + Entry e = (Entry) i.next(); + e.write(w); + } + w.flush(); + w.close(); + } +}
\ No newline at end of file |