summaryrefslogtreecommitdiff
path: root/slips/src/app/Marina/Infrastructure/RichList.cs
diff options
context:
space:
mode:
Diffstat (limited to 'slips/src/app/Marina/Infrastructure/RichList.cs')
-rw-r--r--slips/src/app/Marina/Infrastructure/RichList.cs45
1 files changed, 45 insertions, 0 deletions
diff --git a/slips/src/app/Marina/Infrastructure/RichList.cs b/slips/src/app/Marina/Infrastructure/RichList.cs
new file mode 100644
index 0000000..ec6bfa0
--- /dev/null
+++ b/slips/src/app/Marina/Infrastructure/RichList.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+
+namespace Marina.Infrastructure {
+ public class RichList< T > : List< T >, IRichList< T > {
+ public RichList( IEnumerable< T > collection )
+ : base( collection ) {}
+
+ public RichList( int capacity )
+ : base( capacity ) {}
+
+ public RichList() {}
+
+ public IEnumerable< Output > MapAllUsing< Output >( IMapper< T, Output > mapper ) {
+ return ConvertAll< Output >( mapper.MapFrom );
+ }
+
+ public IEnumerable< T > All() {
+ foreach ( T t in this ) {
+ yield return t;
+ }
+ }
+
+ public new IRichList< TOutput > ConvertAll< TOutput >( Converter< T, TOutput > converter ) {
+ return new RichList< TOutput >( base.ConvertAll( converter ) );
+ }
+
+ public new IRichList< T > FindAll( Predicate< T > match ) {
+ return new RichList< T >( base.FindAll( match ) );
+ }
+
+ public new IRichList< T > GetRange( int index, int count ) {
+ return new RichList< T >( base.GetRange( index, count ) );
+ }
+
+ public void VisitAllItemWith( IVisitor< T > visitor ) {
+ ForEach( visitor.Visit );
+ }
+
+ public Result GetResultOfVisitingAllItemsWith< Result >( IValueReturningVisitor< Result, T > visitor ) {
+ VisitAllItemWith( visitor );
+ return visitor.GetResult( );
+ }
+ }
+} \ No newline at end of file