/* @@@HEAD@@@
// Declarations for string handling.
*/

#ifndef _string_h_
#define _string_h_

#include <stdio.h>
#include "cdc_types.h"
#include "regexp.h"

string_t * string_new(int len);
string_t * string_empty(int size);
string_t * string_from_chars(char * s, int len);
string_t * string_of_char(int c, int len);
string_t * string_dup(string_t * str);
#if 0
int        string_length(string_t * str);
char     * string_chars(string_t * str);
#endif
void       string_pack(string_t * str, FILE * fp);
string_t * string_unpack(FILE * fp);
int        string_packed_size(string_t * str);
int        string_cmp(string_t * str1, string_t * str2);
string_t * string_add(string_t * str1, string_t * str2);
string_t * string_add_chars(string_t * str, char * s, int len);
string_t * string_addc(string_t * str, int c);
string_t * string_add_padding(string_t * str,
                              char     * filler,
                              int        len,
                              int        padding);
string_t * string_truncate(string_t * str, int len);
string_t * string_substring(string_t * str, int start, int len);
string_t * string_uppercase(string_t * str);
string_t * string_lowercase(string_t * str);
regexp   * string_regexp(string_t * str);
void       string_discard(string_t * str);
string_t * string_parse(char * *sptr);
string_t * string_add_unparsed(string_t * str, char * s, int len);
char     * regerror(char * msg);

#define string_length(__s) ((int) __s->len)
#define string_chars(__s) ((char *) __s->s + __s->start)

#endif