@@ -0,0 +1,2782 @@
+/*%0A * The MIT License%0A *%0A * Copyright (c) 2018 Y.K. Chan.%0A *%0A * Permission is hereby granted, free of charge, to any person obtaining a copy%0A * of this software and associated documentation files (the %22Software%22), to deal%0A * in the Software without restriction, including without limitation the rights%0A * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell%0A * copies of the Software, and to permit persons to whom the Software is%0A * furnished to do so, subject to the following conditions:%0A *%0A * The above copyright notice and this permission notice shall be included in all%0A * copies or substantial portions of the Software.%0A *%0A * THE SOFTWARE IS PROVIDED %22AS IS%22, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR%0A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,%0A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE%0A * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER%0A * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,%0A * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE%0A * SOFTWARE.%0A */%0A%0Apackage jacobi.core.impl;%0A%0Aimport jacobi.api.Matrix;%0A%0Aimport java.util.function.Function;%0A%0A/**%0A * @author Y.K. Chan%0A */%0Apublic class UnsafeMatrix implements Matrix %7B%0A%0A    public UnsafeMatrix(double%5B%5D%5B%5D rows) %7B%0A        this(rows, cls -%3E %7B%0A            throw new UnsupportedOperationException(%22%22);%0A        %7D);%0A    %7D%0A%0A    public UnsafeMatrix(double%5B%5D%5B%5D rows, Function%3CClass, ?%3E facadeFactory) %7B%0A        this.numCols = rows == null ? 0 : rows%5B0%5D.length;%0A        this.rows = rows;%0A        this.facadeFactory = facadeFactory;%0A    %7D%0A%0A    @Override%0A    public int getRowCount() %7B%0A        return this.rows.length;%0A    %7D%0A%0A    @Override%0A    public int getColCount() %7B%0A        return this.numCols;%0A    %7D%0A%0A    @Override%0A    public double%5B%5D getRow(int index) %7B%0A        return this.rows%5Bindex%5D;%0A    %7D%0A%0A    @Override%0A    public Matrix setRow(int index, double%5B%5D values) %7B%0A        double%5B%5D row = this.rows%5Bindex%5D;%0A        if(row != values) %7B%0A            System.arraycopy(values, 0, row, 0, row.length);%0A        %7D%0A        return this;%0A    %7D%0A%0A    @Override%0A    public Matrix swapRow(int i, int j) %7B%0A        if(i != j)%7B%0A            double%5B%5D tmp = this.rows%5Bi%5D;%0A            this.rows%5Bi%5D = this.rows%5Bj%5D;%0A            this.rows%5Bj%5D = tmp;%0A        %7D%0A        return this;%0A    %7D%0A%0A    @Override%0A    public %3CT%3E T ext(Class%3CT%3E clazz) %7B%0A        return (T) this.facadeFactory.apply(clazz);%0A    %7D%0A%0A    @Override%0A    public Matrix copy() %7B%0A        return new UnsafeMatrix(this.toArray(), this.facadeFactory);%0A    %7D%0A%0A    public double%5B%5D%5B%5D getRows() %7B%0A        return rows;%0A    %7D%0A%0A    private int numCols;%0A    private double%5B%5D%5B%5D rows;%0A    private Function%3CClass, ?%3E facadeFactory;%0A%7D%0A

Update DefaultMatrix to not return inner array instance