view src/ploki/list.h @ 12254:616be78bd12e draft

<oerjan> revert
author HackEso <hackeso@esolangs.org>
date Fri, 06 Dec 2019 07:54:58 +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_ */