[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:
parent
2c8865f1c1
commit
a0a2a39912
7 changed files with 158 additions and 19 deletions
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
|
26
libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-1.cc
Normal file
26
libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-1.cc
Normal 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);
|
80
libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-2.cc
Normal file
80
libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-2.cc
Normal 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue