#include "str.h" #include "str_partial.h" #include H_ATTR str_info _info_getter(const str * const restrict s, UNUM n) { return (str_info) { (NUM) *(s->data+n), 1 }; } /* H_ATTR * NUM * _lenner(str *s) * { * return s->size; * } */ str * new_str(char *s, NUM size) { str *str_pointer = MYALLOC(str, 1); str_pointer->size = size; str_pointer->data = s; str_pointer->getter = _info_getter; /* str_pointer->lenner = _lenner; */ return str_pointer; } void destroy_str(str *s, int flag) { if (flag) free(s->data); s->size = 0; free(s); } H_ATTR str_info get_info(const str * const restrict s, UNUM n) { return s->getter(s, n); } H_ATTR NUM str_length(const str * const restrict s) { return s->size; } void change_str_content(str *s, char *str, NUM size) { s->data = str; s->size = size; } BOOL copy_str(str *dest, str *source) { if (str_length(dest) < str_length(source)) return 1; dest->size = source->size; memcpy(dest->data, source->data, source->size); return 0; } char * get_data(const str * const restrict s) { return s->data; } void str_set_length(str *s, UNUM size) { s->size = size; }