Ejemplo n.º 1
0
        private bool ShouldIncrement(int currentDepth)
        {
            bool result = false;

            if (currentDepth >= _depth - 1)
            {
                MajorityElementMode oldMode = TargetSystem.Floors[currentDepth].MajorityElement.Mode;
                MajorityElementMode newMode = DecrementFloorMajorityElementMode(currentDepth);

                if (newMode == MajorityElementMode.ThirdChannel && oldMode == MajorityElementMode.Majority)
                {
                    result = true;
                }
            }
            else
            {
                bool shouldIncrement = ShouldIncrement(currentDepth + 1);
                if (shouldIncrement == true)
                {
                    MajorityElementMode oldMode = TargetSystem.Floors[currentDepth].MajorityElement.Mode;
                    MajorityElementMode newMode = DecrementFloorMajorityElementMode(currentDepth);

                    if (newMode == MajorityElementMode.ThirdChannel && oldMode == MajorityElementMode.Majority)
                    {
                        result = true;
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        protected MajorityElementMode DecrementFloorMajorityElementMode(int floorIndex)
        {
            MajorityElementMode majorityElementMode = TargetSystem.Floors[floorIndex].MajorityElement.Mode;

            TargetSystem.Floors[floorIndex].MajorityElement.Mode = ChangeMajorityMode(majorityElementMode, false);

            return(TargetSystem.Floors[floorIndex].MajorityElement.Mode);
        }
Ejemplo n.º 3
0
        protected MajorityElementMode ChangeMajorityMode(MajorityElementMode currentValue, bool increment)
        {
            int period = Enum.GetNames(typeof(MajorityElementMode)).Length;

            if (increment)
            {
                return((MajorityElementMode)
                       (((int)currentValue + 1) % period));
            }
            else
            {
                return((MajorityElementMode)
                       (((int)currentValue + period - 1) % period));
            }
        }
Ejemplo n.º 4
0
        private bool CheckFloorsConfig()
        {
            foreach (Floor floor in TargetSystem.Floors)
            {
                MajorityElementMode floorMode = floor.MajorityElement.Mode;
                switch (floorMode)
                {
                case MajorityElementMode.Majority:
                {
                    int aliveElements = floor.Elements.Count(cc => cc.IsAlive);
                    if (aliveElements < 2)
                    {
                        return(false);
                    }
                    break;
                }

                case MajorityElementMode.FirstChannel:
                {
                    if (floor.Elements[0].IsAlive == false)
                    {
                        return(false);
                    }
                    break;
                }

                case MajorityElementMode.SecondChannel:
                {
                    if (floor.Elements[1].IsAlive == false)
                    {
                        return(false);
                    }
                    break;
                }

                case MajorityElementMode.ThirdChannel:
                {
                    if (floor.Elements[2].IsAlive == false)
                    {
                        return(false);
                    }
                    break;
                }
                }
            }
            return(true);
        }
Ejemplo n.º 5
0
 public MajorityElement(Decimal majorityElementFailureRate)
 {
     FailureRate = majorityElementFailureRate;
     Mode        = MajorityElementMode.Majority;
     IsAlive     = true;
 }