Example #1
0
        public static Interval Split(this Interval self, int count)
        {
            var oldValue = self.End;

            var margin = (self.End - self.Start) / count;

            self.End = self.End - margin;

            var newInterval = new Interval(self.End + 1, oldValue);

            return newInterval;
        }
 public void AddInterval(Interval interval)
 {
     this.intervals.Add(interval);
 }
Example #3
0
        public void CreateServiceNodes()
        {
            var numberOfNodesPerService = 5;

            if (services.Count > 0)
            {
                foreach (var svc in services)
                {
                    var serviceNodes = svc.GetServiceNodes();

                    foreach (var node in serviceNodes)
                    {
                        var newNode = new SequentialIntServiceNode(this.Id);

                        foreach (var interval in node.Intervals)
                        {
                            var newInterval = interval.Split(services.Count + 1);

                            newNode.AddInterval(interval);
                        }

                        this.AddServiceNode(newNode);
                    }
                }

                var allNodes = GetAllNodesFromAllServices();

                foreach (var node in allNodes)
                {
                    DistributeTheNode(node);
                }
            }
            else
            {
                int minValue = int.MinValue;
                int nodeInterval = (int.MaxValue / numberOfNodesPerService) * 2;

                for (int i = 0; i < numberOfNodesPerService; i++)
                {
                    int nodeMinValue = minValue + (i * nodeInterval);
                    int nodeMaxValue = minValue + ((i + 1) * nodeInterval) - 1;

                    if (i + 1 == numberOfNodesPerService)
                        nodeMaxValue = int.MaxValue;

                    var newInterval = new Interval(nodeMinValue, nodeMaxValue);

                    var newNode = new SequentialIntServiceNode(this.Id);

                    newNode.AddInterval(newInterval);

                    this.nodes.Add(newNode);
                }
            }
        }