xref: /qemu/include/io/channel-buffer.h (revision e8f117f3b3eb41a766d38e0b765f89ec79c6a9ff)
1d98e4eb7SDaniel P. Berrange /*
2d98e4eb7SDaniel P. Berrange  * QEMU I/O channels memory buffer driver
3d98e4eb7SDaniel P. Berrange  *
4d98e4eb7SDaniel P. Berrange  * Copyright (c) 2015 Red Hat, Inc.
5d98e4eb7SDaniel P. Berrange  *
6d98e4eb7SDaniel P. Berrange  * This library is free software; you can redistribute it and/or
7d98e4eb7SDaniel P. Berrange  * modify it under the terms of the GNU Lesser General Public
8d98e4eb7SDaniel P. Berrange  * License as published by the Free Software Foundation; either
9d98e4eb7SDaniel P. Berrange  * version 2 of the License, or (at your option) any later version.
10d98e4eb7SDaniel P. Berrange  *
11d98e4eb7SDaniel P. Berrange  * This library is distributed in the hope that it will be useful,
12d98e4eb7SDaniel P. Berrange  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13d98e4eb7SDaniel P. Berrange  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14d98e4eb7SDaniel P. Berrange  * Lesser General Public License for more details.
15d98e4eb7SDaniel P. Berrange  *
16d98e4eb7SDaniel P. Berrange  * You should have received a copy of the GNU Lesser General Public
17d98e4eb7SDaniel P. Berrange  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18d98e4eb7SDaniel P. Berrange  *
19d98e4eb7SDaniel P. Berrange  */
20d98e4eb7SDaniel P. Berrange 
21d98e4eb7SDaniel P. Berrange #ifndef QIO_CHANNEL_BUFFER_H__
22d98e4eb7SDaniel P. Berrange #define QIO_CHANNEL_BUFFER_H__
23d98e4eb7SDaniel P. Berrange 
24d98e4eb7SDaniel P. Berrange #include "io/channel.h"
25d98e4eb7SDaniel P. Berrange 
26d98e4eb7SDaniel P. Berrange #define TYPE_QIO_CHANNEL_BUFFER "qio-channel-buffer"
27d98e4eb7SDaniel P. Berrange #define QIO_CHANNEL_BUFFER(obj)                                     \
28d98e4eb7SDaniel P. Berrange     OBJECT_CHECK(QIOChannelBuffer, (obj), TYPE_QIO_CHANNEL_BUFFER)
29d98e4eb7SDaniel P. Berrange 
30d98e4eb7SDaniel P. Berrange typedef struct QIOChannelBuffer QIOChannelBuffer;
31d98e4eb7SDaniel P. Berrange 
32d98e4eb7SDaniel P. Berrange /**
33d98e4eb7SDaniel P. Berrange  * QIOChannelBuffer:
34d98e4eb7SDaniel P. Berrange  *
35d98e4eb7SDaniel P. Berrange  * The QIOChannelBuffer object provides a channel implementation
36d98e4eb7SDaniel P. Berrange  * that is able to perform I/O to/from a memory buffer.
37d98e4eb7SDaniel P. Berrange  *
38d98e4eb7SDaniel P. Berrange  */
39d98e4eb7SDaniel P. Berrange 
40d98e4eb7SDaniel P. Berrange struct QIOChannelBuffer {
41d98e4eb7SDaniel P. Berrange     QIOChannel parent;
42d98e4eb7SDaniel P. Berrange     size_t capacity; /* Total allocated memory */
43d98e4eb7SDaniel P. Berrange     size_t usage;    /* Current size of data */
44d98e4eb7SDaniel P. Berrange     size_t offset;   /* Offset for future I/O ops */
45*e8f117f3SDaniel P. Berrange     uint8_t *data;
46d98e4eb7SDaniel P. Berrange };
47d98e4eb7SDaniel P. Berrange 
48d98e4eb7SDaniel P. Berrange 
49d98e4eb7SDaniel P. Berrange /**
50d98e4eb7SDaniel P. Berrange  * qio_channel_buffer_new:
51d98e4eb7SDaniel P. Berrange  * @capacity: the initial buffer capacity to allocate
52d98e4eb7SDaniel P. Berrange  *
53d98e4eb7SDaniel P. Berrange  * Allocate a new buffer which is initially empty
54d98e4eb7SDaniel P. Berrange  *
55d98e4eb7SDaniel P. Berrange  * Returns: the new channel object
56d98e4eb7SDaniel P. Berrange  */
57d98e4eb7SDaniel P. Berrange QIOChannelBuffer *
58d98e4eb7SDaniel P. Berrange qio_channel_buffer_new(size_t capacity);
59d98e4eb7SDaniel P. Berrange 
60d98e4eb7SDaniel P. Berrange #endif /* QIO_CHANNEL_BUFFER_H__ */
61