blob: 2090d78599535ce3479a47f1898a8eebeb3f4f51 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
part of zircon;
@pragma('vm:entry-point')
class ZDHandle {
@pragma('vm:entry-point')
ZDHandle._(this._ptr) {
_attachFinalizer();
}
void _attachFinalizer() {
// TODO (kaushikiska): fix external allocation size.
final int? ret = zirconFFIBindings?.zircon_dart_handle_attach_finalizer(
this, _ptr.cast(), 128);
if (ret != 1) {
throw Exception('Unable to attach finalizer to handle');
}
}
int get handle => _ptr.ref.handle;
final Pointer<zircon_dart_handle_t> _ptr;
bool isValid() {
int? ret = zirconFFIBindings?.zircon_dart_handle_is_valid(_ptr);
return ret == 1;
}
bool close() {
assert(isValid());
if (isValid()) {
int? ret = zirconFFIBindings?.zircon_dart_handle_close(_ptr);
return ret == 1;
}
return false;
}
@override
bool operator ==(Object other) {
return other is ZDHandle && other.handle == handle;
}
@override
int get hashCode => handle.hashCode;
@override
String toString() => 'ZDHandle(handle=$handle)';
}
@pragma('vm:entry-point')
class ZDHandlePair {
@pragma('vm:entry-point')
ZDHandlePair._(this._ptr)
: left = ZDHandle._(_ptr.ref.left),
right = ZDHandle._(_ptr.ref.right) {
_attachFinalizer();
}
void _attachFinalizer() {
// TODO (kaushikiska): fix external allocation size.
final int? ret = zirconFFIBindings
?.zircon_dart_handle_pair_attach_finalizer(this, _ptr.cast(), 128);
if (ret != 1) {
throw Exception('Unable to attach finalizer to handle');
}
}
final Pointer<zircon_dart_handle_pair_t> _ptr;
final ZDHandle left;
final ZDHandle right;
@override
String toString() => 'ZDHandlePair(left=$left, right=$right)';
}