1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # Basic Java collections
18 # var coll = new JavaArray(2)
20 # assert coll[0].is_java_null
21 # coll[0] = "zero".to_java_string
22 # coll[1] = "one".to_java_string
24 # assert coll.length == 2
25 # assert coll.first.to_s == "zero"
26 # assert coll[1].to_s == "one"
27 # assert [for e in coll do e.to_s] == ["zero", "one"]
33 # Java primitive array
35 # These have fixed size so they offer the same services as `SequenceRead` and
36 # `[]=`, but would not support `Sequence::add`.
37 extern class AbstractJavaArray[E
: Object]
41 # Set the `value` at `key`
42 fun []=(key
: Int, value
: E
) is abstract
44 redef fun iterator
do return new JavaArrayIterator[E
](self)
46 redef fun reverse_iterator
do return new JavaArrayReverseIterator[E
](self)
49 # Java primitive array `int[]`
50 extern class JavaIntArray in "Java" `{ int[] `}
51 super AbstractJavaArray[Int]
53 # Get a new array of the given `size
`
54 new (size: Int) in "Java" `{ return new int[(int)size]; `}
56 redef fun [](i
) in "Java" `{ return self[(int)i]; `}
58 redef fun []=(i, e) in "Java" `{ self[(int)i] = (int)e; `}
60 redef fun length
in "Java" `{ return self.length; `}
63 # Java primitive array `short
[]`
64 extern class JavaShortArray in "Java" `{ short[] `}
65 super AbstractJavaArray[Int]
67 # Get a new array of the given `size`
68 new (size
: Int) in "Java" `{ return new short[(int)size]; `}
70 redef fun [](i) in "Java" `{ return (short)self[(int)i]; `}
72 redef fun []=(i
, e
) in "Java" `{ self[(int)i] = (short)e; `}
74 redef fun length in "Java" `{ return self.length; `}
77 # Java primitive array `long[]`
78 extern class JavaLongArray in "Java" `{ long[] `}
79 super AbstractJavaArray[Int]
81 # Get a new array of the given `size
`
82 new (size: Int) in "Java" `{ return new long[(int)size]; `}
84 redef fun [](i
) in "Java" `{ return self[(int)i]; `}
86 redef fun []=(i, e) in "Java" `{ self[(int)i] = (long)e; `}
88 redef fun length
in "Java" `{ return self.length; `}
91 # Java primitive array `float
[]`
93 # Note that Nit `Float` is the size of a double, so storing them in a
94 # `JavaFloatArray` may lead to a loss of precision.
95 extern class JavaFloatArray in "Java" `{ float[] `}
96 super AbstractJavaArray[Float]
98 # Get a new array of the given `size`
99 new(size
: Int) in "Java" `{ return new float[(int)size]; `}
101 redef fun [](i) in "Java" `{ return (double)self[(int)i]; `}
103 redef fun []=(i
, e
) in "Java" `{ self[(int)i] = (float)e; `}
105 redef fun length in "Java" `{ return self.length; `}
108 # Java primitive array `double[]`
109 extern class JavaDoubleArray in "Java" `{ double[] `}
110 super AbstractJavaArray[Float]
112 # Get a new array of the given `size
`
113 new(size: Int) in "Java" `{ return new double[(int)size]; `}
115 redef fun [](i
) in "Java" `{ return self[(int)i]; `}
117 redef fun []=(i, e) in "Java" `{ self[(int)i] = (float)e; `}
119 redef fun length
in "Java" `{ return self.length; `}
122 # Java primitive array `Object[]`
123 extern class JavaArray in "Java" `{ java.lang.Object[] `}
124 super AbstractJavaArray[JavaObject]
126 # Get a new array of the given `size`
127 new(size
: Int) in "Java" `{ return new Object[(int)size]; `}
129 redef fun [](i) in "Java" `{ return self[(int)i]; `}
131 redef fun []=(i
, e
) in "Java" `{ self[(int)i] = e; `}
133 redef fun length in "Java" `{ return self.length; `}
136 # Java primitive array `boolean[]`
137 extern class JavaBoolArray in "Java" `{ boolean[] `}
138 super AbstractJavaArray[Bool]
140 # Get a new array of the given `size
`
141 new (size: Int) in "Java" `{ return new boolean[(int)size]; `}
143 redef fun [](i
) in "Java" `{ return self[(int)i]; `}
145 redef fun []=(i, e) in "Java" `{self[(int)i] = (boolean)e; `}
147 redef fun length
in "Java" `{ return self.length; `}
150 # Java primitive array `byte
[]`
151 extern class JavaByteArray in "Java" `{ byte[] `}
152 super AbstractJavaArray[Int]
154 # Get a new array of the given `size`
155 new (size
: Int) in "Java" `{ return new byte[(int)size]; `}
157 redef fun [](i) in "Java" `{ return (byte)self[(int)i]; `}
159 redef fun []=(i
, e
) in "Java" `{ self[(int)i] = (byte)e; `}
161 redef fun length in "Java" `{ return self.length; `}
164 # Java primitive array `char[]`
165 extern class JavaCharArray in "Java" `{ char[] `}
166 super AbstractJavaArray[Char]
168 # Get a new array of the given `size
`
169 new (size: Int) in "Java" `{ return new char[(int)size]; `}
171 redef fun [](i
) in "Java" `{ return (char)self[(int)i]; `}
173 redef fun []=(i, e) in "Java" `{ self[(int)i] = (char)e; `}
175 redef fun length
in "Java" `{ return self.length; `}
178 # An `Iterator` on Java primitive arrays
179 private class JavaArrayIterator[E: Object]
180 super IndexedIterator[E]
182 var array: AbstractJavaArray[E]
184 redef fun item do return array[index]
186 redef fun is_ok do return index < array.length
188 redef fun next do index += 1
193 # A reverse `Iterator` on Java primitive arrays
194 private class JavaArrayReverseIterator[E: Object]
195 super IndexedIterator[E]
197 var array: AbstractJavaArray[E]
199 redef fun item do return array[index]
201 redef fun is_ok do return index >= 0
203 redef fun next do index -= 1
205 redef var index = array.length - 1