001    /*
002     * Copyright (C) 2008-2010 by Holger Arndt
003     *
004     * This file is part of the Universal Java Matrix Package (UJMP).
005     * See the NOTICE file distributed with this work for additional
006     * information regarding copyright ownership and licensing.
007     *
008     * UJMP is free software; you can redistribute it and/or modify
009     * it under the terms of the GNU Lesser General Public License as
010     * published by the Free Software Foundation; either version 2
011     * of the License, or (at your option) any later version.
012     *
013     * UJMP is distributed in the hope that it will be useful,
014     * but WITHOUT ANY WARRANTY; without even the implied warranty of
015     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016     * GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public
019     * License along with UJMP; if not, write to the
020     * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
021     * Boston, MA  02110-1301  USA
022     */
023    
024    package org.ujmp.sst;
025    
026    import java.io.IOException;
027    import java.io.ObjectInputStream;
028    import java.io.ObjectOutputStream;
029    
030    import org.ujmp.core.Matrix;
031    import org.ujmp.core.exceptions.MatrixException;
032    import org.ujmp.core.interfaces.Wrapper;
033    import org.ujmp.core.intmatrix.stub.AbstractDenseIntMatrix;
034    import org.ujmp.core.util.CoordinateIterator;
035    import org.ujmp.core.util.MathUtil;
036    
037    import shared.array.IntegerArray;
038    
039    public class SSTDenseIntMatrix extends AbstractDenseIntMatrix implements
040                    Wrapper<IntegerArray> {
041            private static final long serialVersionUID = 2319673263310965476L;
042    
043            private transient IntegerArray data = null;
044    
045            public SSTDenseIntMatrix(IntegerArray data) {
046                    this.data = data;
047            }
048    
049            public SSTDenseIntMatrix(long... size) {
050                    data = new IntegerArray(MathUtil.toIntArray(size));
051            }
052    
053            public SSTDenseIntMatrix(Matrix source) {
054                    data = new IntegerArray(MathUtil.toIntArray(source.getSize()));
055                    for (long[] c : source.availableCoordinates()) {
056                            setInt(source.getAsInt(c), c);
057                    }
058            }
059    
060            public int getInt(long... coordinates) throws MatrixException {
061                    return data.get(MathUtil.toIntArray(coordinates));
062            }
063    
064            public void setInt(int value, long... coordinates) throws MatrixException {
065                    data.set(value, MathUtil.toIntArray(coordinates));
066    
067            }
068    
069            public long[] getSize() {
070                    return MathUtil.toLongArray(data.dimensions());
071            }
072    
073            
074            public Iterable<long[]> allCoordinates() throws MatrixException {
075                    return new CoordinateIterator(this.getSize());
076            }
077    
078            private void readObject(ObjectInputStream s) throws IOException,
079                            ClassNotFoundException {
080                    s.defaultReadObject();
081                    byte[] bytes = (byte[]) s.readObject();
082                    data = IntegerArray.parse(bytes);
083            }
084    
085            private void writeObject(ObjectOutputStream s) throws IOException,
086                            MatrixException {
087                    s.defaultWriteObject();
088                    s.writeObject(data.getBytes());
089            }
090    
091            
092            public IntegerArray getWrappedObject() {
093                    return data;
094            }
095    
096            
097            public void setWrappedObject(IntegerArray object) {
098                    this.data = object;
099            }
100    
101    }