basic_string.h (string::compare): Adjust signatures as per DR 5.

2001-06-11  Benjamin Kosnik  <bkoz@redhat.com>

	libstdc++/3126
	* include/bits/basic_string.h (string::compare): Adjust signatures
	as per DR 5.
	* include/bits/basic_string.tcc: And here.

	libstdc++/2346
	* config/c_io_stdio.h: Remove whitespace.
	* testsuite/27_io/istream_seeks.cc (test03): Add regression.
	(test02): Add regression.
	* testsuite/27_io/istream_seeks-3.tst: New file.

From-SVN: r43240
This commit is contained in:
Benjamin Kosnik 2001-06-12 02:30:37 +00:00 committed by Benjamin Kosnik
parent 9dffe3b49e
commit 3b0fd4bcdb
6 changed files with 122 additions and 16 deletions

View File

@ -1,3 +1,16 @@
2001-06-11 Benjamin Kosnik <bkoz@redhat.com>
libstdc++/3126
* include/bits/basic_string.h (string::compare): Adjust signatures
as per DR 5.
* include/bits/basic_string.tcc: And here.
libstdc++/2346
* config/c_io_stdio.h: Remove whitespace.
* testsuite/27_io/istream_seeks.cc (test03): Add regression.
(test02): Add regression.
* testsuite/27_io/istream_seeks-3.tst: New file.
2001-06-11 Phil Edwards <pme@sources.redhat.com>
* README: Update to reflect reality.

View File

@ -92,13 +92,3 @@ namespace std
}
#endif // _CPP_IO_STDIO_H

View File

@ -842,9 +842,15 @@ namespace std
int
compare(const _CharT* __s) const;
#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
// 5. String::compare specification questionable
int
compare(size_type __pos, size_type __n1, const _CharT* __s) const;
int
compare(size_type __pos, size_type __n1, const _CharT* __s,
size_type __n2 = npos) const;
size_type __n2) const;
#endif
};

View File

@ -809,6 +809,24 @@ namespace std
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string <_CharT,_Traits,_Alloc>::
compare(size_type __pos, size_type __n1, const _CharT* __s) const
{
size_type __size = this->size();
if (__pos > __size)
__throw_out_of_range("basic_string::compare");
size_type __osize = traits_type::length(__s);
size_type __rsize = min(__size - __pos, __n1);
size_type __len = min(__rsize, __osize);
int __r = traits_type::compare(_M_data() + __pos, __s, __len);
if (!__r)
__r = __rsize - __osize;
return __r;
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string <_CharT,_Traits,_Alloc>::
@ -839,7 +857,6 @@ namespace std
_Traits::copy(__buf, __str.data(), __bytes);
__buf[__bytes] = _CharT();
}
} // namespace std
} // std::
#endif /* _CPP_BITS_STRING_TCC */
#endif

View File

@ -0,0 +1,10 @@
0-0 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
0-1 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
0-2 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
0-3 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
0-4 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
0-5 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
0-6 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
0-7 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
0-8 lootpack, peanut butter wolf, rob swift, madlib, quasimoto
0-9 lootpack, peanut butter wolf, rob swift, madlib, quasimoto

View File

@ -1,6 +1,6 @@
// 2000-06-29 bkoz
// Copyright (C) 2000 Free Software Foundation
// Copyright (C) 2000, 2001 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -28,7 +28,6 @@
#include <fstream>
#include <debug_assert.h>
bool test01()
{
using namespace std;
@ -64,6 +63,71 @@ bool test01()
return test;
}
const char* s = " lootpack, peanut butter wolf, rob swift, madlib, quasimoto";
const int times = 10;
void write_rewind(std::iostream& stream)
{
for (int j = 0; j < times; j++)
{
bool test = true;
std::streampos begin = stream.tellg();
for (int i = 0; i < times; ++i)
stream << j << '-' << i << s << '\n';
stream.seekg(begin);
std::streampos end = stream.tellg();
std::streampos badpos = std::streampos(std::streambuf::off_type(-1));
}
}
void check_contents(std::iostream& stream)
{
bool test = true;
stream.clear();
stream.seekg(0, std::ios::beg);
int i = 0;
int loop = times * times + 2;
while (i < loop)
{
stream.ignore(80, '\n');
if (stream.good())
++i;
else
break;
}
VERIFY( i == times );
}
// fstream
// libstdc++/2346
void test02()
{
std::fstream ofstrm;
ofstrm.open("istream_seeks-3.txt", std::ios::out);
if (!ofstrm)
abort();
write_rewind(ofstrm);
ofstrm.close();
std::fstream ifstrm;
ifstrm.open("istream_seeks-3.txt", std::ios::in);
check_contents(ifstrm);
ifstrm.close();
}
// stringstream
// libstdc++/2346
void test03()
{
std::stringstream sstrm;
write_rewind(sstrm);
check_contents(sstrm);
}
// fstreams
void test04(void)
{
@ -289,7 +353,13 @@ void test05(void)
int main()
{
test01();
test02();
test03();
test04();
test05();
return 0;
}