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

}