public double this[ushort id, ODMatrixVector vector] { get { var res = 0d; int row, col, rowIncrement = 0, colIncrement = 0; switch (vector) { case ODMatrixVector.Origin: row = _idToIndex[id]; if (!double.IsNaN(_originSum[row])) { return(_originSum[row]); } col = 0; colIncrement = 1; break; case ODMatrixVector.Destination: col = _idToIndex[id]; if (!double.IsNaN(_destinationSum[col])) { return(_destinationSum[col]); } row = 0; rowIncrement = 1; break; case ODMatrixVector.Both: return(this[id, ODMatrixVector.Origin] + this[id, ODMatrixVector.Destination] - this[id, id]); default: throw new ArgumentOutOfRangeException("vector"); } for (; row < Size && col < Size; col += colIncrement, row += rowIncrement) { res += _matrix[row][col]; } switch (vector) { case ODMatrixVector.Origin: _originSum[row] = res; break; default: _destinationSum[col] = res; break; } return(res); } }
public MatrixODSumProvider(IODMatrix matrix, ODMatrixVector vector) : base(matrix) { MatrixVector = vector; }
public MatrixODSumProvider(IODMatrix matrix, ODMatrixVector vector) : base(matrix) { MatrixVector = vector; }