Mercurial > hg > truffle
changeset 11735:9c9683970656
Allow multiple NodeChangedListeners.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Fri, 20 Sep 2013 13:41:24 +0200 |
parents | 5c43ea890efa |
children | 63ca7ec7440f 85b846b31690 |
files | graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java |
diffstat | 1 files changed, 36 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Fri Sep 20 11:37:03 2013 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Fri Sep 20 13:41:24 2013 +0200 @@ -250,24 +250,54 @@ void nodeChanged(Node node); } + private static class ChainedNodeChangedListener implements NodeChangedListener { + + NodeChangedListener head; + NodeChangedListener next; + + ChainedNodeChangedListener(NodeChangedListener head, NodeChangedListener next) { + this.head = head; + this.next = next; + } + + public void nodeChanged(Node node) { + head.nodeChanged(node); + next.nodeChanged(node); + } + } + public void trackInputChange(NodeChangedListener inputChangedListener) { - assert this.inputChanged == null; - this.inputChanged = inputChangedListener; + if (inputChanged == null) { + inputChanged = inputChangedListener; + } else { + inputChanged = new ChainedNodeChangedListener(inputChangedListener, inputChanged); + } } public void stopTrackingInputChange() { assert inputChanged != null; - inputChanged = null; + if (inputChanged instanceof ChainedNodeChangedListener) { + inputChanged = ((ChainedNodeChangedListener) inputChanged).next; + } else { + inputChanged = null; + } } public void trackUsagesDroppedZero(NodeChangedListener usagesDroppedZeroListener) { - assert this.usagesDroppedZero == null; - this.usagesDroppedZero = usagesDroppedZeroListener; + if (usagesDroppedZero == null) { + usagesDroppedZero = usagesDroppedZeroListener; + } else { + usagesDroppedZero = new ChainedNodeChangedListener(usagesDroppedZeroListener, usagesDroppedZero); + } } public void stopTrackingUsagesDroppedZero() { assert usagesDroppedZero != null; - usagesDroppedZero = null; + if (usagesDroppedZero instanceof ChainedNodeChangedListener) { + usagesDroppedZero = ((ChainedNodeChangedListener) usagesDroppedZero).next; + } else { + usagesDroppedZero = null; + } } /**