#include "qemu/osdep.h"
#include "hw/core/stream.h"
#include "qemu/module.h"

size_t
stream_push(StreamSink *sink, uint8_t *buf, size_t len, bool eop)
{
    StreamSinkClass *k =  STREAM_SINK_GET_CLASS(sink);

    return k->push(sink, buf, len, eop);
}

bool
stream_can_push(StreamSink *sink, StreamCanPushNotifyFn notify,
                void *notify_opaque)
{
    StreamSinkClass *k =  STREAM_SINK_GET_CLASS(sink);

    return k->can_push ? k->can_push(sink, notify, notify_opaque) : true;
}

static const TypeInfo stream_sink_info = {
    .name          = TYPE_STREAM_SINK,
    .parent        = TYPE_INTERFACE,
    .class_size = sizeof(StreamSinkClass),
};


static void stream_sink_register_types(void)
{
    type_register_static(&stream_sink_info);
}

type_init(stream_sink_register_types)
