blob: ca0605c1b841dc8e7711f95342777d115483ba30 [file] [log] [blame]
Andrew Scull18834872018-10-12 11:48:09 +01001/*
Andrew Walbran692b3252019-03-07 15:51:31 +00002 * Copyright 2018 The Hafnium Authors.
Andrew Scull18834872018-10-12 11:48:09 +01003 *
Andrew Walbrane959ec12020-06-17 15:01:09 +01004 * Use of this source code is governed by a BSD-style
5 * license that can be found in the LICENSE file or at
6 * https://opensource.org/licenses/BSD-3-Clause.
Andrew Scull18834872018-10-12 11:48:09 +01007 */
8
Andrew Scullfbc938a2018-08-20 14:09:28 +01009#pragma once
Wedson Almeida Filhofdf4afc2018-07-19 15:45:21 +010010
11#include <stdbool.h>
12#include <stddef.h>
13#include <stdint.h>
14
15struct memiter {
16 const char *next;
17 const char *limit;
18};
19
20void memiter_init(struct memiter *it, const void *data, size_t size);
21bool memiter_parse_uint(struct memiter *it, uint64_t *value);
22bool memiter_parse_str(struct memiter *it, struct memiter *str);
23bool memiter_iseq(const struct memiter *it, const char *str);
Wedson Almeida Filho9ee60e92018-07-23 18:56:56 +010024bool memiter_advance(struct memiter *it, size_t v);
David Brazdilb856be62020-03-25 10:14:55 +000025bool memiter_restrict(struct memiter *it, size_t v);
26bool memiter_consume(struct memiter *it, size_t v, struct memiter *newit);
David Brazdil7a462ec2019-08-15 12:27:47 +010027
David Brazdil74e9c3b2019-08-28 11:09:08 +010028const void *memiter_base(const struct memiter *it);
29size_t memiter_size(const struct memiter *it);