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