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); }
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); } } }