|
|
| version 1.144.2.28.2.18, 2003/03/21 14:27:51 | version 1.144.2.28.2.21, 2003/03/24 08:27:45 |
|---|---|
| Line 56 public: | Line 56 public: |
| uint hash_code() const; | uint hash_code() const; |
| const char* cstr() const { return CORD_to_const_char_star(body); } | |
| char* cstrm() const { return CORD_to_char_star(body); } | |
| size_t length() const { return CORD_len(body); } | size_t length() const { return CORD_len(body); } |
| bool is_empty() const { return body==CORD_EMPTY; } | bool is_empty() const { return body==CORD_EMPTY; } |
| Line 64 public: | Line 67 public: |
| CORD_cat_char_star(body, str, length); | CORD_cat_char_star(body, str, length); |
| } | } |
| void append(char c) { CORD_cat_char(body, c); } | void append(char c) { CORD_cat_char(body, c); } |
| void append(StringBody src) { CORD_cat(body, src.body); } | |
| // could not figure out why this operator is needed [should do this chain: string->simple->==] | // could not figure out why this operator is needed [should do this chain: string->simple->==] |
| bool operator < (const StringBody& src) const { return CORD_cmp(body, src.body)<0; } | bool operator < (const StringBody& src) const { return CORD_cmp(body, src.body)<0; } |
| Line 78 public: | Line 82 public: |
| } | } |
| char fetch(size_t index) const { return CORD_fetch(body, index); } | char fetch(size_t index) const { return CORD_fetch(body, index); } |
| StringBody mid(size_t index, size_t length) const { return CORD_substr(body, index, length); } | |
| size_t pos(size_t offset, const char* substr) const { return CORD_str(body, offset, substr); } | |
| size_t pos(size_t offset, const StringBody substr) const { return CORD_str(body, offset, substr.body); } | |
| template<typename I> void for_each(int (*callback)(const char* s, I), I info) const { | |
| CORD_iter5(body, 0, 0, (CORD_batched_iter_fn)callback, info); | |
| } | |
| void set_pos(CORD_pos& pos, size_t index) const { CORD_set_pos(pos, body, index); } | |
| }; | }; |
| Line 181 public: | Line 194 public: |
| size_t length() const { return body.length(); } | size_t length() const { return body.length(); } |
| /// convert to CORD. if 'lang' known, forcing 'lang' to it | /// convert to CORD. if 'lang' known, forcing 'lang' to it |
| CORD cstr_to_cord(Language lang=L_AS_IS, | StringBody cstr_to_string_body(Language lang=L_AS_IS, |
| SQL_Connection* connection=0, | SQL_Connection* connection=0, |
| const Request_charsets *charsets=0) const; | const Request_charsets *charsets=0) const; |
| Line 189 public: | Line 202 public: |
| const char* cstr(Language lang=L_AS_IS, | const char* cstr(Language lang=L_AS_IS, |
| SQL_Connection* connection=0, | SQL_Connection* connection=0, |
| const Request_charsets *charsets=0) const { | const Request_charsets *charsets=0) const { |
| return CORD_to_const_char_star(cstr_to_cord(lang, connection, charsets)); | return cstr_to_string_body(lang, connection, charsets).cstr(); |
| } | } |
| /// convert to Modifiable C string. if 'lang' known, forcing 'lang' to it | /// convert to Modifiable C string. if 'lang' known, forcing 'lang' to it |
| char *cstrm(Language lang=L_AS_IS, | char *cstrm(Language lang=L_AS_IS, |
| SQL_Connection* connection=0, | SQL_Connection* connection=0, |
| const Request_charsets *charsets=0) const { | const Request_charsets *charsets=0) const { |
| return CORD_to_char_star(cstr_to_cord(lang, connection, charsets)); | return cstr_to_string_body(lang, connection, charsets).cstrm(); |
| } | } |
| /// puts pieces to buf | /// puts pieces to buf |
| C serialize(size_t prolog_size) const; | C serialize(size_t prolog_size) const; |
| /// appends pieces from buf to self | /// appends pieces from buf to self |
| bool deserialize(size_t prolog_size, void *buf, size_t buf_size, const char* file); | bool deserialize(size_t prolog_size, void *buf, size_t buf_size, const char* file); |
| /** append fragment, | /** append fragment, |
| @c helper_length can be zero, it will be autocalced | @c length can be zero, it will be autocalced |
| when length<strlen(str) makes heap copy of @c str piece | when length<strlen(str) makes heap copy of @c str piece |
| */ | */ |
| String& append(const char* str, size_t helper_length, Language lang); | String& append(const char* str, size_t length, Language lang); |
| bool operator == (const char* y) const { return body==StringBody(y); } | bool operator == (const char* y) const { return body==StringBody(y); } |
| bool operator != (const char* y) const { return body!=StringBody(y); } | |
| /// this starts with y | /// this starts with y |
| bool starts_with(const char* y) const { | bool starts_with(const char* y) const { |
| Line 224 public: | Line 238 public: |
| } | } |
| String& operator << (const String& src) { return append(src, L_PASS_APPENDED); } | String& operator << (const String& src) { return append(src, L_PASS_APPENDED); } |
| String& operator << (const char* src) { return append(src, 0, L_AS_IS); } | String& operator << (const char* src) { return append(src, 0, L_AS_IS); } |
| String& operator << (const StringBody& src) { | |
| body.append(src); | |
| fragments+=Fragment(L_AS_IS, src.length()); | |
| return *this; | |
| } | |
| /// extracts first char of a string, if any | /// extracts first char of a string, if any |
| char first_char() const { | char first_char() const { |
| Line 245 public: | Line 264 public: |
| but when specified: look for substring that lies in ONE fragment in THAT lang | but when specified: look for substring that lies in ONE fragment in THAT lang |
| @return position of substr in string, -1 means "not found" [const char* version] | @return position of substr in string, -1 means "not found" [const char* version] |
| */ | */ |
| size_t pos(CORD substr, | size_t pos(const StringBody substr, |
| size_t this_offset=0, Language lang=L_UNSPECIFIED) const; | size_t this_offset=0, Language lang=L_UNSPECIFIED) const; |
| /// String version of @see pos(const char*, int, Language) | /// String version of @see pos(const char*, int, Language) |
| size_t pos(const String& substr, | size_t pos(const String& substr, |