예제 #1
0
        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);
            }
        }
예제 #2
0
 public MatrixODSumProvider(IODMatrix matrix, ODMatrixVector vector)
     : base(matrix)
 {
     MatrixVector = vector;
 }
예제 #3
0
 public MatrixODSumProvider(IODMatrix matrix, ODMatrixVector vector)
     : base(matrix)
 {
     MatrixVector = vector;
 }