view src/ploki/list.h @ 8203:b0fcb29e2ce7

<b_jonas> learn Silent initial consonants in English are: write, wrong, wrist, wrap, wreck, wrest, wrestle, wriggle, wrinkle, wrath, wraith, wreath, wrangle, wren, wright, wrought, wring, writ, writhe, wry; know, knife, knock, knee, knight, knob, knot, knit, knack, knout, knuckle; psychology, psalm, pseudo, psychic, psionics; gnaw, gnash, gnome, gnu, gnat; pneumatic; mnemonic; chthonic; phthisis; bdellium.
author HackBot
date Sun, 29 May 2016 20:52:46 +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_ */