/** * Concatenate two c-strings * @param s1 * @param s2 * @return CSTRING object */ CSTRING operator+(const CSTRING& s1, const CSTRING& s2 ) { unsigned int len1; unsigned int len2; len1 = s1.length(); len2 = len1+ s2.length(); CSTRING s(len2); if(s.storage.adr) { s.storage.ram->len = len2; strcpy(s.storage.ram->buf, s1.c_str()); strcpy(s.storage.ram->buf + len1, s2.c_str()); } return (s); }
/** * Test for substring * @param sub * @param pos * @return true if begins with sub */ unsigned int CSTRING::contains(CSTRING& sub, unsigned int pos) const { unsigned int len; len = sub.length(); if( pos+len <= length()) if( !memcmp(c_str()+pos, sub.c_str(), len)) return (len); return (0); }
/** * Concatenates CSTRING and char* * @param s1 * @param s * @return CSTRING object */ CSTRING operator+( const CSTRING& s1, const char* s ) { unsigned int len1; unsigned int len2; len1 = s1.length(); len2 = len1 + strlen(s); CSTRING res(len2); if(res.storage.adr) { res.storage.ram->len = len2; strcpy(res.storage.ram->buf, s1.c_str()); strcpy(res.storage.ram->buf+ len1, s); } return (res); }
/** * Concatenates char and CSTRING * @param c * @param s2 * @return CSTRING object */ CSTRING operator+( char c, const CSTRING& s2 ) { unsigned int len1; unsigned int len2; len1 = c?1:0; len2 = len1 + s2.length(); CSTRING res(len2); if(res.storage.adr) { res.storage.ram->len = len2; res.storage.ram->buf[0] = c; strcpy(res.storage.ram->buf + len1, s2.c_str()); } return (res); }
/** * Concatenates CSTRING and char * @param s1 * @param c * @return CSTRING object */ CSTRING operator+( const CSTRING& s1, char c ) { unsigned int len1; unsigned int len2; len1 = s1.length(); len2 = len1 + c?1:0; CSTRING res(len2); if(res.storage.adr) { res.storage.ram->len = len2; strcpy(res.storage.ram->buf, s1.c_str()); if(c) { res.storage.ram->buf[len2--] = 0; res.storage.ram->buf[len2] = c; } } return (res); }