msvcp90: Implement basic_string and cstring versions of basic_string::find.

Piotr Caban piotr.caban at gmail.com
Sat Apr 2 05:54:33 CDT 2011


Hi,

On 04/02/11 08:49, Vincent Pelletier wrote:
> +size_t __thiscall MSVCP_basic_string_char_find_cstr(
> +        basic_string_char *this, const char *str, size_t offset)
> +{
> +    const char *this_str = basic_string_char_const_ptr(this);
> +    const char *found = strstr(this_str+offset, str);
> +    if (found)
> +        return found - this_str;
> +    return MSVCP_basic_string_char_npos;
> +}
It's better to implement basic_string<char>::find(const char *str, 
size_t offset, size_t count) first and then call it in 
MSVCP_basic_string_char_find_cstr implementation.

basic_string may contain nullbytes, your implementation will not work in 
this case. cstr may contain nullbytes as well when length is specified.

Adding some tests similar to following code may be useful:
basic_string<char> test = basic_string<char>("aaa");
test += '\0';
test += "bbb";
basic_string<char> test2 = basic_string<char>(test);
test2 += '\0';

printf("%d %s\n", test.length(), test.c_str());
printf("%d\n", test.find("bbb", 0));
printf("%d\n", test.find(test, 0));
printf("%d\n", test.find(test.c_str(), 0, test.length()));
printf("%d\n", test.find(test2, 0));
printf("%d\n", test.find(test2.c_str(), 0, test2.length()));

Cheers,
Piotr



More information about the wine-devel mailing list