File:  [ELWIX - Embedded LightWeight unIX -] / libelwix / example / test_lrbuf.c
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Tue Feb 10 17:50:00 2026 UTC (39 hours, 59 minutes ago) by misho
Branches: MAIN
CVS tags: elwix6_15, elwix6_14, HEAD, ELWIX6_14, ELWIX6_13
Version 6.13

Changelog:
 - Implements linear ring buffer

#include <stdio.h>
#include <stdlib.h>
#include <elwix.h>


int
main(int argc, char **argv)
{
	lrbuf_t lrb = { 0 };
	int res, len;
	char line[STRSIZ];

	res = lrb_init(&lrb, 32);
	printf("lrb_init(32) -> #%d\n", res);

	lrb_queued(&lrb, res);
	printf("lrb_queued -> #%d\n", res);
	lrb_unused(&lrb, res);
	printf("lrb_unused -> #%d\n", res);

	while (fgets(line, sizeof line - 1, stdin)) {
		if (!strcmp(line, ".\n"))
			break;
		printf("isempty() -> #%d\n", lrb_isempty(&lrb));
		printf("isfull() -> #%d\n", lrb_isfull(&lrb));

		lrb_queued(&lrb, res);
		printf("e1_lrb_queued -> #%d\n", res);
		lrb_unused(&lrb, res);
		printf("e1_lrb_unused -> #%d\n", res);
		res = lrb_enqueue(&lrb, line, strlen(line), argc > 1);
		printf("lrb_enqueue(%d, %d) -> #%d\n", strlen(line), argc > 1, res);
		lrb_queued(&lrb, res);
		printf("e2_lrb_queued -> #%d\n", res);
		lrb_unused(&lrb, res);
		printf("e2_lrb_unused -> #%d\n", res);
	}

	lrb_queued(&lrb, res);
	printf("lrb_queued -> #%d\n", res);
	lrb_unused(&lrb, res);
	printf("lrb_unused -> #%d\n", res);

	while (fgets(line, sizeof line - 1, stdin)) {
		if (!strcmp(line, ".\n"))
			break;
		printf("isempty() -> #%d\n", lrb_isempty(&lrb));
		printf("isfull() -> #%d\n", lrb_isfull(&lrb));

		lrb_queued(&lrb, res);
		printf("d1_lrb_queued -> #%d\n", res);
		lrb_unused(&lrb, res);
		printf("d1_lrb_unused -> #%d\n", res);
		len = strtol(line, NULL, 10);
		memset(line, 0, sizeof line);
		res = lrb_dequeue(&lrb, line, MIN(len, sizeof line));
		printf("lrb_dequeue(%d) -> #%d\n", len, res);
		printf("LINE='%s'\n", line);
		lrb_queued(&lrb, res);
		printf("d2_lrb_queued -> #%d\n", res);
		lrb_unused(&lrb, res);
		printf("d2_lrb_unused -> #%d\n", res);
	}

	lrb_queued(&lrb, res);
	printf("lrb_queued -> #%d\n", res);
	lrb_unused(&lrb, res);
	printf("lrb_unused -> #%d\n", res);

	res = lrb_dequeue(&lrb, NULL, 2);
	printf("lrb_dequeue(2) -> #%d\n", res);

	lrb_queued(&lrb, res);
	printf("lrb_queued -> #%d\n", res);
	lrb_unused(&lrb, res);
	printf("lrb_unused -> #%d\n", res);

	lrb_purge(&lrb);
	printf("isempty() -> #%d\n", lrb_isempty(&lrb));
	printf("isfull() -> #%d\n", lrb_isfull(&lrb));

	lrb_free(&lrb);
	printf("Done.\n");
	return 0;
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>