blob: e79c30bc7704656de82ff89b118d200609763c8c [file] [log] [blame]
// Copyright 2024 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef IREE_IO_VEC_STREAM_H_
#define IREE_IO_VEC_STREAM_H_
#include "iree/base/api.h"
#include "iree/io/stream.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
//===----------------------------------------------------------------------===//
// iree_io_vec_stream_t
//===----------------------------------------------------------------------===//
// Creates an in-memory stream that grows as data is written.
// Blocks of |block_size| (16-byte aligned) are allocated each time growth is
// required and writes will be split to fit into blocks. To retrieve the data
// from the stream use iree_io_vec_stream_enumerate_blocks or seek and read it
// back.
IREE_API_EXPORT iree_status_t iree_io_vec_stream_create(
iree_io_stream_mode_t mode, iree_host_size_t block_size,
iree_allocator_t host_allocator, iree_io_stream_t** out_stream);
// Called for each block in stream order. Blocks may be sized under the
// requested block size if they contain partial data.
typedef iree_status_t(IREE_API_PTR* iree_io_vec_stream_callback_fn_t)(
void* user_data, iree_const_byte_span_t block);
// Issues |callback| for each block of data in the stream.
IREE_API_EXPORT iree_status_t iree_io_vec_stream_enumerate_blocks(
iree_io_stream_t* stream, iree_io_vec_stream_callback_fn_t callback,
void* user_data);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif // IREE_IO_VEC_STREAM_H_