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