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 ) ); };
}
}
}