using System; namespace Microsoft.Msagl.Layout.Layered { internal class OrderingMeasure { int numberOfCrossings; double layerGroupDisbalance; int[][] la; int virtVertexStart; /// /// for the i-th layer the optimal size of an original group is optimalOriginalGroupSize[i] /// double[] optimalOriginalGroupSize; /// /// for the i-th layer the optimal size of a virtual group is optimalOriginalGroupSize[i] /// double[] optimalVirtualGroupSize; internal OrderingMeasure(int[][] layerArraysPar, int numOfCrossings, int virtualVertexStart, double[] optimalOriginalGroupSizePar, double[] optimalVirtualGroupSizePar ) { this.numberOfCrossings = numOfCrossings; this.la = layerArraysPar; this.virtVertexStart = virtualVertexStart; this.optimalVirtualGroupSize = optimalVirtualGroupSizePar; this.optimalOriginalGroupSize = optimalOriginalGroupSizePar; if (optimalOriginalGroupSize != null) CalculateLayerGroupDisbalance(); } void CalculateLayerGroupDisbalance() { for(int i = 0; i= this.virtVertexStart; j++) groupSize++; i = j + 1; return Math.Abs(virtGroupOptSize - groupSize); } static public bool operator<(OrderingMeasure a, OrderingMeasure b){ if (a.numberOfCrossings < b.numberOfCrossings) return true; if (a.numberOfCrossings > b.numberOfCrossings) return false; return (int)a.layerGroupDisbalance < (int)b.layerGroupDisbalance; } static public bool operator>(OrderingMeasure a, OrderingMeasure b){ if (a.numberOfCrossings > b.numberOfCrossings) return true; if (a.numberOfCrossings < b.numberOfCrossings) return false; return (int)a.layerGroupDisbalance > (int)b.layerGroupDisbalance; } internal bool IsPerfect() { return this.numberOfCrossings == 0 && this.layerGroupDisbalance == 0; } } }