using System;
using System.Collections.Generic;
namespace FairyGUI.Utils
{
///
///
///
public class XMLList
{
public List rawList;
public XMLList()
{
rawList = new List();
}
public XMLList(List list)
{
rawList = list;
}
public void Add(XML xml)
{
rawList.Add(xml);
}
public void Clear()
{
rawList.Clear();
}
public int Count
{
get { return rawList.Count; }
}
public XML this[int index]
{
get { return rawList[index]; }
}
public Enumerator GetEnumerator()
{
return new Enumerator(rawList, null);
}
public Enumerator GetEnumerator(string selector)
{
return new Enumerator(rawList, selector);
}
static List _tmpList = new List();
public XMLList Filter(string selector)
{
bool allFit = true;
_tmpList.Clear();
int cnt = rawList.Count;
for (int i = 0; i < cnt; i++)
{
XML xml = rawList[i];
if (xml.name == selector)
_tmpList.Add(xml);
else
allFit = false;
}
if (allFit)
return this;
else
{
XMLList ret = new XMLList(_tmpList);
_tmpList = new List();
return ret;
}
}
public XML Find(string selector)
{
int cnt = rawList.Count;
for (int i = 0; i < cnt; i++)
{
XML xml = rawList[i];
if (xml.name == selector)
return xml;
}
return null;
}
public void RemoveAll(string selector)
{
rawList.RemoveAll(xml => xml.name == selector);
}
public struct Enumerator
{
List _source;
string _selector;
int _index;
int _total;
XML _current;
public Enumerator(List source, string selector)
{
_source = source;
_selector = selector;
_index = -1;
if (_source != null)
_total = _source.Count;
else
_total = 0;
_current = null;
}
public XML Current
{
get { return _current; }
}
public bool MoveNext()
{
while (++_index < _total)
{
_current = _source[_index];
if (_selector == null || _current.name == _selector)
return true;
}
return false;
}
public void Erase()
{
_source.RemoveAt(_index);
_total--;
}
public void Reset()
{
_index = -1;
}
}
}
}