blob: f614d9b87a677012abcefdef505471f7c29126a1 [file] [log] [blame] [edit]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// ignore_for_file: unnecessary_cast, overridden_fields
import 'dart:ffi';
import 'dart:typed_data';
import 'package:ffi/ffi.dart';
import 'package:meta/meta.dart' show internal;
import 'jni.dart';
import 'jobject.dart';
import 'jreference.dart';
import 'third_party/generated_bindings.dart';
import 'types.dart';
@internal
final class $JArray$NullableType$<E extends JObject?>
extends JType<JArray<E>?> {
final JType<E> elementType;
const $JArray$NullableType$(this.elementType);
@override
String get signature => '[${elementType.signature}';
@override
JArray<E>? fromReference(JReference reference) =>
reference.isNull ? null : JArray<E>.fromReference(elementType, reference);
@override
JType get superType => const $JObject$NullableType$();
@override
JType<JArray<E>?> get nullableType => this;
@override
final int superCount = 1;
@override
int get hashCode => Object.hash($JArray$NullableType$, elementType);
@override
bool operator ==(Object other) {
return other.runtimeType == ($JArray$NullableType$<E>) &&
other is $JArray$NullableType$<E> &&
elementType == other.elementType;
}
}
@internal
final class $JArray$Type$<E extends JObject?> extends JType<JArray<E>> {
final JType<E> elementType;
const $JArray$Type$(this.elementType);
@override
String get signature => '[${elementType.signature}';
@override
JArray<E> fromReference(JReference reference) =>
JArray<E>.fromReference(elementType, reference);
@override
JType get superType => const $JObject$Type$();
@override
JType<JArray<E>?> get nullableType => $JArray$NullableType$<E>(elementType);
@override
final int superCount = 1;
@override
int get hashCode => Object.hash($JArray$Type$, elementType);
@override
bool operator ==(Object other) {
return other.runtimeType == ($JArray$Type$<E>) &&
other is $JArray$Type$<E> &&
elementType == other.elementType;
}
}
class JArray<E extends JObject?> extends JObject with Iterable<E> {
final JType<E> elementType;
@internal
@override
final JType<JArray<E>> $type;
/// The type which includes information such as the signature of this class.
static JType<JArray<E>> type<E extends JObject?>(JType<E> innerType) =>
$JArray$Type$<E>(innerType);
/// The type which includes information such as the signature of this class.
static JType<JArray<E>?> nullableType<E extends JObject?>(
JType<E> innerType) =>
$JArray$NullableType$<E>(innerType);
/// Construct a new [JArray] with [reference] as its underlying reference.
JArray.fromReference(this.elementType, JReference reference)
: $type = type<E>(elementType),
super.fromReference(reference);
/// Creates a [JArray] of the given length from the given [elementType].
///
/// The [length] must be a non-negative integer.
/// For objects, [elementType] must be a nullable type as this constructor
/// initializes all elements with `null`.
factory JArray(JType<E> elementType, int length) {
RangeError.checkNotNegative(length);
if (!elementType.isNullable) {
throw ArgumentError.value(
elementType,
'elementType',
'Element type of JArray must be nullable when constructed with a '
'length (because the elements will be initialized to null).\n\n'
'Try using .nullableType instead');
}
return _newArray<E>(elementType, length);
}
static JArray<$E> _newArray<$E extends JObject?>(
JType<$E> elementType, int length,
[$E? fill]) {
final classRef = elementType.jClass.reference;
final fillRef = fill?.reference ?? jNullReference;
final array = JArray<$E>.fromReference(
elementType,
JGlobalReference(Jni.env.NewObjectArray(
length,
classRef.pointer,
fillRef.pointer,
)),
);
classRef.release();
return array;
}
/// Creates a [JArray] of the given length with [fill] at each position.
///
/// The [length] must be a non-negative integer.
static JArray<$E> filled<$E extends JObject>(int length, $E fill,
{JType<$E>? E}) {
RangeError.checkNotNegative(length);
E ??= fill.$type as JType<$E>;
return _newArray<$E>(E, length, fill);
}
/// Creates a [JArray] from `elements`.
static JArray<$E> of<$E extends JObject?>(
JType<$E> elementType, Iterable<$E> elements) {
return _newArray<$E>(elementType, elements.length)
..setRange(0, elements.length, elements);
}
/// The number of elements in this array.
@override
late final length = Jni.env.GetArrayLength(reference.pointer);
@override
E elementAt(int index) {
RangeError.checkValidIndex(index, this);
final pointer = Jni.env.GetObjectArrayElement(reference.pointer, index);
if (pointer == nullptr) {
return null as E;
}
return (elementType as JType<E>).fromReference(JGlobalReference(pointer));
}
E operator [](int index) {
return elementAt(index);
}
void operator []=(int index, E value) {
RangeError.checkValidIndex(index, this);
final valueRef = value?.reference ?? jNullReference;
Jni.env.SetObjectArrayElement(reference.pointer, index, valueRef.pointer);
}
void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
final it = iterable.skip(skipCount).take(rangeLength);
for (final (index, element) in it.indexed) {
this[index] = element;
}
}
@override
Iterator<E> get iterator => _JArrayIterator(this);
}
class _JArrayIterator<E> implements Iterator<E> {
final Iterable<E> _iterable;
final int _length;
int _index;
E? _current;
_JArrayIterator(Iterable<E> iterable)
: _iterable = iterable,
_length = iterable.length,
_index = 0;
@override
E get current => _current as E;
@override
@pragma('vm:prefer-inline')
bool moveNext() {
final length = _iterable.length;
if (_length != length) {
throw ConcurrentModificationError(_iterable);
}
if (_index >= length) {
_current = null;
return false;
}
_current = _iterable.elementAt(_index);
_index++;
return true;
}
}
void _allocate<T extends NativeType>(
int byteCount,
void Function(Pointer<T> ptr) use,
) {
using((arena) {
final ptr = arena.allocate<T>(byteCount);
use(ptr);
}, malloc);
}
extension on Allocator {
Pointer<NativeFinalizerFunction>? get _nativeFree {
return switch (this) {
malloc => malloc.nativeFree,
calloc => calloc.nativeFree,
_ => null,
};
}
}
@internal
final class $JBooleanArray$NullableType$ extends JType<JBooleanArray?> {
const $JBooleanArray$NullableType$();
@override
String get signature => '[Z';
@override
JBooleanArray? fromReference(JReference reference) =>
reference.isNull ? null : JBooleanArray.fromReference(reference);
@override
JType get superType => const $JObject$NullableType$();
@override
JType<JBooleanArray?> get nullableType => this;
@override
final int superCount = 1;
@override
int get hashCode => ($JBooleanArray$NullableType$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JBooleanArray$NullableType$ &&
other is $JBooleanArray$NullableType$;
}
}
@internal
final class $JBooleanArray$Type$ extends JType<JBooleanArray> {
const $JBooleanArray$Type$();
@override
String get signature => '[Z';
@override
JBooleanArray fromReference(JReference reference) =>
JBooleanArray.fromReference(reference);
@override
JType get superType => const $JObject$Type$();
@override
JType<JBooleanArray?> get nullableType =>
const $JBooleanArray$NullableType$();
@override
final int superCount = 1;
@override
int get hashCode => ($JBooleanArray$Type$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JBooleanArray$Type$ &&
other is $JBooleanArray$Type$;
}
}
class JBooleanArray extends JObject with Iterable<bool> {
@internal
@override
final JType<JBooleanArray> $type;
/// The type which includes information such as the signature of this class.
static const JType<JBooleanArray> type = $JBooleanArray$Type$();
/// The type which includes information such as the signature of this class.
static const JType<JBooleanArray?> nullableType =
$JBooleanArray$NullableType$();
/// Construct a new [JBooleanArray] with [reference] as its underlying
/// reference.
JBooleanArray.fromReference(super.reference)
: $type = type,
super.fromReference();
/// Creates a [JBooleanArray] of the given [length].
///
/// The [length] must be a non-negative integer.
factory JBooleanArray(int length) {
RangeError.checkNotNegative(length);
return JBooleanArray.fromReference(
JGlobalReference(Jni.env.NewBooleanArray(length)),
);
}
/// The number of elements in this array.
@override
late final length = Jni.env.GetArrayLength(reference.pointer);
@override
bool elementAt(int index) {
RangeError.checkValidIndex(index, this);
return Jni.env.GetBooleanArrayElement(reference.pointer, index);
}
bool operator [](int index) {
return elementAt(index);
}
void operator []=(int index, bool value) {
RangeError.checkValidIndex(index, this);
Jni.env.SetBooleanArrayElement(reference.pointer, index, value);
}
Uint8List getRange(int start, int end, {Allocator allocator = malloc}) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
final buffer = allocator<JBooleanMarker>(rangeLength);
Jni.env
.GetBooleanArrayRegion(reference.pointer, start, rangeLength, buffer);
return buffer.asTypedList(rangeLength, finalizer: allocator._nativeFree);
}
void setRange(int start, int end, Iterable<bool> iterable,
[int skipCount = 0]) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
_allocate<JBooleanMarker>(sizeOf<JBooleanMarker>() * rangeLength, (ptr) {
ptr
.asTypedList(rangeLength)
.setRange(0, rangeLength, iterable.map((e) => e ? 1 : 0), skipCount);
Jni.env.SetBooleanArrayRegion(reference.pointer, start, rangeLength, ptr);
});
}
@override
Iterator<bool> get iterator => _JArrayIterator(this);
}
@internal
final class $JByteArray$NullableType$ extends JType<JByteArray?> {
const $JByteArray$NullableType$();
@override
String get signature => '[B';
@override
JByteArray? fromReference(JReference reference) =>
reference.isNull ? null : JByteArray.fromReference(reference);
@override
JType get superType => const $JObject$NullableType$();
@override
JType<JByteArray?> get nullableType => this;
@override
final int superCount = 1;
@override
int get hashCode => ($JByteArray$NullableType$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JByteArray$NullableType$ &&
other is $JByteArray$NullableType$;
}
}
@internal
final class $JByteArray$Type$ extends JType<JByteArray> {
const $JByteArray$Type$();
@override
String get signature => '[B';
@override
JByteArray fromReference(JReference reference) =>
JByteArray.fromReference(reference);
@override
JType get superType => const $JObject$Type$();
@override
JType<JByteArray?> get nullableType => const $JByteArray$NullableType$();
@override
final int superCount = 1;
@override
int get hashCode => ($JByteArray$Type$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JByteArray$Type$ && other is $JByteArray$Type$;
}
}
/// A fixed-length array of Java [`Byte`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html).
///
/// Integers stored in the list are truncated to their low eight bits,
/// interpreted as a signed 8-bit two's complement integer with values in the
/// range -128 to +127.
///
/// Java equivalent of [Int8List].
class JByteArray extends JObject with Iterable<int> {
@internal
@override
final JType<JByteArray> $type;
/// The type which includes information such as the signature of this class.
static const JType<JByteArray> type = $JByteArray$Type$();
/// The type which includes information such as the signature of this class.
static const JType<JByteArray?> nullableType = $JByteArray$NullableType$();
/// Construct a new [JByteArray] with [reference] as its underlying
/// reference.
JByteArray.fromReference(super.reference)
: $type = type,
super.fromReference();
/// Creates a [JByteArray] containing all `elements`.
///
/// The [Iterator] of elements provides the order of the elements.
///
/// Elements outside of the range -128 to +127 are truncated to their low
/// eight bits and interpreted as signed 8-bit two's complement integers.
factory JByteArray.from(Iterable<int> elements) {
return JByteArray(elements.length)..setRange(0, elements.length, elements);
}
/// Creates a [JByteArray] of the given [length].
///
/// The [length] must be a non-negative integer.
factory JByteArray(int length) {
RangeError.checkNotNegative(length);
return JByteArray.fromReference(
JGlobalReference(Jni.env.NewByteArray(length)));
}
/// The number of elements in this array.
@override
late final length = Jni.env.GetArrayLength(reference.pointer);
@override
int elementAt(int index) {
RangeError.checkValidIndex(index, this);
return Jni.env.GetByteArrayElement(reference.pointer, index);
}
int operator [](int index) {
return elementAt(index);
}
void operator []=(int index, int value) {
RangeError.checkValidIndex(index, this);
Jni.env.SetByteArrayElement(reference.pointer, index, value);
}
Int8List getRange(int start, int end, {Allocator allocator = malloc}) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
final buffer = allocator<JByteMarker>(rangeLength);
Jni.env.GetByteArrayRegion(reference.pointer, start, rangeLength, buffer);
return buffer.asTypedList(rangeLength, finalizer: allocator._nativeFree);
}
void setRange(int start, int end, Iterable<int> iterable,
[int skipCount = 0]) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
_allocate<JByteMarker>(sizeOf<JByteMarker>() * rangeLength, (ptr) {
ptr
.asTypedList(rangeLength)
.setRange(0, rangeLength, iterable, skipCount);
Jni.env.SetByteArrayRegion(reference.pointer, start, rangeLength, ptr);
});
}
@override
Iterator<int> get iterator => _JArrayIterator(this);
}
@internal
final class $JCharArray$NullableType$ extends JType<JCharArray?> {
const $JCharArray$NullableType$();
@override
String get signature => '[C';
@override
JCharArray? fromReference(JReference reference) =>
reference.isNull ? null : JCharArray.fromReference(reference);
@override
JType get superType => const $JObject$NullableType$();
@override
JType<JCharArray?> get nullableType => this;
@override
final int superCount = 1;
@override
int get hashCode => ($JCharArray$NullableType$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JCharArray$NullableType$ &&
other is $JCharArray$NullableType$;
}
}
@internal
final class $JCharArray$Type$ extends JType<JCharArray> {
const $JCharArray$Type$();
@override
String get signature => '[C';
@override
JCharArray fromReference(JReference reference) =>
JCharArray.fromReference(reference);
@override
JType get superType => const $JObject$Type$();
@override
JType<JCharArray?> get nullableType => const $JCharArray$NullableType$();
@override
final int superCount = 1;
@override
int get hashCode => ($JCharArray$Type$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JCharArray$Type$ && other is $JCharArray$Type$;
}
}
/// `JCharArray` is a 16-bit integer array.
///
/// Due to variable length encoding, the number of code units is not equal to
/// the number of characters.
class JCharArray extends JObject with Iterable<int> {
@internal
@override
final JType<JCharArray> $type;
/// The type which includes information such as the signature of this class.
static const JType<JCharArray> type = $JCharArray$Type$();
/// The type which includes information such as the signature of this class.
static const JType<JCharArray?> nullableType = $JCharArray$NullableType$();
/// Construct a new [JCharArray] with [reference] as its underlying
/// reference.
JCharArray.fromReference(super.reference)
: $type = type,
super.fromReference();
/// Creates a [JCharArray] of the given [length].
///
/// The [length] must be a non-negative integer.
factory JCharArray(int length) {
RangeError.checkNotNegative(length);
return JCharArray.fromReference(
JGlobalReference(Jni.env.NewCharArray(length)));
}
/// The number of elements in this array.
@override
late final length = Jni.env.GetArrayLength(reference.pointer);
@override
int elementAt(int index) {
RangeError.checkValidIndex(index, this);
return Jni.env.GetCharArrayElement(reference.pointer, index);
}
int operator [](int index) {
return elementAt(index);
}
void operator []=(int index, int value) {
RangeError.checkValidIndex(index, this);
Jni.env.SetCharArrayElement(reference.pointer, index, value);
}
Uint16List getRange(int start, int end, {Allocator allocator = malloc}) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
final buffer = allocator<JCharMarker>(rangeLength);
Jni.env.GetCharArrayRegion(reference.pointer, start, rangeLength, buffer);
return buffer.asTypedList(rangeLength, finalizer: allocator._nativeFree);
}
void setRange(int start, int end, Iterable<int> iterable,
[int skipCount = 0]) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
_allocate<JCharMarker>(sizeOf<JCharMarker>() * rangeLength, (ptr) {
ptr
.asTypedList(rangeLength)
.setRange(0, rangeLength, iterable, skipCount);
Jni.env.SetCharArrayRegion(reference.pointer, start, rangeLength, ptr);
});
}
@override
Iterator<int> get iterator => _JArrayIterator(this);
}
@internal
final class $JShortArray$NullableType$ extends JType<JShortArray?> {
const $JShortArray$NullableType$();
@override
String get signature => '[S';
@override
JShortArray? fromReference(JReference reference) =>
reference.isNull ? null : JShortArray.fromReference(reference);
@override
JType get superType => const $JObject$NullableType$();
@override
JType<JShortArray?> get nullableType => this;
@override
final int superCount = 1;
@override
int get hashCode => ($JShortArray$NullableType$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JShortArray$NullableType$ &&
other is $JShortArray$NullableType$;
}
}
@internal
final class $JShortArray$Type$ extends JType<JShortArray> {
const $JShortArray$Type$();
@override
String get signature => '[S';
@override
JShortArray fromReference(JReference reference) =>
JShortArray.fromReference(reference);
@override
JType get superType => const $JObject$Type$();
@override
JType<JShortArray?> get nullableType => const $JShortArray$NullableType$();
@override
final int superCount = 1;
@override
int get hashCode => ($JShortArray$Type$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JShortArray$Type$ &&
other is $JShortArray$Type$;
}
}
class JShortArray extends JObject with Iterable<int> {
@internal
@override
final JType<JShortArray> $type;
/// The type which includes information such as the signature of this class.
static const JType<JShortArray> type = $JShortArray$Type$();
/// The type which includes information such as the signature of this class.
static const JType<JShortArray?> nullableType = $JShortArray$NullableType$();
/// Construct a new [JShortArray] with [reference] as its underlying
/// reference.
JShortArray.fromReference(super.reference)
: $type = type,
super.fromReference();
/// Creates a [JShortArray] of the given [length].
///
/// The [length] must be a non-negative integer.
factory JShortArray(int length) {
RangeError.checkNotNegative(length);
return JShortArray.fromReference(
JGlobalReference(Jni.env.NewShortArray(length)));
}
/// The number of elements in this array.
@override
late final length = Jni.env.GetArrayLength(reference.pointer);
@override
int elementAt(int index) {
RangeError.checkValidIndex(index, this);
return Jni.env.GetShortArrayElement(reference.pointer, index);
}
int operator [](int index) {
return elementAt(index);
}
void operator []=(int index, int value) {
RangeError.checkValidIndex(index, this);
Jni.env.SetShortArrayElement(reference.pointer, index, value);
}
Int16List getRange(int start, int end, {Allocator allocator = malloc}) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
final buffer = allocator<JShortMarker>(rangeLength);
Jni.env.GetShortArrayRegion(reference.pointer, start, rangeLength, buffer);
return buffer.asTypedList(rangeLength, finalizer: allocator._nativeFree);
}
void setRange(int start, int end, Iterable<int> iterable,
[int skipCount = 0]) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
_allocate<JShortMarker>(sizeOf<JShortMarker>() * rangeLength, (ptr) {
ptr
.asTypedList(rangeLength)
.setRange(0, rangeLength, iterable, skipCount);
Jni.env.SetShortArrayRegion(reference.pointer, start, rangeLength, ptr);
});
}
@override
Iterator<int> get iterator => _JArrayIterator(this);
}
@internal
final class $JIntArray$NullableType$ extends JType<JIntArray?> {
const $JIntArray$NullableType$();
@override
String get signature => '[I';
@override
JIntArray? fromReference(JReference reference) =>
reference.isNull ? null : JIntArray.fromReference(reference);
@override
JType get superType => const $JObject$NullableType$();
@override
JType<JIntArray?> get nullableType => this;
@override
final int superCount = 1;
@override
int get hashCode => ($JIntArray$NullableType$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JIntArray$NullableType$ &&
other is $JIntArray$NullableType$;
}
}
@internal
final class $JIntArray$Type$ extends JType<JIntArray> {
const $JIntArray$Type$();
@override
String get signature => '[I';
@override
JIntArray fromReference(JReference reference) =>
JIntArray.fromReference(reference);
@override
JType get superType => const $JObject$Type$();
@override
JType<JIntArray?> get nullableType => const $JIntArray$NullableType$();
@override
final int superCount = 1;
@override
int get hashCode => ($JIntArray$Type$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JIntArray$Type$ && other is $JIntArray$Type$;
}
}
class JIntArray extends JObject with Iterable<int> {
@internal
@override
final JType<JIntArray> $type;
/// The type which includes information such as the signature of this class.
static const JType<JIntArray> type = $JIntArray$Type$();
/// The type which includes information such as the signature of this class.
static const JType<JIntArray?> nullableType = $JIntArray$NullableType$();
/// Construct a new [JIntArray] with [reference] as its underlying
/// reference.
JIntArray.fromReference(super.reference)
: $type = type,
super.fromReference();
/// Creates a [JIntArray] of the given [length].
///
/// The [length] must be a non-negative integer.
factory JIntArray(int length) {
RangeError.checkNotNegative(length);
return JIntArray.fromReference(
JGlobalReference(Jni.env.NewIntArray(length)));
}
/// The number of elements in this array.
@override
late final length = Jni.env.GetArrayLength(reference.pointer);
@override
int elementAt(int index) {
RangeError.checkValidIndex(index, this);
return Jni.env.GetIntArrayElement(reference.pointer, index);
}
int operator [](int index) {
return elementAt(index);
}
void operator []=(int index, int value) {
RangeError.checkValidIndex(index, this);
Jni.env.SetIntArrayElement(reference.pointer, index, value);
}
Int32List getRange(int start, int end, {Allocator allocator = malloc}) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
final buffer = allocator<JIntMarker>(rangeLength);
Jni.env.GetIntArrayRegion(reference.pointer, start, rangeLength, buffer);
return buffer.asTypedList(rangeLength, finalizer: allocator._nativeFree);
}
void setRange(int start, int end, Iterable<int> iterable,
[int skipCount = 0]) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
_allocate<JIntMarker>(sizeOf<JIntMarker>() * rangeLength, (ptr) {
ptr
.asTypedList(rangeLength)
.setRange(0, rangeLength, iterable, skipCount);
Jni.env.SetIntArrayRegion(reference.pointer, start, rangeLength, ptr);
});
}
@override
Iterator<int> get iterator => _JArrayIterator(this);
}
@internal
final class $JLongArray$NullableType$ extends JType<JLongArray?> {
const $JLongArray$NullableType$();
@override
String get signature => '[J';
@override
JLongArray? fromReference(JReference reference) =>
reference.isNull ? null : JLongArray.fromReference(reference);
@override
JType get superType => const $JObject$NullableType$();
@override
JType<JLongArray?> get nullableType => this;
@override
final int superCount = 1;
@override
int get hashCode => ($JLongArray$NullableType$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JLongArray$NullableType$ &&
other is $JLongArray$NullableType$;
}
}
@internal
final class $JLongArray$Type$ extends JType<JLongArray> {
const $JLongArray$Type$();
@override
String get signature => '[J';
@override
JLongArray fromReference(JReference reference) =>
JLongArray.fromReference(reference);
@override
JType get superType => const $JObject$Type$();
@override
JType<JLongArray?> get nullableType => const $JLongArray$NullableType$();
@override
final int superCount = 1;
@override
int get hashCode => ($JLongArray$Type$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JLongArray$Type$ && other is $JLongArray$Type$;
}
}
class JLongArray extends JObject with Iterable<int> {
@internal
@override
final JType<JLongArray> $type;
/// The type which includes information such as the signature of this class.
static const JType<JLongArray> type = $JLongArray$Type$();
/// The type which includes information such as the signature of this class.
static const JType<JLongArray?> nullableType = $JLongArray$NullableType$();
/// Construct a new [JLongArray] with [reference] as its underlying
/// reference.
JLongArray.fromReference(super.reference)
: $type = type,
super.fromReference();
/// Creates a [JLongArray] of the given [length].
///
/// The [length] must be a non-negative integer.
factory JLongArray(int length) {
RangeError.checkNotNegative(length);
return JLongArray.fromReference(
JGlobalReference(Jni.env.NewLongArray(length)));
}
/// The number of elements in this array.
@override
late final length = Jni.env.GetArrayLength(reference.pointer);
@override
int elementAt(int index) {
RangeError.checkValidIndex(index, this);
return Jni.env.GetLongArrayElement(reference.pointer, index);
}
int operator [](int index) {
return elementAt(index);
}
void operator []=(int index, int value) {
RangeError.checkValidIndex(index, this);
Jni.env.SetLongArrayElement(reference.pointer, index, value);
}
Int64List getRange(int start, int end, {Allocator allocator = malloc}) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
final buffer = allocator<JLongMarker>(rangeLength);
Jni.env.GetLongArrayRegion(reference.pointer, start, rangeLength, buffer);
return buffer.asTypedList(rangeLength, finalizer: allocator._nativeFree);
}
void setRange(int start, int end, Iterable<int> iterable,
[int skipCount = 0]) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
_allocate<JLongMarker>(sizeOf<JLongMarker>() * rangeLength, (ptr) {
ptr
.asTypedList(rangeLength)
.setRange(0, rangeLength, iterable, skipCount);
Jni.env.SetLongArrayRegion(reference.pointer, start, rangeLength, ptr);
});
}
@override
Iterator<int> get iterator => _JArrayIterator(this);
}
@internal
final class $JFloatArray$NullableType$ extends JType<JFloatArray?> {
const $JFloatArray$NullableType$();
@override
String get signature => '[F';
@override
JFloatArray? fromReference(JReference reference) =>
reference.isNull ? null : JFloatArray.fromReference(reference);
@override
JType get superType => const $JObject$NullableType$();
@override
JType<JFloatArray?> get nullableType => this;
@override
final int superCount = 1;
@override
int get hashCode => ($JFloatArray$NullableType$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JFloatArray$NullableType$ &&
other is $JFloatArray$NullableType$;
}
}
@internal
final class $JFloatArray$Type$ extends JType<JFloatArray> {
const $JFloatArray$Type$();
@override
String get signature => '[F';
@override
JFloatArray fromReference(JReference reference) =>
JFloatArray.fromReference(reference);
@override
JType get superType => const $JObject$Type$();
@override
JType<JFloatArray?> get nullableType => const $JFloatArray$NullableType$();
@override
final int superCount = 1;
@override
int get hashCode => ($JFloatArray$Type$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JFloatArray$Type$ &&
other is $JFloatArray$Type$;
}
}
class JFloatArray extends JObject with Iterable<double> {
@internal
@override
final JType<JFloatArray> $type;
/// The type which includes information such as the signature of this class.
static const JType<JFloatArray> type = $JFloatArray$Type$();
/// The type which includes information such as the signature of this class.
static const JType<JFloatArray?> nullableType = $JFloatArray$NullableType$();
/// Construct a new [JFloatArray] with [reference] as its underlying
/// reference.
JFloatArray.fromReference(super.reference)
: $type = type,
super.fromReference();
/// Creates a [JFloatArray] of the given [length].
///
/// The [length] must be a non-negative integer.
factory JFloatArray(int length) {
RangeError.checkNotNegative(length);
return JFloatArray.fromReference(
JGlobalReference(Jni.env.NewFloatArray(length)));
}
/// The number of elements in this array.
@override
late final length = Jni.env.GetArrayLength(reference.pointer);
@override
double elementAt(int index) {
RangeError.checkValidIndex(index, this);
return Jni.env.GetFloatArrayElement(reference.pointer, index);
}
double operator [](int index) {
return elementAt(index);
}
void operator []=(int index, double value) {
RangeError.checkValidIndex(index, this);
Jni.env.SetFloatArrayElement(reference.pointer, index, value);
}
Float32List getRange(int start, int end, {Allocator allocator = malloc}) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
final buffer = allocator<JFloatMarker>(rangeLength);
Jni.env.GetFloatArrayRegion(reference.pointer, start, rangeLength, buffer);
return buffer.asTypedList(rangeLength, finalizer: allocator._nativeFree);
}
void setRange(int start, int end, Iterable<double> iterable,
[int skipCount = 0]) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
_allocate<JFloatMarker>(sizeOf<JFloatMarker>() * rangeLength, (ptr) {
ptr
.asTypedList(rangeLength)
.setRange(0, rangeLength, iterable, skipCount);
Jni.env.SetFloatArrayRegion(reference.pointer, start, rangeLength, ptr);
});
}
@override
Iterator<double> get iterator => _JArrayIterator(this);
}
@internal
final class $JDoubleArray$NullableType$ extends JType<JDoubleArray?> {
const $JDoubleArray$NullableType$();
@override
String get signature => '[D';
@override
JDoubleArray? fromReference(JReference reference) =>
reference.isNull ? null : JDoubleArray.fromReference(reference);
@override
JType get superType => const $JObject$NullableType$();
@override
JType<JDoubleArray?> get nullableType => this;
@override
final int superCount = 1;
@override
int get hashCode => ($JDoubleArray$NullableType$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JDoubleArray$NullableType$ &&
other is $JDoubleArray$NullableType$;
}
}
@internal
final class $JDoubleArray$Type$ extends JType<JDoubleArray> {
const $JDoubleArray$Type$();
@override
String get signature => '[D';
@override
JDoubleArray fromReference(JReference reference) =>
JDoubleArray.fromReference(reference);
@override
JType get superType => const $JObject$Type$();
@override
JType<JDoubleArray?> get nullableType => const $JDoubleArray$NullableType$();
@override
final int superCount = 1;
@override
int get hashCode => ($JDoubleArray$Type$).hashCode;
@override
bool operator ==(Object other) {
return other.runtimeType == $JDoubleArray$Type$ &&
other is $JDoubleArray$Type$;
}
}
class JDoubleArray extends JObject with Iterable<double> {
@internal
@override
final JType<JDoubleArray> $type;
/// The type which includes information such as the signature of this class.
static const JType<JDoubleArray> type = $JDoubleArray$Type$();
/// The type which includes information such as the signature of this class.
static const JType<JDoubleArray?> nullableType =
$JDoubleArray$NullableType$();
/// Construct a new [JDoubleArray] with [reference] as its underlying
/// reference.
JDoubleArray.fromReference(super.reference)
: $type = type,
super.fromReference();
/// Creates a [JDoubleArray] of the given [length].
///
/// The [length] must be a non-negative integer.
factory JDoubleArray(int length) {
RangeError.checkNotNegative(length);
return JDoubleArray.fromReference(
JGlobalReference(Jni.env.NewDoubleArray(length)));
}
/// The number of elements in this array.
@override
late final length = Jni.env.GetArrayLength(reference.pointer);
@override
double elementAt(int index) {
RangeError.checkValidIndex(index, this);
return Jni.env.GetDoubleArrayElement(reference.pointer, index);
}
double operator [](int index) {
return elementAt(index);
}
void operator []=(int index, double value) {
RangeError.checkValidIndex(index, this);
Jni.env.SetDoubleArrayElement(reference.pointer, index, value);
}
Float64List getRange(int start, int end, {Allocator allocator = malloc}) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
final buffer = allocator<JDoubleMarker>(rangeLength);
Jni.env.GetDoubleArrayRegion(reference.pointer, start, rangeLength, buffer);
return buffer.asTypedList(rangeLength, finalizer: allocator._nativeFree);
}
void setRange(int start, int end, Iterable<double> iterable,
[int skipCount = 0]) {
RangeError.checkValidRange(start, end, length);
final rangeLength = end - start;
_allocate<JDoubleMarker>(sizeOf<JDoubleMarker>() * rangeLength, (ptr) {
ptr
.asTypedList(rangeLength)
.setRange(0, rangeLength, iterable, skipCount);
Jni.env.SetDoubleArrayRegion(reference.pointer, start, rangeLength, ptr);
});
}
@override
Iterator<double> get iterator => _JArrayIterator(this);
}