class LowerTriangularMatrix {

    public static void lmul(final Matrix L, final DataBlock left) {
        int n = L.nrows_;
        double[] data = L.data_;

        double[] x = left.getData();
        int xinc = left.getIncrement();
        int xbeg = left.getStartPosition();
        int xend = left.getEndPosition();
        if (xinc == 1) {
            for (int xi = xbeg, idx = 0; xi < xend; ++xi, idx += n + 1) {
                double t = 0.0;
                for (int xj = xi, idx2 = idx; xj < xend; ++xj, ++idx2) {
                    t += data[idx2] * x[xj];
                }
                x[xi] = t;
            }
        } else {
            for (int xi = xbeg, idx = 0; xi != xend; xi += xinc, idx += n + 1) {
                double t = 0.0;
                for (int xj = xi, idx2 = idx; xj != xend; xj += xinc, ++idx2) {
                    t += data[idx2] * x[xj];
                }
                x[xi] = t;
            }
        }
    }

    private  LowerTriangularMatrix();

}