a1d82ca18ee74aa2ecee5c8ccb9e1d0b6b381f01
[scilab.git] / scilab / modules / types / src / java / org / scilab / modules / types / scilabTypes / ScilabDouble.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 - ClĂ©ment DAVID
5  * 
6  *  This file must be used under the terms of the CeCILL.
7  *  This source file is licensed as described in the file COPYING, which
8  *  you should have received as part of this distribution.  The terms
9  *  are also available at
10  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  * 
12  */
13
14 package org.scilab.modules.types.scilabTypes;
15
16 /**
17  * This class provides a wrapping on the Scilab Double datatype<br />
18  * Note that double is the default datatype in Scilab
19  */
20 public class ScilabDouble implements ScilabType {
21
22         private double[][] realPart;
23         private double[][] imaginaryPart;
24
25         /**
26          * Default constructor
27          */
28         public ScilabDouble() {
29                 realPart = null;
30                 imaginaryPart = null;
31         }
32
33         /**
34          * Constructor with a unique value.
35          * @param data the unique value
36          */
37         public ScilabDouble(double data) {
38                 realPart = new double[1][1];
39                 realPart[0][0] = data;
40                 imaginaryPart = null;
41         }
42
43         /**
44          * Constructor with a unique complex value.
45          * 
46          * @param realData the real part
47          * @param imagData the complex part 
48          */
49         public ScilabDouble(double realData, double imagData) {
50                 realPart = new double[1][1];
51                 realPart[0][0] = realData;
52                 imaginaryPart = new double[1][1];
53                 imaginaryPart[0][0] = imagData;
54         }
55
56         /**
57          * Constructor with a matrix of real data.
58          * 
59          * @param data the data
60          */
61         public ScilabDouble(double[][] data) {
62                 realPart = data;
63                 imaginaryPart = null;
64         }
65
66         /**
67          * Constructor with a matrix of complex numbers 
68          * 
69          * @param realData the real part of the data
70          * @param imagData the imaginary part of the data
71          */
72         public ScilabDouble(double[][] realData, double[][] imagData) {
73                 realPart = realData;
74                 imaginaryPart = imagData;
75         }
76
77         /**
78          * Check the emptiness of the associated data.
79          * @return true, if the associated data array is empty. 
80          */
81         public boolean isEmpty() {
82                 return (realPart == null && imaginaryPart == null);
83         }
84
85         /**
86          * Check if the current data doesn't have an imaginary part.
87          * 
88          * @return true, if the data are real only.
89          */
90         public boolean isReal() {
91                 return (imaginaryPart == null);
92         }
93
94         /**
95          * Get the real part of the data.
96          * 
97          * @return the real part.
98          */
99         public double[][] getRealPart() {
100                 return realPart;
101         }
102
103         /**
104          * Set the real part of the data.
105          * 
106          * @param realPart the real part.
107          */
108         public void setRealPart(double[][] realPart) {
109                 this.realPart = realPart;
110         }
111
112         /**
113          * Get the imaginary part of the data.
114          * 
115          * @return the imaginary part.
116          */
117         public double[][] getImaginaryPart() {
118                 return imaginaryPart;
119         }
120
121         /**
122          * Set the imaginary part of the data.
123          * 
124          * @param imaginaryPart the imaginary part.
125          */
126         public void setImaginaryPart(double[][] imaginaryPart) {
127                 this.imaginaryPart = imaginaryPart;
128         }
129
130         /**
131          * @return the height of the data matrix
132          * @see org.scilab.modules.types.scilabTypes.ScilabType#getHeight()
133          */
134         @Override
135         public int getHeight() {
136                 if (isEmpty()) {
137                         return 0;
138                 }
139                 return realPart.length;
140         }
141
142         /**
143          * @return the width of the data matrix
144          * @see org.scilab.modules.types.scilabTypes.ScilabType#getWidth()
145          */
146         @Override
147         public int getWidth() {
148                 if (isEmpty() || realPart.length  == 0) {
149                         return 0;
150                 }
151                 
152                 return realPart[0].length;
153         }
154
155         /**
156          * @return a Scilab-like String representation of the data.
157          * @see java.lang.Object#toString()
158          */
159         @Override
160         public String toString() {
161                 StringBuilder result = new StringBuilder();
162                 
163                 if (isEmpty()) {
164                         result.append("[]");
165                         return result.toString();
166                 }
167
168                 result.append("[");
169                 for (int i = 0; i < getHeight(); ++i) {
170                         for (int j = 0; j < getWidth(); ++j) {
171                                 if (isReal()) {
172                                         result.append(getRealPart()[i][j]);
173                                 } else {
174                                         result.append(getRealPart()[i][j] + " + " + getImaginaryPart()[i][j] + " %i");
175                                 }
176                                 if (j != getWidth() - 1) {
177                                         result.append(", ");
178                                 }
179                         }
180                         if (i != getHeight() - 1) {
181                                 result.append(" ; ");
182                         }
183                 }
184                 result.append("]");
185                 
186                 return result.toString();
187         }
188
189 }