3727c53e0fc8cce01f1020ff7e7a66a900713457
[scilab.git] / scilab / modules / types / src / java / org / scilab / modules / types / ScilabBoolean.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;
15
16 import java.util.Arrays;
17
18 /**
19  * This class provides a representation on the Scilab boolean datatype<br />
20  * <br>
21  * Example:<br />
22  * <code>
23  * boolean [][]a={{true,false,true}, {true,true,true}};<br />
24  * ScilabBoolean aMatrix = new ScilabBoolean(a);
25  * </code>
26  * @see org.scilab.modules.javasci.Scilab
27  */
28 public class ScilabBoolean implements ScilabType {
29
30         private static final long serialVersionUID = 6511497080095473901L;
31
32         /* the boolean data */
33         private boolean[][] data;
34
35         /**
36          * Create an empty object
37          */
38         public ScilabBoolean() {
39                 data = null;
40         }
41         
42         /**
43          * Create an object from an array of array of boolean
44          *
45          * @param data the array of boolean
46          */
47         public ScilabBoolean(boolean[][] data) {
48                 this.data = data;
49         }
50         
51         /**
52          * Create a scalar boolean from a boolean
53          *
54          * @param value the boolean
55          */
56         public ScilabBoolean(boolean value) {
57                 this.data = new boolean[1][1];
58                 this.data[0][0] = value;
59         }
60
61         /**
62          * Change the value with the provided data
63          *
64          * @param data array of boolean
65          */
66         public void setData(boolean[][] data) {
67                 this.data = data;
68         }
69
70         /**
71          * Return the data
72          *
73          * @return the array of array of boolean
74          */
75         public boolean[][] getData() {
76                 return data;
77         }
78
79         /**
80          * Return the height (number of element) of the stored data
81          *
82          * @return the height
83          */
84         public int getHeight() {
85                 if (data == null) {
86                         return 0;
87                 }
88                 return data.length;
89         }
90
91         /**
92          * Return the width (number of element) of the stored data
93          *
94          * @return the width
95          */
96         public int getWidth() {
97                 if (data == null) {
98                         return 0;
99                 }
100                 return data[0].length;
101         }
102
103         /**
104          * If it is empty / uninitialized
105          *
106          * @return true if empty
107          */
108         public boolean isEmpty() {
109                 return (data == null);
110         }
111         
112
113         /**
114          * @see org.scilab.modules.types.ScilabType#equals(Object)
115          */
116         public boolean equals(Object obj) {
117                 if (obj instanceof ScilabBoolean) {
118                         return Arrays.deepEquals(this.getData(), ((ScilabBoolean)obj).getData());
119                 } else {
120                         return false;
121                 }
122         }
123
124         /**
125          * Display the representation in the Scilab language of the type<br />
126          * Note that the representation can be copied/pasted straight into Scilab 
127      *
128          * @return the pretty print
129          */
130         public String toString() {
131                 StringBuilder result = new StringBuilder();
132                 
133                 if (isEmpty()) {
134                         result.append("[]");
135                         return result.toString();
136                 }
137
138                 result.append("[");
139                 for (int i = 0; i < getHeight(); ++i) {
140                         for (int j = 0; j < getWidth(); ++j) {
141                                 if (getData()[i][j]) {
142                                         result.append("%t");
143                                 } else {
144                                         result.append("%f");
145                                 }
146                                 if (j != getWidth() - 1) {
147                                         result.append(", ");
148                                 }
149                         }
150                         if (i != getHeight() - 1) {
151                                 result.append(" ; ");
152                         }
153                 }
154                 result.append("]");
155                 return result.toString();
156         }
157 }