You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			145 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| 
 | |
| namespace FairyGUI.Utils
 | |
| {
 | |
|     /// <summary>
 | |
|     /// 
 | |
|     /// </summary>
 | |
|     public class XMLList
 | |
|     {
 | |
|         public List<XML> rawList;
 | |
| 
 | |
|         public XMLList()
 | |
|         {
 | |
|             rawList = new List<XML>();
 | |
|         }
 | |
| 
 | |
|         public XMLList(List<XML> 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<XML> _tmpList = new List<XML>();
 | |
|         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<XML>();
 | |
|                 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<XML> _source;
 | |
|             string _selector;
 | |
|             int _index;
 | |
|             int _total;
 | |
|             XML _current;
 | |
| 
 | |
|             public Enumerator(List<XML> 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;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |