view src/ploki/Str.h @ 8916:0234daffd946

<oerjan> addquote <int-e> I couldn\'t help thinking that maybe if one considers the ramifications in full detail it will turn out that overthinking is often not helpful and therefore, not something to be proud of.
author HackBot
date Sun, 14 Aug 2016 02:31:47 +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_ */