Esempio n. 1
0
        public void Refresh()
        {
            this.pressure = this.GetCurrentPressure();
            UseLevel useLevel = this.pressureTransitions.GetUseLevel(this.pressure, this.resourceUse.PreviousUseLevel);

            this.resourceUse = new ResourceUse(this.resourceIdentifier, useLevel, this.resourceUse.CurrentUseLevel);
        }
 internal UseLevel GetUseLevel(long pressure, UseLevel previousUseLevel)
 {
     if (pressure > this.mediumToHigh)
     {
         return(UseLevel.High);
     }
     if (PressureTransitions.Between(pressure, this.highToMedium, this.mediumToHigh))
     {
         if (previousUseLevel == UseLevel.High)
         {
             return(UseLevel.High);
         }
         return(UseLevel.Medium);
     }
     else
     {
         if (PressureTransitions.Between(pressure, this.lowToMedium, this.highToMedium))
         {
             return(UseLevel.Medium);
         }
         if (PressureTransitions.Between(pressure, this.mediumToLow, this.lowToMedium) && (previousUseLevel == UseLevel.Medium || previousUseLevel == UseLevel.High))
         {
             return(UseLevel.Medium);
         }
         return(UseLevel.Low);
     }
 }
Esempio n. 3
0
        public static GraphData LevelBasedLayout(Dictionary <string, Node> dict, UseLevel useLevel)
        {
            // Generate containers of levels of inclusion (min or max level found).
            bool useMin = (useLevel == UseLevel.Min);
            List <List <Node> > levels = Levels(dict, useMin);

            double cellSize = CalculateNodeSizes(dict);

            // Simple layout algorithm based on include level
            List <int> counts = new List <int>();
            int        sum    = 0;

            foreach (var l in levels)
            {
                sum += l.Count;
            }
            int avgCount = sum / levels.Count;

            int y = 0;

            for (int i = 0; i < levels.Count; ++i)
            {
                List <Node> lvl       = levels[i];
                int         x         = 0;
                int         remaining = lvl.Count;
                for (int j = 0; j < lvl.Count; ++j)
                {
                    if (x >= avgCount)
                    {
                        ++y;
                        x          = 0;
                        remaining -= avgCount;
                    }

                    int shift = Math.Min(avgCount, remaining) - 1;

                    lvl[j].center.X = (-shift / 2 + x) * cellSize;
                    lvl[j].center.Y = y * cellSize;

                    ++x;
                }
                ++y;
            }

            return(NormalizeNodePositions(dict, new Size(cellSize, cellSize)));
        }
Esempio n. 4
0
        private ResourceSample CalculateStableSample()
        {
            UseLevel stableUseLevel = UseLevel.Low;

            for (int i = 0; i < this.useLevelSampleCounts.Length; i++)
            {
                if (this.useLevelSampleCounts[i] != 0)
                {
                    stableUseLevel = (UseLevel)i;
                    break;
                }
            }
            long pressure = (long)(from sample in this.samples
                                   where sample.UseLevel == stableUseLevel
                                   select sample).Average((ResourceSample sample) => sample.Pressure);

            return(new ResourceSample(stableUseLevel, pressure));
        }
Esempio n. 5
0
 public ResourceUse(ResourceIdentifier resource, UseLevel currentUseLevel, UseLevel previousUseLevel)
 {
     this.Resource         = resource;
     this.CurrentUseLevel  = currentUseLevel;
     this.PreviousUseLevel = previousUseLevel;
 }
Esempio n. 6
0
 public int GetUseLevelPercentage(UseLevel useLevel)
 {
     return(this.useLevelSampleCounts[(int)useLevel] * 100 / this.samples.Length);
 }
Esempio n. 7
0
 public ResourceSample(UseLevel useLevel, long pressure)
 {
     this.useLevel = useLevel;
     this.pressure = pressure;
 }