Skip to content

Commit

Permalink
Default special members of regex types and add noexcept
Browse files Browse the repository at this point in the history
	* include/bits/regex.h (sub_match): Add noexcept to default
	constructor and length observer.
	(match_results): Add noexcept to default constructor and observers
	with no preconditions. Define destructor as defaulted.
	(operator==, operator!=, swap): Add noexcept.
	(regex_iterator): Add default member initializers and define default
	constructor and destructor as defaulted. Add noexcept to equality
	and dereference operators.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@261266 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
redi committed Jun 7, 2018
1 parent ccf8d65 commit fba6502
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 43 deletions.
11 changes: 11 additions & 0 deletions libstdc++-v3/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
2018-06-07 Jonathan Wakely <jwakely@redhat.com>

* include/bits/regex.h (sub_match): Add noexcept to default
constructor and length observer.
(match_results): Add noexcept to default constructor and observers
with no preconditions. Define destructor as defaulted.
(operator==, operator!=, swap): Add noexcept.
(regex_iterator): Add default member initializers and define default
constructor and destructor as defaulted. Add noexcept to equality
and dereference operators.

2018-06-07 François Dumont <fdumont@gcc.gnu.org>

* src/c++11/debug.cc
Expand Down
82 changes: 39 additions & 43 deletions libstdc++-v3/include/bits/regex.h
Original file line number Diff line number Diff line change
Expand Up @@ -868,18 +868,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
public:
typedef typename __iter_traits::value_type value_type;
typedef typename __iter_traits::difference_type difference_type;
typedef _BiIter iterator;
typedef std::basic_string<value_type> string_type;
typedef _BiIter iterator;
typedef basic_string<value_type> string_type;

bool matched;

constexpr sub_match() : matched() { }
constexpr sub_match() noexcept : matched() { }

/**
* Gets the length of the matching sequence.
*/
difference_type
length() const
length() const noexcept
{ return this->matched ? std::distance(this->first, this->second) : 0; }

/**
Expand Down Expand Up @@ -1602,37 +1602,36 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
* @post size() returns 0 and str() returns an empty string.
*/
explicit
match_results(const _Alloc& __a = _Alloc())
match_results(const _Alloc& __a = _Alloc()) noexcept
: _Base_type(__a)
{ }

/**
* @brief Copy constructs a %match_results.
*/
match_results(const match_results& __rhs) = default;
match_results(const match_results&) = default;

/**
* @brief Move constructs a %match_results.
*/
match_results(match_results&& __rhs) noexcept = default;
match_results(match_results&&) noexcept = default;

/**
* @brief Assigns rhs to *this.
*/
match_results&
operator=(const match_results& __rhs) = default;
operator=(const match_results&) = default;

/**
* @brief Move-assigns rhs to *this.
*/
match_results&
operator=(match_results&& __rhs) = default;
operator=(match_results&&) = default;

/**
* @brief Destroys a %match_results object.
*/
~match_results()
{ }
~match_results() = default;

//@}

Expand All @@ -1642,7 +1641,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
* @retval true The object has a fully-established result state.
* @retval false The object is not ready.
*/
bool ready() const { return !_Base_type::empty(); }
bool ready() const noexcept { return !_Base_type::empty(); }

/**
* @name 28.10.2 Size
Expand All @@ -1659,11 +1658,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
* @returns the number of matches found.
*/
size_type
size() const
size() const noexcept
{ return _Base_type::empty() ? 0 : _Base_type::size() - 3; }

size_type
max_size() const
max_size() const noexcept
{ return _Base_type::max_size(); }

/**
Expand All @@ -1672,7 +1671,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
* @retval false The %match_results object is not empty.
*/
bool
empty() const
empty() const noexcept
{ return size() == 0; }

//@}
Expand Down Expand Up @@ -1776,28 +1775,28 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
* @brief Gets an iterator to the start of the %sub_match collection.
*/
const_iterator
begin() const
begin() const noexcept
{ return _Base_type::begin(); }

/**
* @brief Gets an iterator to the start of the %sub_match collection.
*/
const_iterator
cbegin() const
cbegin() const noexcept
{ return this->begin(); }

/**
* @brief Gets an iterator to one-past-the-end of the collection.
*/
const_iterator
end() const
end() const noexcept
{ return _Base_type::end() - (empty() ? 0 : 3); }

/**
* @brief Gets an iterator to one-past-the-end of the collection.
*/
const_iterator
cend() const
cend() const noexcept
{ return this->end(); }

//@}
Expand Down Expand Up @@ -1872,7 +1871,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
* @brief Gets a copy of the allocator.
*/
allocator_type
get_allocator() const
get_allocator() const noexcept
{ return _Base_type::get_allocator(); }

//@}
Expand All @@ -1886,7 +1885,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
* @brief Swaps the contents of two match_results.
*/
void
swap(match_results& __that)
swap(match_results& __that) noexcept
{
using std::swap;
_Base_type::swap(__that);
Expand Down Expand Up @@ -1955,7 +1954,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
template<typename _Bi_iter, typename _Alloc>
inline bool
operator==(const match_results<_Bi_iter, _Alloc>& __m1,
const match_results<_Bi_iter, _Alloc>& __m2)
const match_results<_Bi_iter, _Alloc>& __m2) noexcept
{
if (__m1.ready() != __m2.ready())
return false;
Expand All @@ -1979,7 +1978,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
template<typename _Bi_iter, class _Alloc>
inline bool
operator!=(const match_results<_Bi_iter, _Alloc>& __m1,
const match_results<_Bi_iter, _Alloc>& __m2)
const match_results<_Bi_iter, _Alloc>& __m2) noexcept
{ return !(__m1 == __m2); }

// [7.10.6] match_results swap
Expand All @@ -1993,7 +1992,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
template<typename _Bi_iter, typename _Alloc>
inline void
swap(match_results<_Bi_iter, _Alloc>& __lhs,
match_results<_Bi_iter, _Alloc>& __rhs)
match_results<_Bi_iter, _Alloc>& __rhs) noexcept
{ __lhs.swap(__rhs); }

_GLIBCXX_END_NAMESPACE_CXX11
Expand Down Expand Up @@ -2490,9 +2489,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
* @brief Provides a singular iterator, useful for indicating
* one-past-the-end of a range.
*/
regex_iterator()
: _M_pregex()
{ }
regex_iterator() = default;

/**
* Constructs a %regex_iterator...
Expand All @@ -2515,42 +2512,41 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
regex_iterator(_Bi_iter, _Bi_iter, const regex_type&&,
regex_constants::match_flag_type
= regex_constants::match_default) = delete;
/**
* Copy constructs a %regex_iterator.
*/
regex_iterator(const regex_iterator& __rhs) = default;

/**
* @brief Assigns one %regex_iterator to another.
*/
/// Copy constructs a %regex_iterator.
regex_iterator(const regex_iterator&) = default;

/// Copy assigns one %regex_iterator to another.
regex_iterator&
operator=(const regex_iterator& __rhs) = default;
operator=(const regex_iterator&) = default;

~regex_iterator() = default;

/**
* @brief Tests the equivalence of two regex iterators.
*/
bool
operator==(const regex_iterator& __rhs) const;
operator==(const regex_iterator&) const noexcept;

/**
* @brief Tests the inequivalence of two regex iterators.
*/
bool
operator!=(const regex_iterator& __rhs) const
operator!=(const regex_iterator& __rhs) const noexcept
{ return !(*this == __rhs); }

/**
* @brief Dereferences a %regex_iterator.
*/
const value_type&
operator*() const
operator*() const noexcept
{ return _M_match; }

/**
* @brief Selects a %regex_iterator member.
*/
const value_type*
operator->() const
operator->() const noexcept
{ return &_M_match; }

/**
Expand All @@ -2571,10 +2567,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
}

private:
_Bi_iter _M_begin;
_Bi_iter _M_end;
const regex_type* _M_pregex;
regex_constants::match_flag_type _M_flags;
_Bi_iter _M_begin {};
_Bi_iter _M_end {};
const regex_type* _M_pregex = nullptr;
regex_constants::match_flag_type _M_flags {};
match_results<_Bi_iter> _M_match;
};

Expand Down

0 comments on commit fba6502

Please sign in to comment.