// 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);
 }
示例#4
0
        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);
 }