blob: c9248a15e8fb8ddfb2c5b06b2029a9c36cec0098 [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.
#ifndef SHELL_PLATFORM_FUCHSIA_DART_PKG_ZIRCON_FFI_HANDLE_H_
#define SHELL_PLATFORM_FUCHSIA_DART_PKG_ZIRCON_FFI_HANDLE_H_
#include "macros.h"
#include "include/dart_api_dl.h"
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct zircon_dart_handle_t {
uint32_t handle;
} zircon_dart_handle_t;
typedef struct zircon_dart_handle_pair_t {
zircon_dart_handle_t* left;
zircon_dart_handle_t* right;
} zircon_dart_handle_pair_t;
typedef struct zircon_dart_handle_list_t {
// data is of type `std::vector<zircon_handle_t*>*`.
void* data;
uint32_t size;
} zircon_dart_handle_list_t;
// Creates a list.
ZIRCON_FFI_EXPORT zircon_dart_handle_list_t* zircon_dart_handle_list_create();
// Appends to the list.
ZIRCON_FFI_EXPORT void zircon_dart_handle_list_append(
zircon_dart_handle_list_t* list,
zircon_dart_handle_t* handle);
// Frees the list, all the handles passed here must have been released.
ZIRCON_FFI_EXPORT void zircon_dart_handle_list_free(
zircon_dart_handle_list_t* list);
// Returns 1 if the handle is valid.
ZIRCON_FFI_EXPORT int32_t
zircon_dart_handle_is_valid(zircon_dart_handle_t* handle);
// Closes the handle, but doesn't release any ffi-associated memory. Returns 1
// on success.
ZIRCON_FFI_EXPORT int32_t
zircon_dart_handle_close(zircon_dart_handle_t* handle);
// Closes the zircon handle if valid and frees the memory.
ZIRCON_FFI_EXPORT void zircon_dart_handle_free(zircon_dart_handle_t* handle);
// Attach a finalizer for pointer to object, such that `finalizer(pointer)` will
// be called when `object` is collected by the Dart garbage collector.
//
// The external_allocation_size is used by the Dart garbage collector as a hint
// about the size of the external allocation.
//
// Returns 1 on success.
ZIRCON_FFI_EXPORT int zircon_dart_handle_pair_attach_finalizer(
Dart_Handle object,
void* pointer,
intptr_t external_allocation_size);
ZIRCON_FFI_EXPORT int zircon_dart_handle_attach_finalizer(
Dart_Handle object,
void* pointer,
intptr_t external_allocation_size);
// ZIRCON_FFI_EXPORT zircon_dart_handle_t* zircon_dart_duplicate_handle(
// zircon_dart_handle_t* handle,
// uint32_t rights);
#ifdef __cplusplus
}
#endif
#endif // SHELL_PLATFORM_FUCHSIA_DART_PKG_ZIRCON_FFI_HANDLE_H_