view src/ploki/list.h @ 12296:042127c1c142 draft

<fizzie> ` rm /hackenv/bin/bfi; ln -s /hackenv/lib/kps/bfi /hackenv/bin/bfi # no need for actual copies that you can forget to delete though
author HackEso <hackeso@esolangs.org>
date Sat, 04 Jan 2020 13:28:36 +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_ */