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 org.ujmp.core.Matrix;
027    import org.ujmp.core.exceptions.MatrixException;
028    import org.ujmp.core.genericmatrix.stub.AbstractDenseGenericMatrix;
029    import org.ujmp.core.interfaces.Wrapper;
030    import org.ujmp.core.util.CoordinateIterator;
031    import org.ujmp.core.util.MathUtil;
032    
033    import shared.array.ObjectArray;
034    
035    public class SSTDenseObjectMatrix extends AbstractDenseGenericMatrix<Object>
036                    implements Wrapper<ObjectArray<Object>> {
037            private static final long serialVersionUID = 2319673263310965476L;
038    
039            private transient ObjectArray<Object> data = null;
040    
041            public SSTDenseObjectMatrix(ObjectArray<Object> data) {
042                    this.data = data;
043            }
044    
045            public SSTDenseObjectMatrix(long... size) {
046                    data = new ObjectArray<Object>(Object.class, MathUtil.toIntArray(size));
047            }
048    
049            public SSTDenseObjectMatrix(Matrix source) {
050                    data = new ObjectArray<Object>(Object.class, MathUtil.toIntArray(source
051                                    .getSize()));
052                    for (long[] c : source.availableCoordinates()) {
053                            setObject(source.getAsObject(c), c);
054                    }
055            }
056    
057            
058            public Object getObject(long... coordinates) throws MatrixException {
059                    return data.get(MathUtil.toIntArray(coordinates));
060            }
061    
062            public void setObject(Object value, long... coordinates)
063                            throws MatrixException {
064                    data.set(value, MathUtil.toIntArray(coordinates));
065    
066            }
067    
068            public long[] getSize() {
069                    return MathUtil.toLongArray(data.dimensions());
070            }
071    
072            
073            public Iterable<long[]> allCoordinates() throws MatrixException {
074                    return new CoordinateIterator(this.getSize());
075            }
076    
077            
078            public ObjectArray<Object> getWrappedObject() {
079                    return data;
080            }
081    
082            
083            public void setWrappedObject(ObjectArray<Object> object) {
084                    this.data = object;
085            }
086    
087    }