Add generic ViewStream, BlueRow types/interfaces

This commit is contained in:
John Colvin committed 2025-07-23 12:52:23 -04:00
1 parent b121849189
commit eecc70f151
38 files changed
+130 -108

No files matched your search

@@ -18,10 +18,10 @@ namespace BCG {
: this(new TableStream(tableName)) { }
protected override void myOnFirstSubscriber() {
myVS.onChange += new ChangeDelegate(myHandleChanges);
myVS.onChange += myHandleChanges;
}
protected override void myOnLastSubscriber() {
myVS.onChange -= new ChangeDelegate(myHandleChanges);
myVS.onChange -= myHandleChanges;
}
@@ -78,11 +78,12 @@ namespace bts.BlueOrb {
#endregion
#region overridden methods
protected override void myOnFirstSubscriber() { myParentStream.onChange += new ChangeDelegate(myHandleCallbacks); }
protected override void myOnFirstSubscriber() =>
myParentStream.onChange += myHandleCallbacks;
protected override void myOnLastSubscriber() {
myLastFiredRows = null;
myParentStream.onChange -= new ChangeDelegate(myHandleCallbacks);
myParentStream.onChange -= myHandleCallbacks;
}
protected override void myFireEvent(object o) {
@@ -16,10 +16,10 @@ namespace bts.BlueOrb {
}
protected override void myOnFirstSubscriber() {
_stream.onChange += new ChangeDelegate(_onstream_change);
_stream.onChange += _onstream_change;
}
protected override void myOnLastSubscriber() {
_stream.onChange -= new ChangeDelegate(_onstream_change);
_stream.onChange -= _onstream_change;
}
@@ -25,12 +25,12 @@ namespace BCG {
byte[] rem_req_bytes = rem_req.serialize();
_publisher_core.publish("System", "RemoteRequest", rem_req_bytes);
_source_str = new TableStream(_name);
_source_str.onChange += new ChangeDelegate(_handle_data);
_source_str.onChange += _handle_data;
}
protected override void myOnLastSubscriber() {
//maybe there should be a way to turn remote requests off ?
_source_str.onChange -= new ChangeDelegate(_handle_data);
_source_str.onChange -= _handle_data;
}
static string get_expression(params string[] lines) {
@@ -18,13 +18,11 @@ namespace bts.BlueOrb {
public CountStream(string tableName)
: this(new TableStream(tableName)) { }
protected override void myOnFirstSubscriber() {
myVS.onChange += new ChangeDelegate(myHandleChanges);
}
protected override void myOnLastSubscriber() {
myVS.onChange -= new ChangeDelegate(myHandleChanges);
}
protected override void myOnFirstSubscriber () =>
myVS.onChange += myHandleChanges;
protected override void myOnLastSubscriber () =>
myVS.onChange -= myHandleChanges;
private void myHandleChanges(object newValue) {
myFireEvent(
@@ -30,7 +30,7 @@ namespace BCG
protected override void myOnFirstSubscriber()
{
myToCrush.onChange += new ChangeDelegate(myToCrush_onChange);
myToCrush.onChange += myToCrush_onChange;
}
protected override void myOnLastSubscriber()
@@ -15,11 +15,11 @@ namespace BCG
//set up an anonymous delegate for each of the streams
//we do this so that we can unsubscribe
myDelegates = new ChangeDelegate[myToCrush.Length];
myDelegates = new DataStreamChangeDelegate[myToCrush.Length];
for (int i = 0; i < myToCrush.Length; ++i)
{
int tempI = i;
myDelegates[tempI] = new ChangeDelegate((o) => { myHandleChange(tempI, ((DataPacket)o).newRows); });
myDelegates[tempI] = o => myHandleChange(tempI, ((DataPacket)o).newRows);
}
}
@@ -27,7 +27,7 @@ namespace BCG
private ViewStream[] myToCrush;
private ITableCrusher myCrusher;
private ChangeDelegate[] myDelegates;
private DataStreamChangeDelegate[] myDelegates;
protected override void myOnFirstSubscriber()
{
@@ -28,7 +28,7 @@ namespace BCG
protected override void myOnFirstSubscriber()
{
myDataSource.onChange += new ChangeDelegate(myDataSource_onChange);
myDataSource.onChange += myDataSource_onChange;
}
protected override void myOnLastSubscriber()
@@ -18,7 +18,8 @@ namespace bts {
_filename = filename;
}
protected override void myOnFirstSubscriber() { _stream.onChange += new ChangeDelegate(_handle_changes); }
protected override void myOnFirstSubscriber() =>
_stream.onChange += _handle_changes;
void _handle_changes(object dp_obj) {
DataPacket dp = dp_obj as DataPacket;
@@ -26,7 +27,8 @@ namespace bts {
myFireEvent(dp_obj);
}
protected override void myOnLastSubscriber() { _stream.onChange -= new ChangeDelegate(_handle_changes); }
protected override void myOnLastSubscriber() =>
_stream.onChange -= _handle_changes;
protected void _save(DataPacket dp) {
StreamIOMessage.CreateMessage cr_msg = new StreamIOMessage.CreateMessage(dp.newRows);
@@ -26,12 +26,12 @@ namespace BCG.StreamWorld.Addition {
}
protected override void myOnFirstSubscriber() {
myBaseStream.onChange += new ChangeDelegate(myHandleChanges);
}
protected override void myOnFirstSubscriber() =>
myBaseStream.onChange += myHandleChanges;
protected override void myOnLastSubscriber() {
myBaseStream.onChange -= new ChangeDelegate(myHandleChanges);
protected override void myOnLastSubscriber()
{
myBaseStream.onChange -= myHandleChanges;
myBaseTable.clear();
myStateTable.clear();
}
@@ -184,13 +184,13 @@ namespace BCG
#endregion
#region overridden methods
protected override void myOnFirstSubscriber()
{ myParentStream.onChange += new ChangeDelegate(myHandleCallbacks); }
protected override void myOnFirstSubscriber() =>
myParentStream.onChange += myHandleCallbacks;
protected override void myOnLastSubscriber()
{
myLastFiredRows = null;
myParentStream.onChange -= new ChangeDelegate(myHandleCallbacks);
myParentStream.onChange -= myHandleCallbacks;
}
protected override void myFireEvent(object o)
@@ -36,11 +36,11 @@ namespace BCG
get{return myIsFrozen;}
}
protected override void myOnFirstSubscriber ()
{myStreamToFreeze.onChange += new DataStream.ChangeDelegate (myCallBack);}
protected override void myOnFirstSubscriber () =>
myStreamToFreeze.onChange += myCallBack;
protected override void myOnLastSubscriber ()
{myStreamToFreeze.onChange -= new DataStream.ChangeDelegate (myCallBack);}
protected override void myOnLastSubscriber () =>
myStreamToFreeze.onChange -= myCallBack;
internal void myCallBack(object o)
{
@@ -96,15 +96,15 @@ namespace BCG
protected override void myOnFirstSubscriber()
{
this.myLeftSource.onChange += new ChangeDelegate(myLeft_onChange);
this.myRightSource.onChange += new ChangeDelegate(myRight_onChange);
myLeftSource.onChange += myLeft_onChange;
myRightSource.onChange += myRight_onChange;
this.myVsd.addWorker(this);
}
protected override void myOnLastSubscriber()
{
this.myLeftSource.onChange -= new ChangeDelegate(myLeft_onChange);
this.myRightSource.onChange -= new ChangeDelegate(myRight_onChange);
myLeftSource.onChange -= myLeft_onChange;
myRightSource.onChange -= myRight_onChange;
this.myVsd.removeWorker(this);
}
@@ -175,7 +175,7 @@ namespace BCG {
//gets resubscribed, we start the process of building data again, and treat the callback as the first
//callback.
myInit();
myStream.onChange -= new DataStream.ChangeDelegate(myChangeHandler);
myStream.onChange -= myChangeHandler;
}
protected override void myInit() {
@@ -82,12 +82,12 @@ namespace BCG
protected override void myOnFirstSubscriber()
{
myStream.onChange += new DataStream.ChangeDelegate (myChangeHandler);
myStream.onChange += myChangeHandler;
}
protected override void myOnLastSubscriber ()
{
myStream.onChange -= new DataStream.ChangeDelegate (myChangeHandler);
myStream.onChange -= myChangeHandler;
}
}
}
@@ -31,15 +31,15 @@ namespace BCG
{
myLeftOperand.master = this;
myRightOperand.master = this;
myLeftStream.onChange += new DataStream.ChangeDelegate (myLeftOperand.changeHandler);
myRightStream.onChange += new DataStream.ChangeDelegate (myRightOperand.changeHandler);
myLeftStream.onChange += myLeftOperand.changeHandler;
myRightStream.onChange += myRightOperand.changeHandler;
}
protected override void myOnLastSubscriber ()
{
myInit ();
myLeftStream.onChange -= new DataStream.ChangeDelegate (myLeftOperand.changeHandler);
myRightStream.onChange -= new DataStream.ChangeDelegate (myRightOperand.changeHandler);
myLeftStream.onChange -= myLeftOperand.changeHandler;
myRightStream.onChange -= myRightOperand.changeHandler;
}
public JoinOperand getOtherOperand (JoinOperand jo)
@@ -116,7 +116,7 @@ namespace BCG
IDictionary map = resolver.getMap ();
map["id"] = "id";
myPs = new ProjectStream (myIjs, map);
myPs.onChange += new DataStream.ChangeDelegate (myProjectChangeHandler);
myPs.onChange += myProjectChangeHandler;
return;
}
else
@@ -129,26 +129,26 @@ namespace BCG
private void myProjectChangeHandler (object o)
{
if (myIjs.myOnChangeDelegate.GetInvocationList().Length > 1)
myIjs.onChange -= new DataStream.ChangeDelegate (myInternalJoinChangeHandler);
myIjs.onChange -= myInternalJoinChangeHandler;
myFireEvent ((o as ICloneable).Clone());
}
protected override void myOnFirstSubscriber ()
{
myIjs.onChange += new DataStream.ChangeDelegate (myInternalJoinChangeHandler);
myIjs.onChange += myInternalJoinChangeHandler;
}
protected override void myOnLastSubscriber ()
{
// how does this relate to the -= in myProjectChangeHandler?
myIjs.onChange -= new DataStream.ChangeDelegate (myInternalJoinChangeHandler);
myIjs.onChange -= myInternalJoinChangeHandler;
// if there is a project after the ijs we need to
// unsubscribe to it otherwise references will be kept and
// a memory leak will occur
if (myPs != null)
myPs.onChange -= new DataStream.ChangeDelegate (myProjectChangeHandler);
myPs.onChange -= myProjectChangeHandler;
myPs = null;
}
@@ -183,8 +183,8 @@ namespace BCG
protected override void myOnFirstSubscriber()
{
myVLeft.onChange += new ChangeDelegate(myVLeft_onChange);
myVRight.onChange += new ChangeDelegate(myVRight_onChange);
myVLeft.onChange += myVLeft_onChange;
myVRight.onChange += myVRight_onChange;
}
void myVRight_onChange(object newValue)
@@ -327,14 +327,14 @@ namespace BCG
protected override void myOnFirstSubscriber()
{
myLeftStream.onChange += new ChangeDelegate(myHandleLeftStreamChanges);
myRightStream.onChange += new ChangeDelegate(myHandleRightStreamChanges);
myLeftStream.onChange += myHandleLeftStreamChanges;
myRightStream.onChange += myHandleRightStreamChanges;
}
protected override void myOnLastSubscriber()
{
myLeftStream.onChange -= new ChangeDelegate(myHandleLeftStreamChanges);
myRightStream.onChange -= new ChangeDelegate(myHandleRightStreamChanges);
myLeftStream.onChange -= myHandleLeftStreamChanges;
myRightStream.onChange -= myHandleRightStreamChanges;
myLeftKeyToLeftRows.Clear();
myRightKeyToRightRows.Clear();
myLeftIDToResultRows.Clear();
@@ -23,15 +23,15 @@ namespace BCG
myRightOperand.master = this;
//the events are not hooked onto the operands delegate, but rather a level of indirection
//added in the form on myLeftChangeHandler
myLeftStream.onChange += new DataStream.ChangeDelegate (myLeftChangeHandler);
myRightStream.onChange += new DataStream.ChangeDelegate (myRightChangeHandler);
myLeftStream.onChange += myLeftChangeHandler;
myRightStream.onChange += myRightChangeHandler;
}
protected override void myOnLastSubscriber ()
{
myInit ();
myLeftStream.onChange -= new DataStream.ChangeDelegate (myLeftChangeHandler);
myRightStream.onChange -= new DataStream.ChangeDelegate (myRightChangeHandler);
myLeftStream.onChange -= myLeftChangeHandler;
myRightStream.onChange -= myRightChangeHandler;
}
protected override void myInit()
@@ -108,13 +108,13 @@ namespace BCG {
protected override void myOnFirstSubscriber() {
myStream.onChange += new DataStream.ChangeDelegate(myChangeHandler);
myStream.onChange += myChangeHandler;
}
protected override void myOnLastSubscriber() {
myInit();
if (myStream != null)
myStream.onChange -= new DataStream.ChangeDelegate(myChangeHandler);
myStream.onChange -= myChangeHandler;
}
protected override void myOnTableClear() {
@@ -85,10 +85,11 @@ namespace BCG {
myMapper.onMapperChange += new MapperChangeDelegate(myHandleMapChange);
}
protected override void myOnFirstSubscriber() { myStream.onChange += new ChangeDelegate(myHandleData); }
protected override void myOnFirstSubscriber() =>
myStream.onChange += myHandleData;
protected override void myOnLastSubscriber() {
myStream.onChange -= new ChangeDelegate(myHandleData);
myStream.onChange -= myHandleData;
myRows = null;
myBaseRows = null;
myMap.Clear();
@@ -16,10 +16,10 @@ namespace BCG {
}
protected override void myOnFirstSubscriber() {
_stream.onChange += new ChangeDelegate(_onstream_change);
_stream.onChange += _onstream_change;
}
protected override void myOnLastSubscriber() {
_stream.onChange -= new ChangeDelegate(_onstream_change);
_stream.onChange -= _onstream_change;
}
private void _onstream_change(object o) {
@@ -45,4 +45,4 @@ namespace BCG {
}
}
}
}
@@ -54,12 +54,12 @@ namespace BCG {
protected override void myOnFirstSubscriber()
{
myVs.onChange += new BCG.DataStream.ChangeDelegate (myHandleChange);
myVs.onChange += myHandleChange;
}
protected override void myOnLastSubscriber()
{
myVs.onChange -= new BCG.DataStream.ChangeDelegate (myHandleChange);;
myVs.onChange -= myHandleChange;
}
internal void myHandleChange (object newValue)
@@ -33,9 +33,11 @@ namespace BCG {
myFireResultSnapshot = fireResultSnapshot;
}
protected override void myOnFirstSubscriber() { myStream.onChange += new ChangeDelegate(myHandleChanges); }
protected override void myOnFirstSubscriber() =>
myStream.onChange += myHandleChanges;
protected override void myOnLastSubscriber() { myStream.onChange -= new ChangeDelegate(myHandleChanges); }
protected override void myOnLastSubscriber() =>
myStream.onChange -= myHandleChanges;
private void myHandleChanges(object newValue) {
IBlueRowCollection totalState = (newValue as DataPacket).newRows;
@@ -35,14 +35,14 @@ namespace BCG
#region ViewStream
protected override void myOnFirstSubscriber()
{
myStream.onChange +=new ChangeDelegate(myStreamChange);
myStream.onChange += myStreamChange;
myVsd.addWorker(this);
}
protected override void myOnLastSubscriber()
{
myVsd.removeWorker(this);
myStream.onChange -= new ChangeDelegate(myStreamChange);
myStream.onChange -= myStreamChange;
}
#endregion
@@ -28,7 +28,7 @@ namespace BCG
protected override void myOnFirstSubscriber()
{
myParentStream.onChange += new ChangeDelegate(myParentStreamChangeHandler);
myParentStream.onChange += myParentStreamChangeHandler;
myVSD.addWorker(this);
}
@@ -36,7 +36,7 @@ namespace BCG
protected override void myOnLastSubscriber()
{
myParentStream.onChange -= new ChangeDelegate(myParentStreamChangeHandler);
myParentStream.onChange -= myParentStreamChangeHandler;
myVSD.removeWorker(this);
}
@@ -53,11 +53,11 @@ namespace BCG
if (r.is_subscription)
{
_current_source_subscription = r.subscription_id;
_source_stream.onChange += new ChangeDelegate(_source_stream_onChange);
_source_stream.onChange += _source_stream_onChange;
}
else
{
_source_stream.onChange -= new ChangeDelegate(_source_stream_onChange);
_source_stream.onChange -= _source_stream_onChange;
}
}
}
@@ -24,7 +24,7 @@ namespace BCG
protected override void myOnFirstSubscriber()
{
myKeyToTimeToValue = new Dictionary<string, SortedList<DateTime, double>>();
myToAverage.onChange += new ChangeDelegate(myToAverage_onChange);
myToAverage.onChange += myToAverage_onChange;
}
@@ -12,10 +12,10 @@ namespace BCG {
mySrc = src;
}
protected override void myOnFirstSubscriber() {
mySrc.onChange += new ChangeDelegate(mySrc_onChange);
mySrc.onChange += mySrc_onChange;
}
protected override void myOnLastSubscriber() {
mySrc.onChange -= new ChangeDelegate(mySrc_onChange);
mySrc.onChange -= mySrc_onChange;
}
private void mySrc_onChange(object newValue) {
DataPacket dp = (DataPacket)newValue;
@@ -28,14 +28,14 @@ namespace BCG
protected override void myOnFirstSubscriber()
{
myLeftStream.onChange += new ChangeDelegate(myHandleLeftChanges);
myRightstream.onChange += new ChangeDelegate(myHandleRightChanges);
myLeftStream.onChange += myHandleLeftChanges;
myRightstream.onChange += myHandleRightChanges;
}
protected override void myOnLastSubscriber()
{
myLeftStream.onChange -= new ChangeDelegate(myHandleLeftChanges);
myRightstream.onChange -= new ChangeDelegate(myHandleRightChanges);
myLeftStream.onChange -= myHandleLeftChanges;
myRightstream.onChange -= myHandleRightChanges;
}
private void myHandleLeftChanges (object newValue)
@@ -203,7 +203,7 @@ namespace BCG {
pj = new ProjectStream(pj, "!");
myStreamIndex.Add(myMovingIndex, new Pair<ViewStream, ViewStream>(vs, pj));
if (mySubscriptionActive)
pj.onChange += new ChangeDelegate(myHandleStreamChanges);
pj.onChange += myHandleStreamChanges;
}
public void removeStream(ViewStream vs) {
@@ -212,7 +212,7 @@ namespace BCG {
if (p.Value.first == vs) {
index = p.Key;
if (mySubscriptionActive) {
p.Value.second.onChange -= new ChangeDelegate(myHandleStreamChanges);
p.Value.second.onChange -= myHandleStreamChanges;
if (myTable != null) {
IBlueRowCollection delRows = myTable.removeTable(p.Key);
if (delRows != null)
@@ -229,13 +229,13 @@ namespace BCG {
protected override void myOnFirstSubscriber() {
mySubscriptionActive = true;
foreach (KeyValuePair<int, Pair<ViewStream, ViewStream>> p in myStreamIndex)
p.Value.second.onChange += new ChangeDelegate(myHandleStreamChanges);
p.Value.second.onChange += myHandleStreamChanges;
}
protected override void myOnLastSubscriber() {
mySubscriptionActive = false;
foreach (KeyValuePair<int, Pair<ViewStream, ViewStream>> p in myStreamIndex)
p.Value.second.onChange -= new ChangeDelegate(myHandleStreamChanges);
p.Value.second.onChange -= myHandleStreamChanges;
if (myTable != null)
myTable.clear();
}
@@ -14,11 +14,11 @@ namespace BCG {
}
protected override void myOnFirstSubscriber()
{
mySrc.onChange += new ChangeDelegate(mySrc_onChange);
mySrc.onChange += mySrc_onChange;
}
protected override void myOnLastSubscriber ()
{
mySrc.onChange -= new ChangeDelegate (mySrc_onChange);
mySrc.onChange -= mySrc_onChange;
}
private void mySrc_onChange (object newValue) {
DataPacket dp = (DataPacket)newValue;
@@ -14,11 +14,11 @@ namespace BCG {
protected override void myOnFirstSubscriber() {
_vs_publisher = new ViewPublisher(_name, _broker, _main_stream);
_main_stream.onChange += new DataStream.ChangeDelegate(_handle_update);
_main_stream.onChange += _handle_update;
}
protected override void myOnLastSubscriber() {
_main_stream.onChange -= new DataStream.ChangeDelegate(_handle_update);
_main_stream.onChange -= _handle_update;
_vs_publisher.Dispose();
}
@@ -28,4 +28,4 @@ namespace BCG {
}
}
}
@@ -18,11 +18,11 @@ namespace BCG {
public ViewPublisher(string name, PubTableBroker broker, ViewStream vs) {
_stream = String.IsNullOrEmpty(name) ? vs : new ChangeTableNameStream(vs, name);
_broker = broker;
_stream.onChange += new DataStream.ChangeDelegate(_handle_update);
_stream.onChange += _handle_update;
}
public void Dispose() {
_stream.onChange -= new DataStream.ChangeDelegate(_handle_update);
_stream.onChange -= _handle_update;
}
private void _handle_update(object o) {
@@ -48,16 +48,17 @@ namespace BCG
}
}
public delegate void ChangeDelegate(object newValue);
public event ChangeDelegate onChange
public event Action<Exception> ErrorChanged;
public event DataStreamChangeDelegate onChange
{
add
{
ChangeDelegate currValue = value;
DataStreamChangeDelegate currValue = value;
if (myTestMode)
{
ChangeDelegateWrapper w = new ChangeDelegateWrapper (value);
currValue = new ChangeDelegate (w.wrapperFunction);
currValue = new DataStreamChangeDelegate (w.wrapperFunction);
myDelMap.Add (value, currValue);
}
if (myRealSource != null)
@@ -65,7 +66,7 @@ namespace BCG
else
{
myOnChangeDelegate =
(ChangeDelegate) Delegate.Combine (myOnChangeDelegate,currValue);
(DataStreamChangeDelegate) Delegate.Combine (myOnChangeDelegate,currValue);
if (myOnChangeDelegate.GetInvocationList().Length == 1) // first subscriber
@@ -90,11 +91,11 @@ namespace BCG
}
remove
{
ChangeDelegate currValue = value;
var currValue = value;
// BlueTrace.WriteViewStreamUnsubscribe(this.ID);
if (myTestMode)
{
currValue = myDelMap[value] as ChangeDelegate;
currValue = myDelMap[value] as DataStreamChangeDelegate;
myDelMap.Remove (value);
}
if (myRealSource != null)
@@ -102,7 +103,7 @@ namespace BCG
else
{
myOnChangeDelegate =
(ChangeDelegate) Delegate.Remove (myOnChangeDelegate,currValue);
(DataStreamChangeDelegate) Delegate.Remove (myOnChangeDelegate,currValue);
// this is need to avoid a callback in a reentrant add.
if (myPendingAdds.Count > 0)
@@ -158,7 +159,7 @@ namespace BCG
// this was made internal for testing purposes only.
// don't mess with it.
internal ChangeDelegate myOnChangeDelegate;
internal DataStreamChangeDelegate myOnChangeDelegate;
protected object myLastValue;
protected DataStream myRealSource;
private Stack myPendingAdds;
@@ -167,9 +168,9 @@ namespace BCG
internal class ChangeDelegateWrapper
{
readonly Stopwatch timer = new();
private DataStream.ChangeDelegate myDel;
private DataStreamChangeDelegate myDel;
internal ChangeDelegateWrapper (DataStream.ChangeDelegate del) {myDel = del;}
internal ChangeDelegateWrapper (DataStreamChangeDelegate del) {myDel = del;}
internal void wrapperFunction (object o)
{
@@ -0,0 +1,4 @@
namespace BCG;
public delegate void DataStreamChangeDelegate(object newValue);
public delegate void DataStreamChangeDelegate<T>(IDataPacket<T> dp) where T : IBlueRow;
@@ -0,0 +1,13 @@
namespace BCG;
public interface IViewStream {
event DataStreamChangeDelegate onChange;
IBlueRowCollection rows { get; }
}
public interface IViewStream<T> : IViewStream where T : IBlueRow {
new event DataStreamChangeDelegate<T> onChange;
new IBlueRowCollection<T> rows { get; }
}
@@ -11,7 +11,7 @@ namespace BCG
/// <summary>
/// Marker abstract class
/// </summary>
public abstract class ViewStream : DataStream
public abstract class ViewStream : DataStream, IViewStream
{
private IBlueRowCollection myLastValueForTestMode;
protected bool myUseUncopiedNewRowsInFireEvent =
@@ -39,7 +39,7 @@ namespace BCG
{
// used to force a computation of a stream which
// happens to have no subscribers
onChange += new DataStream.ChangeDelegate(myDummy);
onChange += new DataStreamChangeDelegate(myDummy);
try
{
@@ -50,7 +50,7 @@ namespace BCG
}
finally
{
onChange -= new DataStream.ChangeDelegate(myDummy);
onChange -= new DataStreamChangeDelegate(myDummy);
}
}
}