#ifndef SORM_STR_H
#define SORM_STR_H
#include <rlib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct sormstr_t {
    char * content;
    size_t length;
    size_t buffer_size;
    size_t size;
} sormstr_t;

sormstr_t * sormstrn(size_t buffer_size){
    sormstr_t * result = (sormstr_t *)malloc(sizeof(sormstr_t));
    result->length = 0;
    result->size = buffer_size;
    result->buffer_size = buffer_size;
    result->content = (char *)malloc(buffer_size);
    result->content[0] = 0;
    return result;
}
void sormstra(sormstr_t * str, const char * to_append){
    size_t required_new_length = str->length + strlen(to_append);
    str->length += strlen(to_append);
    if(required_new_length > str->size){
        str->size += required_new_length + str->buffer_size;
        str->content = realloc(str->content,str->size + 1);
    }else{
       // printf("NO NDEED\n");
    }
    strcat(str->content,to_append);
    str->content[str->length] = 0;
}
void sormstrd(sormstr_t * str){
    if(str->content){
        free(str->content);
    }
    free(str);
}
char * sormstrc(sormstr_t * str){
    // sorm str convert
    char * content = str->content;
    str->content = NULL;
    sormstrd(str);
    return content;
}

#endif