blob: 3c6486998fac27bc891fc61e3d3fd682ea03870c [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
Wedson Almeida Filhofdf4afc2018-07-19 15:45:21 +010011#include <stddef.h>
12#include <stdint.h>
13
14struct memiter {
15 const char *next;
16 const char *limit;
17};
18
19void memiter_init(struct memiter *it, const void *data, size_t size);
20bool memiter_parse_uint(struct memiter *it, uint64_t *value);
21bool memiter_parse_str(struct memiter *it, struct memiter *str);
22bool memiter_iseq(const struct memiter *it, const char *str);
Wedson Almeida Filho9ee60e92018-07-23 18:56:56 +010023bool memiter_advance(struct memiter *it, size_t v);
David Brazdilb856be62020-03-25 10:14:55 +000024bool memiter_restrict(struct memiter *it, size_t v);
25bool memiter_consume(struct memiter *it, size_t v, struct memiter *newit);
David Brazdil7a462ec2019-08-15 12:27:47 +010026
David Brazdil74e9c3b2019-08-28 11:09:08 +010027const void *memiter_base(const struct memiter *it);
28size_t memiter_size(const struct memiter *it);