summaryrefslogtreecommitdiff
path: root/songdbj/RuntimeDatabase.java
diff options
context:
space:
mode:
authorMichiel Van Der Kolk <not.valid@email.address>2005-07-11 15:42:37 +0000
committerMichiel Van Der Kolk <not.valid@email.address>2005-07-11 15:42:37 +0000
commit9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e (patch)
tree4c304cd4151020bd5494d279ee68a105ae3a5a3a /songdbj/RuntimeDatabase.java
parentdfa8ecbe609ca8ea194d08560a44fb9a92e94b4b (diff)
downloadrockbox-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.java81
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