annotate Main/jungle-main/util/IterableConverter.cs @ 35:f2ea780b3e80

fix
author Kazuma Takeda
date Wed, 22 Feb 2017 16:30:19 +0900
parents 9588ad364fdd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
35
Kazuma Takeda
parents: 28
diff changeset
1 using System.Collections.Generic;
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
2 using System.Collections;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
3 using System;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
4
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
5 public class IterableConverter<A,B> : IEnumerable<A> {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
6 private IEnumerable<B> iterable;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
7 private Converter<A,B> converter;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
8
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
9
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
10 IEnumerator IEnumerable.GetEnumerator()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
11 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
12 // call the generic version of the method
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
13 return this.GetEnumerator();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
14 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
15
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
16 public IEnumerator<A> GetEnumerator()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
17 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
18 return iterator ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
19 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
21 public IterableConverter(IEnumerable<B> _iterable,Converter<A,B> _converter)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
22 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
23 iterable = _iterable;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
24 converter = _converter;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
25 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
26
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
27 public IEnumerator<A> iterator()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
28 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
29 return new IteratorConverter<A,B>(iterable.GetEnumerator(),converter);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
30 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
31
28
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
32 private class IteratorConverter<C,D> : IEnumerator<C>
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
33 {
28
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
34 public List<C> appLines { get; set; }
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
35
28
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
36 private IEnumerator<D> iterator;
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
37 private Converter<C,D> converter;
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
38
28
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
39 public IteratorConverter(IEnumerator<D> _iterator,Converter<C,D> _converter)
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
40 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
41 iterator = _iterator;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
42 converter = _converter;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
43 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
44
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
45 public bool MoveNext()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
46 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
47 return iterator.MoveNext();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
48 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
49
28
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
50 public C Current
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
51 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
52 get{
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
53 return converter.conv (iterator.Current);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
54 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
55 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
56
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
57 public void Reset()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
58 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
59 // ホントはremove?
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
60 iterator.Reset();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
61 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
62
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
63 object IEnumerator.Current
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
64 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
65 get { return appLines; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
66 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
67
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
68 public void Dispose() {
28
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
69 ((IEnumerator<C>)this.appLines).Dispose ();
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
70 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
71 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
72
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
73
28
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
74 public interface Converter<C,D>{
9588ad364fdd Last commit before change.
Kazuma Takeda
parents: 20
diff changeset
75 C conv (D _b);
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
76 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
77
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
78 }