4
4
5
5
// ignore_for_file: unnecessary_cast, overridden_fields
6
6
7
- import 'dart:ffi' ;
8
- import 'dart:typed_data' ;
9
-
10
- import 'package:collection/collection.dart' ;
11
- import 'package:ffi/ffi.dart' ;
12
-
13
- import '../internal_helpers_for_jnigen.dart' ;
14
- import 'jni.dart' ;
15
- import 'jobject.dart' ;
16
- import 'third_party/generated_bindings.dart' ;
17
- import 'types.dart' ;
7
+ part of 'types.dart' ;
18
8
19
9
final class JArrayType <E > extends JObjType <JArray <E >> {
20
- final JType <E > elementType;
10
+ final JArrayElementType <E > elementType;
21
11
22
12
const JArrayType (this .elementType);
23
13
@@ -46,13 +36,13 @@ final class JArrayType<E> extends JObjType<JArray<E>> {
46
36
}
47
37
48
38
class JArray <E > extends JObject {
49
- final JType <E > elementType;
39
+ final JArrayElementType <E > elementType;
50
40
51
41
@override
52
42
late final JArrayType <E > $type = type (elementType) as JArrayType <E >;
53
43
54
44
/// The type which includes information such as the signature of this class.
55
- static JObjType <JArray <T >> type <T >(JType <T > innerType) =>
45
+ static JObjType <JArray <T >> type <T >(JArrayElementType <T > innerType) =>
56
46
JArrayType (innerType);
57
47
58
48
/// Construct a new [JArray] with [reference] as its underlying reference.
@@ -62,40 +52,8 @@ class JArray<E> extends JObject {
62
52
/// Creates a [JArray] of the given length from the given [elementType] .
63
53
///
64
54
/// The [length] must be a non-negative integer.
65
- factory JArray (JType <E > elementType, int length) {
66
- const primitiveCallTypes = {
67
- 'B' : JniCallType .byteType,
68
- 'Z' : JniCallType .booleanType,
69
- 'C' : JniCallType .charType,
70
- 'S' : JniCallType .shortType,
71
- 'I' : JniCallType .intType,
72
- 'J' : JniCallType .longType,
73
- 'F' : JniCallType .floatType,
74
- 'D' : JniCallType .doubleType,
75
- };
76
- if (! primitiveCallTypes.containsKey (elementType.signature) &&
77
- elementType is JObjType ) {
78
- final clazz = (elementType as JObjType ).jClass;
79
- final array = JArray <E >.fromReference (
80
- elementType,
81
- JGlobalReference (
82
- Jni .accessors
83
- .newObjectArray (length, clazz.reference.pointer, nullptr)
84
- .objectPointer,
85
- ),
86
- );
87
- clazz.release ();
88
- return array;
89
- }
90
- return JArray .fromReference (
91
- elementType,
92
- JGlobalReference (
93
- Jni .accessors
94
- .newPrimitiveArray (
95
- length, primitiveCallTypes[elementType.signature]! )
96
- .objectPointer,
97
- ),
98
- );
55
+ factory JArray (JArrayElementType <E > elementType, int length) {
56
+ return elementType._newArray (length);
99
57
}
100
58
101
59
/// Creates a [JArray] of the given length with [fill] at each position.
@@ -105,25 +63,11 @@ class JArray<E> extends JObject {
105
63
{JObjType <$E >? E }) {
106
64
RangeError .checkNotNegative (length);
107
65
E ?? = fill.$type as JObjType <$E >;
108
- final clazz = E .jClass;
109
- final array = JArray <$E >.fromReference (
110
- E ,
111
- JGlobalReference (Jni .accessors
112
- .newObjectArray (
113
- length, clazz.reference.pointer, fill.reference.pointer)
114
- .objectPointer),
115
- );
116
- clazz.release ();
117
- return array;
66
+ return E ._newArray (length, fill);
118
67
}
119
68
120
69
int ? _length;
121
70
122
- JniResult _elementAt (int index, int type) {
123
- RangeError .checkValidIndex (index, this );
124
- return Jni .accessors.getArrayElement (reference.pointer, index, type);
125
- }
126
-
127
71
/// The number of elements in this array.
128
72
int get length {
129
73
return _length ?? = Jni .env.GetArrayLength (reference.pointer);
@@ -154,13 +98,13 @@ extension on Allocator {
154
98
155
99
extension BoolArray on JArray <jboolean> {
156
100
bool operator [](int index) {
157
- return _elementAt (index, JniCallType .booleanType).boolean;
101
+ RangeError .checkValidIndex (index, this );
102
+ return Jni .env.GetBooleanArrayElement (reference.pointer, index);
158
103
}
159
104
160
105
void operator []= (int index, bool value) {
161
106
RangeError .checkValidIndex (index, this );
162
- Jni .accessors
163
- .setBooleanArrayElement (reference.pointer, index, value ? 1 : 0 );
107
+ Jni .env.SetBooleanArrayElement (reference.pointer, index, value);
164
108
}
165
109
166
110
Uint8List getRange (int start, int end, {Allocator allocator = malloc}) {
@@ -187,12 +131,13 @@ extension BoolArray on JArray<jboolean> {
187
131
188
132
extension ByteArray on JArray <jbyte> {
189
133
int operator [](int index) {
190
- return _elementAt (index, JniCallType .byteType).byte;
134
+ RangeError .checkValidIndex (index, this );
135
+ return Jni .env.GetByteArrayElement (reference.pointer, index);
191
136
}
192
137
193
138
void operator []= (int index, int value) {
194
139
RangeError .checkValidIndex (index, this );
195
- Jni .accessors. setByteArrayElement (reference.pointer, index, value). check ( );
140
+ Jni .env. SetByteArrayElement (reference.pointer, index, value);
196
141
}
197
142
198
143
Int8List getRange (int start, int end, {Allocator allocator = malloc}) {
@@ -222,12 +167,13 @@ extension ByteArray on JArray<jbyte> {
222
167
/// the number of characters.
223
168
extension CharArray on JArray <jchar> {
224
169
int operator [](int index) {
225
- return _elementAt (index, JniCallType .charType).char;
170
+ RangeError .checkValidIndex (index, this );
171
+ return Jni .env.GetCharArrayElement (reference.pointer, index);
226
172
}
227
173
228
174
void operator []= (int index, int value) {
229
175
RangeError .checkValidIndex (index, this );
230
- Jni .accessors. setCharArrayElement (reference.pointer, index, value). check ( );
176
+ Jni .env. SetCharArrayElement (reference.pointer, index, value);
231
177
}
232
178
233
179
Uint16List getRange (int start, int end, {Allocator allocator = malloc}) {
@@ -253,12 +199,13 @@ extension CharArray on JArray<jchar> {
253
199
254
200
extension ShortArray on JArray <jshort> {
255
201
int operator [](int index) {
256
- return _elementAt (index, JniCallType .shortType).short;
202
+ RangeError .checkValidIndex (index, this );
203
+ return Jni .env.GetShortArrayElement (reference.pointer, index);
257
204
}
258
205
259
206
void operator []= (int index, int value) {
260
207
RangeError .checkValidIndex (index, this );
261
- Jni .accessors. setShortArrayElement (reference.pointer, index, value). check ( );
208
+ Jni .env. SetShortArrayElement (reference.pointer, index, value);
262
209
}
263
210
264
211
Int16List getRange (int start, int end, {Allocator allocator = malloc}) {
@@ -284,12 +231,13 @@ extension ShortArray on JArray<jshort> {
284
231
285
232
extension IntArray on JArray <jint> {
286
233
int operator [](int index) {
287
- return _elementAt (index, JniCallType .intType).integer;
234
+ RangeError .checkValidIndex (index, this );
235
+ return Jni .env.GetIntArrayElement (reference.pointer, index);
288
236
}
289
237
290
238
void operator []= (int index, int value) {
291
239
RangeError .checkValidIndex (index, this );
292
- Jni .accessors. setIntArrayElement (reference.pointer, index, value). check ( );
240
+ Jni .env. SetIntArrayElement (reference.pointer, index, value);
293
241
}
294
242
295
243
Int32List getRange (int start, int end, {Allocator allocator = malloc}) {
@@ -315,12 +263,13 @@ extension IntArray on JArray<jint> {
315
263
316
264
extension LongArray on JArray <jlong> {
317
265
int operator [](int index) {
318
- return _elementAt (index, JniCallType .longType).long;
266
+ RangeError .checkValidIndex (index, this );
267
+ return Jni .env.GetLongArrayElement (reference.pointer, index);
319
268
}
320
269
321
270
void operator []= (int index, int value) {
322
271
RangeError .checkValidIndex (index, this );
323
- Jni .accessors. setLongArrayElement (reference.pointer, index, value). check ( );
272
+ Jni .env. SetLongArrayElement (reference.pointer, index, value);
324
273
}
325
274
326
275
Int64List getRange (int start, int end, {Allocator allocator = malloc}) {
@@ -346,12 +295,13 @@ extension LongArray on JArray<jlong> {
346
295
347
296
extension FloatArray on JArray <jfloat> {
348
297
double operator [](int index) {
349
- return _elementAt (index, JniCallType .floatType).float;
298
+ RangeError .checkValidIndex (index, this );
299
+ return Jni .env.GetFloatArrayElement (reference.pointer, index);
350
300
}
351
301
352
302
void operator []= (int index, double value) {
353
303
RangeError .checkValidIndex (index, this );
354
- Jni .accessors. setFloatArrayElement (reference.pointer, index, value). check ( );
304
+ Jni .env. SetFloatArrayElement (reference.pointer, index, value);
355
305
}
356
306
357
307
Float32List getRange (int start, int end, {Allocator allocator = malloc}) {
@@ -377,14 +327,13 @@ extension FloatArray on JArray<jfloat> {
377
327
378
328
extension DoubleArray on JArray <jdouble> {
379
329
double operator [](int index) {
380
- return _elementAt (index, JniCallType .doubleType).doubleFloat;
330
+ RangeError .checkValidIndex (index, this );
331
+ return Jni .env.GetDoubleArrayElement (reference.pointer, index);
381
332
}
382
333
383
334
void operator []= (int index, double value) {
384
335
RangeError .checkValidIndex (index, this );
385
- Jni .accessors
386
- .setDoubleArrayElement (reference.pointer, index, value)
387
- .check ();
336
+ Jni .env.SetDoubleArrayElement (reference.pointer, index, value);
388
337
}
389
338
390
339
Float64List getRange (int start, int end, {Allocator allocator = malloc}) {
@@ -410,8 +359,9 @@ extension DoubleArray on JArray<jdouble> {
410
359
411
360
extension ObjectArray <T extends JObject > on JArray <T > {
412
361
T operator [](int index) {
362
+ RangeError .checkValidIndex (index, this );
413
363
return (elementType as JObjType <T >).fromReference (JGlobalReference (
414
- _elementAt (index, JniCallType .objectType).objectPointer ));
364
+ Jni .env. GetObjectArrayElement (reference.pointer, index) ));
415
365
}
416
366
417
367
void operator []= (int index, T value) {
0 commit comments