// dap_string_t is an object that handles the memory management of a C string for you. #ifndef __DAP_STRING_H__ #define __DAP_STRING_H__ #include <stdbool.h> #include <stdio.h> #include <stdint.h> #include <sys/types.h> typedef struct _dap_string dap_string_t; struct _dap_string { char *str; size_t len; size_t allocated_len; }; dap_string_t* dap_string_new(const char *init); dap_string_t* dap_string_new_len(const char *init, ssize_t len); dap_string_t * dap_string_sized_new(size_t a_dfl_size); char* dap_string_free(dap_string_t *string, bool free_segment); bool dap_string_equal(const dap_string_t *v, const dap_string_t *v2); unsigned int dap_string_hash(const dap_string_t *str); dap_string_t* dap_string_assign(dap_string_t *string, const char *rval); dap_string_t* dap_string_truncate(dap_string_t *string, size_t len); dap_string_t* dap_string_set_size(dap_string_t *string, size_t len); dap_string_t* dap_string_insert_len(dap_string_t *string, ssize_t pos, const char *val, ssize_t len); dap_string_t* dap_string_append(dap_string_t *string, const char *val); dap_string_t* dap_string_append_len(dap_string_t *string, const char *val, ssize_t len); dap_string_t* dap_string_append_c(dap_string_t *string, char a_c); dap_string_t* dap_string_append_unichar(dap_string_t *string, uint32_t wc); dap_string_t* dap_string_prepend(dap_string_t *string, const char *val); dap_string_t* dap_string_prepend_c(dap_string_t *string, char a_c); dap_string_t* dap_string_prepend_unichar(dap_string_t *string, uint32_t wc); dap_string_t* dap_string_prepend_len(dap_string_t *string, const char *val, ssize_t len); dap_string_t* dap_string_insert(dap_string_t *string, ssize_t pos, const char *val); dap_string_t* dap_string_insert_c(dap_string_t *string, ssize_t pos, char a_c); dap_string_t* dap_string_insert_unichar(dap_string_t *string, ssize_t pos, uint32_t wc); dap_string_t* dap_string_overwrite(dap_string_t *string, size_t pos, const char *val); dap_string_t* dap_string_overwrite_len(dap_string_t *string, size_t pos, const char *val, ssize_t len); dap_string_t* dap_string_erase(dap_string_t *string, ssize_t pos, ssize_t len); void dap_string_vprintf(dap_string_t *string, const char *format, va_list args); void dap_string_printf(dap_string_t *string, const char *format, ...); void dap_string_append_vprintf(dap_string_t *string, const char *format, va_list args); void dap_string_append_printf(dap_string_t *string, const char *format, ...); /* -- optimize dap_strig_append_c --- */ #ifdef G_CAN_INLINE static inline dap_string_t* dap_string_append_c_inline(dap_string_t *a_string, char a_c) { if(a_string->len + 1 < a_string->allocated_len) { a_string->str[a_string->len++] = a_c; a_string->str[a_string->len] = 0; } else dap_string_insert_c(a_string, -1, a_c); return a_string; } #define dap_string_append_c(a_string,a_c) dap_string_append_c_inline (a_string, a_c) #endif /* G_CAN_INLINE */ dap_string_t *dap_string_down(dap_string_t *string); dap_string_t *dap_string_up(dap_string_t *string); #ifndef G_DISABLE_DEPRECATED #define dap_string_sprintf dap_string_printf #define dap_string_sprintfa dap_string_append_printf #endif #endif /* __DAP_STRING_H__ */