// Suorittaa jonkin operaation listalla ja annetulla komponentilla. // Suoritetaan poisto ja lisäys operaatiot tällä metodilla jotta säästytään // turhalta koodin duplikoinnilta. private void PerformActionWith(Action <IList, IObjectComponent> action, IObjectComponent objectComponent) { IList list = null; Type objectComponentType = objectComponent.GetType(); Type[] types = objectComponentType.GetInterfaces(); // Jos tyyppi on rajapinta, suoritetaan operaatio heti sillä ja listalla johon se voi kuulua. if (objectComponentType.IsInterface) { list = componentLists[objectComponentType]; action(list, objectComponent); list = null; } // Käy tyypin jokaisen rajapinnan läpin ja samalla suorittaa jokaisella listalla johon // se voi kuulua operaation. foreach (Type type in types) { componentLists.TryGetValue(type, out list); if (list != null) { // Jos saatiin lista dictistä, suoritetaan operaatio ja asetetaan listan viite nulliksi. action(list, objectComponent); list = null; } } }
// Poistaa komponentin jokaisesta listasta johon se voisi kuulua. private void RemoveFromLists(IObjectComponent objectComponent) { // Suorittaa poisto operaation listalle jos komponentti on listassa. PerformActionWith((list, component) => { if (list.Contains(component)) { list.Remove(component); } }, objectComponent); }
// Lisää komponentin jokaiseen listaan johon se voi kuulua. private void AddToLists(IObjectComponent objectComponent) { // Suorittaa lisäys operaation listaan jos komponenttia ei ole siinä. PerformActionWith((list, component) => { if (!list.Contains(component)) { list.Add(component); } }, objectComponent); }
public Utility( ICompactComponent compact, IFunctionComponent function, IMathComponent math, IObjectComponent obj, IStringComponent str) { if (compact == null) { throw new ArgumentNullException("compact"); } if (function == null) { throw new ArgumentNullException("function"); } if (math == null) { throw new ArgumentNullException("math"); } if (obj == null) { throw new ArgumentNullException("obj"); } if (str == null) { throw new ArgumentNullException("str"); } _compact = compact; _math = math; _function = function; _object = obj; _string = str; }
/// <summary> /// Palauttaa truen jos jokin komponentti täyttää ehdon. /// </summary> public bool ContainsComponent(IObjectComponent objectComponent) { return(allComponents.Contains(objectComponent)); }
/// <summary> /// Poistaa annetun komponentin listoista. /// </summary> public void RemoveComponent(IObjectComponent objectComponent) { RemoveFromLists(objectComponent); }
/// <summary> /// Lisää annetun komponentin listoihin. /// </summary> public void AddComponent(IObjectComponent objectComponent) { AddToLists(objectComponent); }
public void SafelyRemoveComponent(IObjectComponent objectComponent) { safeRemoveQue.Add(objectComponent); }
public void SafelyAddComponent(IObjectComponent objectComponent) { safeAddQue.Add(objectComponent); }