blob: b550d8616a64abd286f732437e1a1d74060dba84 [file] [log] [blame]
#ifndef __VM_STREAM_H
#define __VM_STREAM_H
#include <stdbool.h>
struct stream;
struct stream_operations {
unsigned char *(*new_position)(struct stream *stream);
};
struct stream {
unsigned char *start;
unsigned char *end;
unsigned char *current;
struct stream_operations *ops;
};
static inline void stream_init(struct stream *stream,
unsigned char *start,
unsigned long len,
struct stream_operations *ops)
{
stream->start = start;
stream->end = start + len;
stream->current = start;
stream->ops = ops;
}
static inline bool stream_has_more(struct stream *stream)
{
return stream->current != stream->end;
}
static inline void stream_advance(struct stream *stream)
{
stream->current = stream->ops->new_position(stream);
}
static inline unsigned long stream_offset(struct stream *stream)
{
return stream->current - stream->start;
}
#endif