view src/ploki/list.h @ 11950:2b46edb21685 draft

<ais523> ` printf \'#include <stdio.h>\\nint main(void) { float C = 4.0; printf("%f", C/C++); }\' | gcc -Wall -Wextra -x c /dev/stdin
author HackEso <hackeso@esolangs.org>
date Thu, 19 Sep 2019 17:55:31 +0000
parents ac0403686959
children
line wrap: on
line source

#ifndef LIST_H_
#define LIST_H_

#include "config.h"

#include <stddef.h>

struct li_whale {
	struct val **field;
	size_t length, size;
	size_t refs;
};

struct list {
	struct li_whale *lwp;
	size_t offset, length;
};

struct list *li_new(void);
struct list *li_dup(const struct list *);
void li_decouple(struct list *);
void li_delete(struct list *);

ATTR_PURE
size_t li_length(const struct list *);
ATTR_PURE
struct val *li_at(const struct list *, size_t);
ATTR_PURE
int li_cmp(const struct list *, const struct list *);

void li_zero(struct list *);
void li_push(struct list *, struct val *);
void li_push_cpy(struct list *, const struct val *);
void li_append(struct list *, const struct list *);
void li_reverse(struct list *);
void li_trunc(struct list *, size_t);
void li_shift(struct list *, size_t);

#define li_length(l) ((l)->length + 0)
#define li_zero(l) ((void)(l->offset = l->length = 0))

#endif /* LIST_H_ */