view src/ploki/variable.h @ 11562:6b0304dcec5c draft

<oerjan> ` cd bin; cp welcome \xd0\xb4\xd0\xbe\xd0\xb1\xd1\x80\xd0\xbe-\xd0\xbf\xd0\xbe\xd0\xb6\xd0\xb0\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c; sled \xd0\xb4\xd0\xbe\xd0\xb1\xd1\x80\xd0\xbe-\xd0\xbf\xd0\xbe\xd0\xb6\xd0\xb0\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c//s,welcome,welcome.ru,
author HackEso <hackeso@esolangs.org>
date Wed, 16 May 2018 04:46:17 +0100
parents ac0403686959
children
line wrap: on
line source

#ifndef VARIABLE_H_
#define VARIABLE_H_

#include "config.h"
#include "strhash.h"

#include <stddef.h>

typedef size_t t_vr_cookie;
#define VR_NO_COOKIE ((size_t)-1)

typedef struct {
	void **data;
	size_t size, length;
	t_strhash *hash;
	void (*del)(void *);
} t_vr_container;

t_vr_container *vr_new(void (*)(void *));
void vr_delete(t_vr_container *);

t_vr_cookie vr_exists(const t_vr_container *, const char *, size_t);
t_vr_cookie vr_register(t_vr_container *, const char *, size_t, void *);

void vr_freeze(t_vr_container *);

ATTR_PURE
void *vr_data(const t_vr_container *, t_vr_cookie);

#if !DEBUG_P
#define vr_data(vc, c) ((vc)->data[c])
#endif

#endif /* VARIABLE_H_ */