[multiple changes]

2010-10-11  Jonathan Wakely  <jwakely.gcc@gmail.com>

	* testsuite/23_containers/bitset/cons/2.cc: Tweak.

2010-10-11  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/std/bitset (bitset<>::bitset(const _CharT*,
	typename std::basic_string<>::size_type, _CharT, _CharT)):
	Implement new proposed resolution for DR 1325.
	* include/debug/bitset: Likewise.
	* include/profile/bitset: Likewise.
	* testsuite/23_containers/bitset/cons/dr1325-1.cc: New.
	* testsuite/23_containers/bitset/cons/dr1325-2.cc: Likewise.

From-SVN: r165338
This commit is contained in:
Paolo Carlini 2010-10-11 22:32:01 +00:00
parent 2c8865f1c1
commit a0a2a39912
7 changed files with 158 additions and 19 deletions

View File

@ -1,3 +1,17 @@
2010-10-11 Jonathan Wakely <jwakely.gcc@gmail.com>
* testsuite/23_containers/bitset/cons/2.cc: Tweak.
2010-10-11 Paolo Carlini <paolo.carlini@oracle.com>
* include/std/bitset (bitset<>::bitset(const _CharT*,
typename std::basic_string<>::size_type, _CharT, _CharT)):
Implement new proposed resolution for DR 1325.
* include/debug/bitset: Likewise.
* include/profile/bitset: Likewise.
* testsuite/23_containers/bitset/cons/dr1325-1.cc: New.
* testsuite/23_containers/bitset/cons/dr1325-2.cc: Likewise.
2010-10-11 Benjamin Kosnik <bkoz@redhat.com>
* doc/xml/api.xml: Add link to 4.5 generated docs.

View File

@ -150,8 +150,13 @@ namespace __debug
bitset(const _Base& __x) : _Base(__x), _Safe_base() { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
explicit
bitset(const char* __str) : _Base(__str) { }
template<typename _CharT>
explicit
bitset(const _CharT* __str,
typename std::basic_string<_CharT>::size_type __n
= std::basic_string<_CharT>::npos,
_CharT __zero = _CharT('0'), _CharT __one = _CharT('1'))
: _Base(__str, __n, __zero, __one) { }
#endif
// 23.3.5.2 bitset operations:

View File

@ -127,8 +127,13 @@ namespace __profile
bitset(const _Base& __x) : _Base(__x) { }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
explicit
bitset(const char* __str) : _Base(__str) { }
template<typename _CharT>
explicit
bitset(const _CharT* __str,
typename std::basic_string<_CharT>::size_type __n
= std::basic_string<_CharT>::npos,
_CharT __zero = _CharT('0'), _CharT __one = _CharT('1'))
: _Base(__str, __n, __zero, __one) { }
#endif
// 23.3.5.2 bitset operations:

View File

@ -870,22 +870,31 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
#ifdef __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Construct from a string.
* @param str A string of @a 0 and @a 1 characters.
* @brief Construct from a character %array.
* @param str An %array of characters @a zero and @a one.
* @param n The number of characters to use.
* @param zero The character corresponding to the value 0.
* @param one The character corresponding to the value 1.
* @throw std::invalid_argument If a character appears in the string
* which is neither @a 0 nor @a 1.
* which is neither @a zero nor @a one.
*/
explicit
bitset(const char* __str)
: _Base()
{
if (!__str)
__throw_logic_error(__N("bitset::bitset(const char*)"));
template<typename _CharT>
explicit
bitset(const _CharT* __str,
typename std::basic_string<_CharT>::size_type __n
= std::basic_string<_CharT>::npos,
_CharT __zero = _CharT('0'), _CharT __one = _CharT('1'))
: _Base()
{
if (!__str)
__throw_logic_error(__N("bitset::bitset(const _CharT*, ...)"));
const size_t __len = __builtin_strlen(__str);
_M_copy_from_ptr<char, std::char_traits<char>>(__str, __len, 0,
__len, '0', '1');
}
if (__n == std::basic_string<_CharT>::npos)
__n = std::char_traits<_CharT>::length(__str);
_M_copy_from_ptr<_CharT, std::char_traits<_CharT>>(__str, __n, 0,
__n, __zero,
__one);
}
#endif
// 23.3.5.2 bitset operations:

View File

@ -1,6 +1,6 @@
// { dg-options "-std=gnu++0x" }
// Copyright (C) 2009 Free Software Foundation, Inc.
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
//
// 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
@ -33,7 +33,7 @@ test01()
X x;
std::string s(x);
std::bitset<32> b1(x);
std::bitset<32> b1(static_cast<const char*>(x));
std::bitset<32> b2(s);
VERIFY( b1 == b2 );
}

View File

@ -0,0 +1,26 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
// 2010-10-11 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2010 Free Software Foundation, Inc.
//
// 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
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
#include <bitset>
// DR 1325.
std::bitset<10> b(0);

View File

@ -0,0 +1,80 @@
// { dg-options "-std=gnu++0x" }
// 2010-10-11 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2010 Free Software Foundation, Inc.
//
// 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
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
#include <bitset>
#include <testsuite_hooks.h>
template<std::size_t Nb, typename CharT>
std::bitset<Nb>
test01_ref(const CharT* str,
typename std::basic_string<CharT>::size_type n
= std::basic_string<CharT>::npos,
CharT zero = CharT('0'), CharT one = CharT('1'))
{
return std::bitset<Nb>(n == std::basic_string<CharT>::npos
? std::basic_string<CharT>(str)
: std::basic_string<CharT>(str, n),
0, n, zero, one);
}
// DR 1325.
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
const char s1[4] = { '0', '1', '0', '1' };
VERIFY( bitset<4>(s1, 4) == test01_ref<4>(s1, 4) );
const char s2[3] = { '1', '1', '0' };
VERIFY( bitset<6>(s1, 3) == test01_ref<6>(s1, 3) );
const char* s3 = "1110110";
VERIFY( bitset<7>(s3) == test01_ref<7>(s3) );
const char* s4 = "0011";
VERIFY( bitset<10>(s4) == test01_ref<10>(s4) );
const char* s5 = "011110000111001";
VERIFY( bitset<5>(s5) == test01_ref<5>(s5) );
const char* s6 = "1cc1c1";
VERIFY( bitset<6>(s6, basic_string<char>::npos, 'c')
== test01_ref<6>(s6, basic_string<char>::npos, 'c') );
const char* s7 = "001011101";
VERIFY( bitset<9>(s7, basic_string<char>::npos, '0', '1')
== test01_ref<9>(s7, basic_string<char>::npos, '0', '1') );
const char* s8 = "babb";
VERIFY( bitset<4>(s8, basic_string<char>::npos, 'a', 'b')
== test01_ref<4>(s8, basic_string<char>::npos, 'a', 'b') );
const char* s9 = "bbabbbaaa";
VERIFY( bitset<100>(s9, basic_string<char>::npos, 'a', 'b')
== test01_ref<100>(s9, basic_string<char>::npos, 'a', 'b') );
}
int main()
{
test01();
return 0;
}