From 8647002b711514383e061370f6460136f58152c0 Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Mon, 18 Sep 2006 21:43:18 +0000 Subject: [PATCH] Use an observer list. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@73 c613c5cb-e716-0410-b11b-feb51c14d237 --- .../threerings/parlor/client/TableDirector.as | 22 +++++---------- .../parlor/client/TableDirector.java | 27 ++++++++----------- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/src/as/com/threerings/parlor/client/TableDirector.as b/src/as/com/threerings/parlor/client/TableDirector.as index 13a76d73..d95c3981 100644 --- a/src/as/com/threerings/parlor/client/TableDirector.as +++ b/src/as/com/threerings/parlor/client/TableDirector.as @@ -22,6 +22,7 @@ package com.threerings.parlor.client { import com.threerings.util.ArrayUtil; +import com.threerings.util.ObserverList; import com.threerings.presents.client.BasicDirector; import com.threerings.presents.client.Client; @@ -121,7 +122,7 @@ public class TableDirector extends BasicDirector */ public function addSeatednessObserver (observer :SeatednessObserver) :void { - _seatedObservers.push(observer); + _seatedObservers.add(observer); } /** @@ -132,7 +133,7 @@ public class TableDirector extends BasicDirector public function removeSeatednessObserver ( observer :SeatednessObserver) :void { - ArrayUtil.removeFirst(_seatedObservers, observer); + _seatedObservers.remove(observer); } /** @@ -327,18 +328,9 @@ public class TableDirector extends BasicDirector */ protected function notifySeatedness (isSeated :Boolean) :void { - var slength :int = _seatedObservers.length; - for (var ii :int = 0; ii < slength; ii++) { - var observer :SeatednessObserver = - (_seatedObservers[ii] as SeatednessObserver); - try { - observer.seatednessDidChange(isSeated); - } catch (err :Error) { - log.warning("Observer choked in seatednessDidChange() " + - "[observer=" + observer + "]."); - log.logStackTrace(err); - } - } + _seatedObservers.apply(function (so :SeatednessObserver) :void { + so.seatednessDidChange(isSeated); + }); } /** A context by which we can access necessary client services. */ @@ -361,6 +353,6 @@ public class TableDirector extends BasicDirector /** An array of entities that want to hear about when we stand up or * sit down. */ - protected var _seatedObservers :Array = new Array(); + protected var _seatedObservers :ObserverList = new ObserverList(); } } diff --git a/src/java/com/threerings/parlor/client/TableDirector.java b/src/java/com/threerings/parlor/client/TableDirector.java index 5698bcb4..14262272 100644 --- a/src/java/com/threerings/parlor/client/TableDirector.java +++ b/src/java/com/threerings/parlor/client/TableDirector.java @@ -21,9 +21,8 @@ package com.threerings.parlor.client; -import java.util.ArrayList; - import com.samskivert.util.ListUtil; +import com.samskivert.util.ObserverList; import com.threerings.presents.client.BasicDirector; import com.threerings.presents.client.Client; @@ -322,20 +321,15 @@ public class TableDirector extends BasicDirector /** * Notifies the seatedness observers of a seatedness change. */ - protected void notifySeatedness (boolean isSeated) + protected void notifySeatedness (final boolean isSeated) { - int slength = _seatedObservers.size(); - for (int i = 0; i < slength; i++) { - SeatednessObserver observer = (SeatednessObserver) - _seatedObservers.get(i); - try { - observer.seatednessDidChange(isSeated); - } catch (Exception e) { - Log.warning("Observer choked in seatednessDidChange() " + - "[observer=" + observer + "]."); - Log.logStackTrace(e); - } - } + _seatedObservers.apply( + new ObserverList.ObserverOp() { + public boolean apply (SeatednessObserver so) { + so.seatednessDidChange(isSeated); + return true; + } + }); } /** A context by which we can access necessary client services. */ @@ -358,5 +352,6 @@ public class TableDirector extends BasicDirector /** An array of entities that want to hear about when we stand up or * sit down. */ - protected ArrayList _seatedObservers = new ArrayList(); + protected ObserverList _seatedObservers = + new ObserverList(ObserverList.FAST_UNSAFE_NOTIFY); }