Mercurial > hg > Database > jungle-sharp
view Main/jungle-main/util/IterableConverter.cs @ 28:9588ad364fdd
Last commit before change.
author | Kazuma Takeda |
---|---|
date | Wed, 18 Jan 2017 19:53:29 +0900 |
parents | 1f99e150f336 |
children | f2ea780b3e80 |
line wrap: on
line source
using UnityEngine; using System.Collections.Generic; using System.Collections; using System; public class IterableConverter<A,B> : IEnumerable<A> { private IEnumerable<B> iterable; private Converter<A,B> converter; IEnumerator IEnumerable.GetEnumerator() { // call the generic version of the method return this.GetEnumerator(); } public IEnumerator<A> GetEnumerator() { return iterator (); } public IterableConverter(IEnumerable<B> _iterable,Converter<A,B> _converter) { iterable = _iterable; converter = _converter; } public IEnumerator<A> iterator() { return new IteratorConverter<A,B>(iterable.GetEnumerator(),converter); } private class IteratorConverter<C,D> : IEnumerator<C> { public List<C> appLines { get; set; } private IEnumerator<D> iterator; private Converter<C,D> converter; public IteratorConverter(IEnumerator<D> _iterator,Converter<C,D> _converter) { iterator = _iterator; converter = _converter; } public bool MoveNext() { return iterator.MoveNext(); } public C Current { get{ return converter.conv (iterator.Current); } } public void Reset() { // ホントはremove? iterator.Reset(); } object IEnumerator.Current { get { return appLines; } } public void Dispose() { ((IEnumerator<C>)this.appLines).Dispose (); } } public interface Converter<C,D>{ C conv (D _b); } }