#ifdef NALL_STRING_INTERNAL_HPP namespace nall { //limit defaults to zero, which will underflow on first compare; equivalent to no limit template char* ltrim(char *str, const char *key) { unsigned limit = Limit; if(!key || !*key) return str; while(strbegin(str, key)) { char *dest = str, *src = str + strlen(key); while(true) { *dest = *src++; if(!*dest) break; dest++; } if(--limit == 0) break; } return str; } template char* rtrim(char *str, const char *key) { unsigned limit = Limit; if(!key || !*key) return str; while(strend(str, key)) { str[strlen(str) - strlen(key)] = 0; if(--limit == 0) break; } return str; } template char* trim(char *str, const char *key, const char *rkey) { if(rkey) return ltrim(rtrim(str, rkey), key); return ltrim(rtrim(str, key), key); } //remove whitespace characters from both left and right sides of string char* strip(char *s) { signed n = 0, p = 0; while(s[n]) { if(s[n] != ' ' && s[n] != '\t' && s[n] != '\r' && s[n] != '\n') break; n++; } while(s[n]) s[p++] = s[n++]; s[p--] = 0; while(p >= 0) { if(s[p] != ' ' && s[p] != '\t' && s[p] != '\r' && s[p] != '\n') break; p--; } s[++p] = 0; return s; } } #endif