Javasci: fix java build, javadoc warnings
[scilab.git] / scilab / modules / types / src / java / org / scilab / modules / types / ScilabDoubleReference.java
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2009-2009 - DIGITEO - Bruno JOFRET
4  *  Copyright (C) 2010-2010 - DIGITEO - Clement DAVID
5  *  Copyright (C) 2011-2011 - DIGITEO - Calixte DENIZET
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  */
17
18 package org.scilab.modules.types;
19
20 import java.io.ObjectStreamException;
21 import java.nio.DoubleBuffer;
22
23 /**
24  * This class provides a representation on the Scilab Double datatype<br>
25  * Note that double is the default datatype in Scilab.<br>
26  * <br>
27  * This class is {@link java.io.Serializable} and any modification could impact
28  * load and store of data (Xcos files, Javasci saved data, etc...).<br>
29  * <br>
30  * Example (real):<BR>
31  * <code>
32  * double [][]a={{21.2, 22.0, 42.0, 39.0},{23.2, 24.0, 44.0, 40.0}};<BR>
33  * ScilabDouble aMatrix = new ScilabDouble(a);<BR>
34  * </code> <br>
35  * Example (complex):<BR>
36  * <code>
37  * double [][]a={{21.2, 22.0, 42.0, 39.0},{23.2, 24.0, 44.0, 40.0}};<BR>
38  * double [][]aImg={{210.2, 220.0, 420.0, 390.0},{230.2, 240.0, 440.0, 400.0}};<BR>
39  * ScilabDouble aMatrix = new ScilabDouble(a, aImg);
40  * </code>
41  *
42  * @see org.scilab.modules.javasci.Scilab
43  */
44 public class ScilabDoubleReference extends ScilabDouble {
45
46     private final DoubleBuffer realBuffer;
47     private final DoubleBuffer imaginaryBuffer;
48     private final int nbRows;
49     private final int nbCols;
50
51     /**
52      * Constructor with a matrix of complex numbers
53      *
54      * @param realData
55      *            the real part of the data
56      * @param imagData
57      *            the imaginary part of the data
58      */
59     ScilabDoubleReference(String varName, DoubleBuffer realBuffer, DoubleBuffer imagBuffer, int nbRows, int nbCols) {
60         this.realBuffer = realBuffer;
61         this.imaginaryBuffer = imagBuffer;
62         this.nbRows = nbRows;
63         this.nbCols = nbCols;
64         this.varName = varName;
65         this.byref = true;
66         this.swaped = false;
67     }
68
69     /**
70      * Check the emptiness of the associated data.
71      *
72      * @return true, if the associated data array is empty.
73      */
74     @Override
75     public boolean isEmpty() {
76         return nbRows == 0 || nbCols == 0;
77     }
78
79     /**
80      * Check if the current data doesn't have an imaginary part.
81      *
82      * @return true, if the data are real only.
83      */
84     @Override
85     public boolean isReal() {
86         return imaginaryBuffer == null || imaginaryBuffer.capacity() == 0;
87     }
88
89     /**
90      * {@inheritDoc}
91      */
92     @Override
93     public Object getRawRealPart() {
94         return realBuffer;
95     }
96
97     /**
98      * {@inheritDoc}
99      */
100     @Override
101     public Object getRawImaginaryPart() {
102         return imaginaryBuffer;
103     }
104
105     /**
106      * Get the real part as DoubleBuffer
107      * @return the real part
108      */
109     public DoubleBuffer getRealBuffer() {
110         return realBuffer;
111     }
112
113     /**
114      * Get the imaginary part as DoubleBuffer
115      * @return the imaginary part
116      */
117     public DoubleBuffer getImaginaryBuffer() {
118         return imaginaryBuffer;
119     }
120
121     /**
122      * Get the real part of the data.
123      *
124      * @return the real part.
125      */
126     @Override
127     public double[][] getRealPart() {
128         double[][] d = new double[nbRows][nbCols];
129         ScilabTypeUtils.setBuffer(d, realBuffer);
130         return d;
131     }
132
133     /**
134      * Set the real part of the data.
135      *
136      * @param realPart
137      *            the real part.
138      */
139     @Override
140     public void setRealPart(double[][] realPart) {
141         ScilabTypeUtils.setPart(realBuffer, realPart);
142     }
143
144     /**
145      * Get the imaginary part of the data.
146      *
147      * @return the imaginary part.
148      */
149     @Override
150     public double[][] getImaginaryPart() {
151         double[][] d = new double[nbRows][nbCols];
152         ScilabTypeUtils.setBuffer(d, imaginaryBuffer);
153         return d;
154     }
155
156     /**
157      * Set the imaginary part of the data.
158      *
159      * @param imaginaryPart
160      *            the imaginary part.
161      */
162     @Override
163     public void setImaginaryPart(double[][] imaginaryPart) {
164         ScilabTypeUtils.setPart(imaginaryBuffer, imaginaryPart);
165     }
166
167     /**
168      * {@inheritDoc}
169      */
170     @Override
171     public double getRealElement(final int i, final int j) {
172         return realBuffer.get(i + nbRows * j);
173     }
174
175     /**
176      * {@inheritDoc}
177      */
178     @Override
179     public double getImaginaryElement(final int i, final int j) {
180         return imaginaryBuffer.get(i + nbRows * j);
181     }
182
183     /**
184      * {@inheritDoc}
185      */
186     @Override
187     public void setRealElement(final int i, final int j, final double x) {
188         realBuffer.put(i + nbRows * j, x);
189     }
190
191     /**
192      * {@inheritDoc}
193      */
194     @Override
195     public void setImaginaryElement(final int i, final int j, final double x) {
196         imaginaryBuffer.put(i + nbRows * j, x);
197     }
198
199     /**
200      * {@inheritDoc}
201      */
202     @Override
203     public void setElement(final int i, final int j, final double x, final double y) {
204         realBuffer.put(i + nbRows * j, x);
205         imaginaryBuffer.put(i + nbRows * j, x);
206     }
207
208     /**
209      * When this object is deserialized we want a ScilabDouble, not a ScilabDoubleReference.
210      * @return a ScilabDouble
211      */
212     private Object readResolve() throws ObjectStreamException {
213         return new ScilabDouble(varName, realPart, imaginaryPart, swaped);
214     }
215
216     @Override
217     public int getHeight() {
218         return nbRows;
219     }
220
221     @Override
222     public int getWidth() {
223         return nbCols;
224     }
225 }