diff options
author | David A. Madore <david@procyon.(none)> | 2010-04-15 21:07:01 +0200 |
---|---|---|
committer | David A. Madore <david@procyon.(none)> | 2010-04-15 21:07:01 +0200 |
commit | 9176d80ae6dcad88da79714d934b226afe66c1ad (patch) | |
tree | 32c843f6e7e63d5e997525296b0921cc50f53ddb | |
parent | 5c6ccfca16a421860cd57d11e41d94d8a70cda76 (diff) | |
download | damlengine-9176d80ae6dcad88da79714d934b226afe66c1ad.tar.gz damlengine-9176d80ae6dcad88da79714d934b226afe66c1ad.tar.bz2 damlengine-9176d80ae6dcad88da79714d934b226afe66c1ad.zip |
Instantiate TodoDeque rather than using static variables.
Unfortunately, processing is now rather significantly slower.
-rw-r--r-- | org/madore/damlengine/DamlEngine.java | 5 | ||||
-rw-r--r-- | org/madore/damlengine/ElementHandler.java | 5 | ||||
-rw-r--r-- | org/madore/damlengine/TodoDeque.java | 42 | ||||
-rw-r--r-- | org/madore/damlengine/TodoItem.java | 2 |
4 files changed, 30 insertions, 24 deletions
diff --git a/org/madore/damlengine/DamlEngine.java b/org/madore/damlengine/DamlEngine.java index a2ce87e..b87b069 100644 --- a/org/madore/damlengine/DamlEngine.java +++ b/org/madore/damlengine/DamlEngine.java @@ -18,12 +18,13 @@ public final class DamlEngine { private DamlEngine() { } // Forbid instantiation public static void processDocument() { + TodoDeque todoDeque = new TodoDeque(); HashMap<String,Object> options = new HashMap<String,Object>(); options.put("isRoot", true); - TodoDeque.registerAtEnd(new TodoElement(doc.getDocumentElement(), + todoDeque.registerAtEnd(new TodoElement(doc.getDocumentElement(), new HashMap<String,Object>(), options)); - TodoDeque.dispatchLoop(); + todoDeque.dispatchLoop(); } public static void main(String[] args) diff --git a/org/madore/damlengine/ElementHandler.java b/org/madore/damlengine/ElementHandler.java index 4e14756..59981ac 100644 --- a/org/madore/damlengine/ElementHandler.java +++ b/org/madore/damlengine/ElementHandler.java @@ -15,7 +15,7 @@ public abstract class ElementHandler { new HashMap<String,Object>()); toProcess.add(it); } - TodoDeque.registerAtStart(toProcess); + that.ownerDeque.registerAtStart(toProcess); } public void handleNodeOnly(TodoElement that) { @@ -30,10 +30,11 @@ public abstract class ElementHandler { toProcess.add(it); } } - TodoDeque.registerAtStart(toProcess); + that.ownerDeque.registerAtStart(toProcess); } public void handle(TodoElement that) { + assert(that.ownerDeque != null); handleAttributes(that); handleNodeOnly(that); } diff --git a/org/madore/damlengine/TodoDeque.java b/org/madore/damlengine/TodoDeque.java index 037723b..eb90006 100644 --- a/org/madore/damlengine/TodoDeque.java +++ b/org/madore/damlengine/TodoDeque.java @@ -5,47 +5,49 @@ import java.util.LinkedList; public final class TodoDeque { - // FIXME: having everything static is ugly as hell... maybe this - // should be instantiatable? + private LinkedList<TodoItem> deque; - private TodoDeque() { } // Forbid instantiation - - private static LinkedList<TodoItem> todoDeque = new LinkedList<TodoItem>(); - - { - todoDeque = new LinkedList<TodoItem>(); + public TodoDeque() { + deque = new LinkedList<TodoItem>(); } - public static void registerAtEnd(TodoItem it) { - todoDeque.addLast(it); + public void registerAtEnd(TodoItem it) { + it.ownerDeque = this; + deque.addLast(it); } - public static void registerAtEnd(Collection<? extends TodoItem> them) { - todoDeque.addAll(them); + public void registerAtEnd(Collection<? extends TodoItem> them) { + for ( TodoItem it : them ) + it.ownerDeque = this; + deque.addAll(them); } - public static void registerAtStart(TodoItem it) { - todoDeque.addFirst(it); + public void registerAtStart(TodoItem it) { + it.ownerDeque = this; + deque.addFirst(it); } - public static void registerAtStart(Collection<? extends TodoItem> them) { - todoDeque.addAll(0, them); + public void registerAtStart(Collection<? extends TodoItem> them) { + for ( TodoItem it : them ) + it.ownerDeque = this; + deque.addAll(0, them); } - public static TodoItem removeNext() { - return todoDeque.poll(); + public TodoItem removeNext() { + return deque.poll(); } - public static boolean dispatchOne() { + public boolean dispatchOne() { TodoItem it = removeNext(); if ( it != null ) { + assert(it.ownerDeque == this); it.dispatch(); return true; } else return false; } - public static void dispatchLoop() { + public void dispatchLoop() { while ( dispatchOne() ) ; } diff --git a/org/madore/damlengine/TodoItem.java b/org/madore/damlengine/TodoItem.java index 677b3b1..84dfd05 100644 --- a/org/madore/damlengine/TodoItem.java +++ b/org/madore/damlengine/TodoItem.java @@ -2,6 +2,8 @@ package org.madore.damlengine; public abstract class TodoItem { + public TodoDeque ownerDeque; + public abstract void dispatch(); } |