view src/ploki/Str.h @ 12292:d51f2100210c draft

<kspalaiologos> `` cat <<<"asmbf && bfi output.b" > /hackenv/ibin/asmbf
author HackEso <hackeso@esolangs.org>
date Thu, 02 Jan 2020 15:38:21 +0000
parents ac0403686959
children
line wrap: on
line source

#ifndef STR_H_
#define STR_H_

#include "config.h"

#include <stdio.h>

typedef struct {
	char *buf;
	size_t length;
	size_t size;
	size_t offset;
} String;

void    St_init         (String *);
void    St_fake         (String *, char *, size_t);
void    St_clear        (String *);
#if 0
void    St_zero         (String *);
ATTR_PURE
char    *St_ptr         (const String *);
ATTR_PURE
size_t  St_len          (const String *);
void    St_grow         (String *, size_t);
#endif
void    St_trunc        (String *, size_t);
#if 0
ATTR_PURE
int     St_lastchar     (const String *);
ATTR_PURE
int     St_firstchar    (const String *);
int     St_chop         (String *);
#endif
int     St_shift        (String *);
size_t  St_shiftws      (String *);
#if 0
ATTR_PURE
int     St_index        (const String *, size_t);
#endif
ATTR_PURE
size_t  St_chr          (const String *, int);
#if 0
size_t  St_rchr         (const String *, int);
#endif
ATTR_PURE
int     St_cmp          (const String *, const String *);
ATTR_PURE
int     St_cmp_m        (const String *, const void *, size_t);
#if 0
ATTR_PURE
int     St_cmp_s        (const String *, const char *);
ATTR_PURE
int     St_ncmp         (const String *, const String *);
#endif
ATTR_PURE
int     St_ncmp_m       (const String *, const void *, size_t);
#if 0
ATTR_PURE
int     St_ncmp_s       (const String *, const char *);
ATTR_PURE
int     St_casecmp      (const String *, const String *);
ATTR_PURE
int     St_casecmp_m    (const String *, const void *, size_t);
ATTR_PURE
int     St_casecmp_s    (const String *, const char *);
ATTR_PURE
int     St_ncasecmp     (const String *, const String *);
ATTR_PURE
int     St_ncasecmp_m   (const String *, const void *, size_t);
ATTR_PURE
int     St_ncasecmp_s   (const String *, const char *);
#endif
ATTR_PURE
size_t  St_str          (const String *, const String *);
ATTR_PURE
size_t  St_str_m        (const String *, const void *, size_t);
#if 0
ATTR_PURE
size_t  St_str_s        (const String *, const char *);
ATTR_PURE
size_t  St_rstr         (const String *, const String *);
#endif
ATTR_PURE
size_t  St_rstr_m       (const String *, const void *, size_t);
ATTR_PURE
size_t  St_rstr_s       (const String *, const char *);
ATTR_PURE
size_t  St_stro_m       (const String *, size_t, const void *, size_t);
ATTR_PURE
size_t  St_rstro_m      (const String *, size_t, const void *, size_t);
void    St_cpy          (String *, const String *);
void    St_cpy_m        (String *, const void *, size_t);
void    St_cpy_s        (String *, const char *);
void    St_cpy_c        (String *, int);
void    St_cat          (String *, const String *);
void    St_cat_m        (String *, const void *, size_t);
void    St_cat_s        (String *, const char *);
void    St_cat_c        (String *, int);
#if 0
void    St_tac          (String *, const String *);
#endif
void    St_tac_m        (String *, const void *, size_t);
void    St_tac_s        (String *, const char *);
void    St_tac_c        (String *, int);
void    St_reverse      (String *);
#if 0
void    St_map          (String *, int (*)(int));
#endif
void    St_grep         (String *, int (*)(int));
void    St_upper        (String *);
void    St_lower        (String *);
void    St_del          (String *, size_t, size_t);
#if 0
void    St_ins          (String *, size_t, const String *);
void    St_ins_m        (String *, size_t, const void *, size_t);
void    St_ins_s        (String *, size_t, const char *);
void    St_ins_c        (String *, size_t, int);
#endif
void    St_substr       (String *, String *, size_t, size_t, const String *);
#if HAVE_VSNPRINTF_P
ATTR_SPRINTF
size_t  St_xprintf      (String *, const char *, ...);
#endif
void    St_num          (String *, double);
#if 0
size_t  St_write        (const String *, FILE *);
#endif
size_t  St_read         (String *, FILE *, size_t);
#if 0
int     St_getline      (String *, FILE *, int);
void    St_getfile      (String *, FILE *);
#endif
ATTR_PURE
size_t  St_hash         (const String *, size_t);

#define St_ptr(s)          (0 + (s)->buf)
#define St_len(s)          (0 + (s)->length)
#define St_zero(s)         ((void)((s)->buf[(s)->length = 0] = '\0'))
#define ST_LASTCHAR(s)     ((s)->length ? (int)(unsigned char)(s)->buf[(s)->length - 1] : EOF)
#define ST_FIRSTCHAR(s)    ((s)->length ? (int)(unsigned char)(s)->buf[0] : EOF)
#define ST_INDEX(s, n)     ((size_t)(n) < (s)->length ? (int)(unsigned char)(s)->buf[(size_t)(n)] : EOF)
#define ST_WRITE(s, fp)    fwrite((s)->buf, 1, (s)->length, fp)

#endif /* STR_H_ */