1b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi#pragma once
2b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi
3b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi#include <stdbool.h>
4b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi
5b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi/*
6b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi * Buffer abstract data type
7b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi */
815a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchistruct strbuf {
9b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi	char *bytes;
10b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi	unsigned size;
11b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi	unsigned used;
12b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi};
13b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi
1415a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchivoid strbuf_init(struct strbuf *buf);
1515a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchivoid strbuf_release(struct strbuf *buf);
1615a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchivoid strbuf_clear(struct strbuf *buf);
17b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi
18b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi/* Destroy buffer and return a copy as a C string */
1915a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchichar *strbuf_steal(struct strbuf *buf);
20b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi
21b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi/*
22b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi * Return a C string owned by the buffer invalidated if the buffer is
23b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi * changed).
24b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi */
2515a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchiconst char *strbuf_str(struct strbuf *buf);
26b4d1f44af16809e70ac5800c7539875832757679Lucas De Marchi
2715a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchibool strbuf_pushchar(struct strbuf *buf, char ch);
2815a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchiunsigned strbuf_pushchars(struct strbuf *buf, const char *str);
2915a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchivoid strbuf_popchar(struct strbuf *buf);
3015a7ae30b36a5a2d50e9b1bfadc30c766a874bffLucas De Marchivoid strbuf_popchars(struct strbuf *buf, unsigned n);
31