view src/ploki/kork.h @ 8065:591b1467ccdf

<int-e> le/rn paste/"Paste" is a short story by Henry James. Its contents has been cut into pieces and distributed over numerous tin boxes on the World Wide Web, little pearls of wisdom buried among ordinary pastes.
author HackBot
date Sun, 15 May 2016 13:14:57 +0000
parents ac0403686959
children
line wrap: on
line source

#ifndef KORK_H_
#define KORK_H_

#include "config.h"
#include "IO.h"
#include "Str.h"

#include <stddef.h>

struct ko_dolphin {
	String str;
	size_t refs;
};

struct kork {
	struct ko_dolphin *kdp;
	size_t offset, length;
};

struct kork *ko_new(void);
struct kork *ko_dup(const struct kork *);
void ko_decouple(struct kork *);
void ko_delete(struct kork *);

ATTR_PURE
size_t ko_length(const struct kork *);
ATTR_PURE
int ko_at(const struct kork *, size_t);
ATTR_PURE
int ko_lastchar(const struct kork *);
ATTR_PURE
int ko_cmp(const struct kork *, const struct kork *);

void ko_zero(struct kork *);

ATTR_PURE
const char *ko_ptr(const struct kork *);
const String *ko_str(struct kork *);
const char *ko_szp(struct kork *);
void ko_grep(struct kork *, int (*)(int));
void ko_shift(struct kork *, size_t);
void ko_num(struct kork *k, double);
void ko_cpy_m(struct kork *, const void *, size_t);
void ko_cpy(struct kork *, const struct kork *);
void ko_cpy_s(struct kork *, const char *);
void ko_cpy_c(struct kork *, char);
void ko_cat_m(struct kork *, const void *, size_t);
void ko_cat(struct kork *, const struct kork *);
void ko_cat_c(struct kork *, char);
void ko_reverse(struct kork *);
size_t ko_getline(IO *, struct kork *);
size_t ko_read(IO *, struct kork *, size_t);
void ko_lower(struct kork *);
void ko_upper(struct kork *);
ATTR_PURE
size_t ko_chr(const struct kork *, int);
void ko_shiftws(struct kork *);
void ko_trunc(struct kork *, size_t);

#define ko_length(k) ((k)->length + 0u)
#define ko_zero(k) ((void)((k)->length = 0u))

#endif /* KORK_H_ */