#ifndef PK_STR_H #define PK_STR_H #include struct pk_str { char *val; uint32_t length; uint32_t reserved; }; struct pk_cstr { const char *val; uint32_t length; uint32_t reserved; }; struct pk_str cstring_to_pk_str(char *s); struct pk_cstr cstring_to_pk_cstr(const char *s); struct pk_str pk_cstr_to_pk_str(const struct pk_cstr *s); struct pk_cstr pk_str_to_pk_cstr(const struct pk_str *s); int pk_compare_str(const struct pk_str *lhs, const struct pk_str *rhs); int pk_compare_cstr(const struct pk_cstr *lhs, const struct pk_cstr *rhs); #endif /* PK_STR_H */ #ifdef PK_IMPL_STR #include "./pkmacros.h" /* deleteme */ #include struct pk_str cstring_to_pk_str(char *s) { struct pk_str ret; ret.val = s; ret.length = (uint32_t)(strlen(s)); ret.reserved = 0; return ret; } struct pk_cstr cstring_to_pk_cstr(const char *s) { struct pk_cstr ret; ret.val = s; ret.length = (uint32_t)(strlen(s)); ret.reserved = 0; return ret; } struct pk_str pk_cstr_to_pk_str(const struct pk_cstr *s) { struct pk_str ret; ret.val = (char *)s->val; ret.length = s->length; ret.reserved = s->reserved; return ret; } struct pk_cstr pk_str_to_pk_cstr(const struct pk_str *s) { struct pk_cstr ret; ret.val = (char *)s->val; ret.length = s->length; ret.reserved = s->reserved; return ret; } int pk_compare_str(const struct pk_str *lhs, const struct pk_str *rhs) { return strncmp(lhs->val, rhs->val, PK_MIN(lhs->length, rhs->length)); } int pk_compare_cstr(const struct pk_cstr *lhs, const struct pk_cstr *rhs) { return strncmp(lhs->val, rhs->val, PK_MIN(lhs->length, rhs->length)); } #endif /* PK_IMPL_STR */