This commit is contained in:
Bob
2010-01-31 13:55:01 +13:00
parent 73c16d5d9d
commit c4477455fe
7 changed files with 45 additions and 20 deletions

View File

@@ -41,14 +41,19 @@ namespace OpenRa.Collections
public class CachedView<T,U> : Set<U>
{
public CachedView( Set<T> set, Func<T,bool> include, Func<T,U> store )
public CachedView( Set<T> set, Func<T, bool> include, Func<T, U> store )
: this( set, include, x => new[] { store( x ) } )
{
}
public CachedView( Set<T> set, Func<T,bool> include, Func<T,IEnumerable<U>> store )
{
foreach( var t in set )
if( include( t ) )
Add( store( t ) );
store( t ).Do( x => Add( x ) );
set.OnAdd += obj => { if( include( obj ) ) Add( store( obj ) ); };
set.OnRemove += obj => { if( include( obj ) ) Remove( store( obj ) ); };
set.OnAdd += obj => { if( include( obj ) ) store( obj ).Do( x => Add( x ) ); };
set.OnRemove += obj => { if( include( obj ) ) store( obj ).Do( x => Remove( x ) ); };
}
}
}

View File

@@ -1,4 +1,6 @@

using System;
using System.Collections.Generic;
namespace OpenRa
{
public static class Exts
@@ -7,5 +9,11 @@ namespace OpenRa
{
return string.Format(fmt, args);
}
public static void Do<T>( this IEnumerable<T> e, Action<T> fn )
{
foreach( var ee in e )
fn( ee );
}
}
}