| // 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)'; |
| } |