using UnityEngine;
using System.Collections.Generic;
using System.Collections;
using System;
public class IterableConverter : IEnumerable {
private IEnumerable iterable;
private Converter converter;
IEnumerator IEnumerable.GetEnumerator()
{
// call the generic version of the method
return this.GetEnumerator();
}
public IEnumerator GetEnumerator()
{
return iterator ();
}
public IterableConverter(IEnumerable _iterable,Converter _converter)
{
iterable = _iterable;
converter = _converter;
}
public IEnumerator iterator()
{
return new IteratorConverter(iterable.GetEnumerator(),converter);
}
private class IteratorConverter : IEnumerator
{
public List appLines { get; set; }
private int position;
private IEnumerator iterator;
private Converter converter;
public IteratorConverter(IEnumerator _iterator,Converter _converter)
{
iterator = _iterator;
converter = _converter;
}
public bool MoveNext()
{
return iterator.MoveNext();
}
public A Current
{
get{
return converter.conv (iterator.Current);
}
}
public void Reset()
{
// ホントはremove?
iterator.Reset();
}
object IEnumerator.Current
{
get { return (appLines.ToArray())[position] ; }
}
public void Dispose() {
((IEnumerator)this.appLines).Dispose ();
}
}
public interface Converter{
A conv (B _b);
}
}