summaryrefslogtreecommitdiff
path: root/slips/src/app/Marina/Infrastructure/RichList.cs
blob: ec6bfa04abf78c22e55f0fd10abc63442a9194da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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( );
		}
	}
}