// Iostreams base classes -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009
-// Free Software Foundation, Inc.
+// Copyright (C) 1997-2020 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 2, or (at your option)
+// 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,
// 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 COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-/** @file basic_ios.h
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/basic_ios.h
* This is an internal header file, included by other library headers.
- * You should not attempt to use it directly.
+ * Do not attempt to use it directly. @headername{ios}
*/
#ifndef _BASIC_IOS_H
#include <bits/locale_classes.h>
#include <bits/locale_facets.h>
#include <bits/streambuf_iterator.h>
+#include <bits/move.h>
-_GLIBCXX_BEGIN_NAMESPACE(std)
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Facet>
inline const _Facet&
return *__f;
}
- // 27.4.5 Template class basic_ios
/**
- * @brief Virtual base class for all stream classes.
+ * @brief Template class basic_ios, virtual base class for all
+ * stream classes.
* @ingroup io
*
+ * @tparam _CharT Type of character stream.
+ * @tparam _Traits Traits for character type, defaults to
+ * char_traits<_CharT>.
+ *
* Most of the member functions called dispatched on stream objects
* (e.g., @c std::cout.foo(bar);) are consolidated in this class.
*/
//@{
/**
* These are standard types. They permit a standardized way of
- * referring to names of (or names dependant on) the template
+ * referring to names of (or names dependent on) the template
* parameters, which are specific to the implementation.
*/
typedef _CharT char_type;
* @brief The quick-and-easy status check.
*
* This allows you to write constructs such as
- * "if (!a_stream) ..." and "while (a_stream) ..."
+ * <code>if (!a_stream) ...</code> and <code>while (a_stream) ...</code>
*/
+#if __cplusplus >= 201103L
+ explicit operator bool() const
+ { return !this->fail(); }
+#else
operator void*() const
{ return this->fail() ? 0 : const_cast<basic_ios*>(this); }
+#endif
bool
operator!() const
/**
* @brief [Re]sets the error state.
- * @param state The new state flag(s) to set.
+ * @param __state The new state flag(s) to set.
*
* See std::ios_base::iostate for the possible bit values. Most
* users will not need to pass an argument.
/**
* @brief Sets additional flags in the error state.
- * @param state The additional state flag(s) to set.
+ * @param __state The additional state flag(s) to set.
*
* See std::ios_base::iostate for the possible bit values.
*/
setstate(iostate __state)
{ this->clear(this->rdstate() | __state); }
- // Flip the internal state on for the proper state bits, then re
- // throws the propagated exception if bit also set in
+ // Flip the internal state on for the proper state bits, then
+ // rethrows the propagated exception if bit also set in
// exceptions().
void
_M_setstate(iostate __state)
/**
* @brief Throwing exceptions on errors.
- * @param except The new exceptions mask.
+ * @param __except The new exceptions mask.
*
* By default, error flags are set silently. You can set an
* exceptions mask for each stream; if a bit in the mask becomes set
/**
* @brief Ties this stream to an output stream.
- * @param tiestr The output stream.
+ * @param __tiestr The output stream.
* @return The previously tied output stream, or NULL if the stream
* was not tied.
*
/**
* @brief Changing the underlying buffer.
- * @param sb The new stream buffer.
+ * @param __sb The new stream buffer.
* @return The previous stream buffer.
*
* Associates a new buffer with the current stream, and clears the
copyfmt(const basic_ios& __rhs);
/**
- * @brief Retrieves the "empty" character.
+ * @brief Retrieves the @a empty character.
* @return The current fill character.
*
* It defaults to a space (' ') in the current locale.
}
/**
- * @brief Sets a new "empty" character.
- * @param ch The new character.
+ * @brief Sets a new @a empty character.
+ * @param __ch The new character.
* @return The previous fill character.
*
* The fill character is used to fill out space when P+ characters
// Locales:
/**
* @brief Moves to a new locale.
- * @param loc The new locale.
+ * @param __loc The new locale.
* @return The previous locale.
*
* Calls @c ios_base::imbue(loc), and if a stream buffer is associated
/**
* @brief Squeezes characters.
- * @param c The character to narrow.
- * @param dfault The character to narrow.
+ * @param __c The character to narrow.
+ * @param __dfault The character to narrow.
* @return The narrowed character.
*
* Maps a character of @c char_type to a character of @c char,
/**
* @brief Widens characters.
- * @param c The character to widen.
+ * @param __c The character to widen.
* @return The widened character.
*
* Maps a character of @c char to a character of @c char_type.
void
init(basic_streambuf<_CharT, _Traits>* __sb);
+#if __cplusplus >= 201103L
+ basic_ios(const basic_ios&) = delete;
+ basic_ios& operator=(const basic_ios&) = delete;
+
+ void
+ move(basic_ios& __rhs)
+ {
+ ios_base::_M_move(__rhs);
+ _M_cache_locale(_M_ios_locale);
+ this->tie(__rhs.tie(nullptr));
+ _M_fill = __rhs._M_fill;
+ _M_fill_init = __rhs._M_fill_init;
+ _M_streambuf = nullptr;
+ }
+
+ void
+ move(basic_ios&& __rhs)
+ { this->move(__rhs); }
+
+ void
+ swap(basic_ios& __rhs) noexcept
+ {
+ ios_base::_M_swap(__rhs);
+ _M_cache_locale(_M_ios_locale);
+ __rhs._M_cache_locale(__rhs._M_ios_locale);
+ std::swap(_M_tie, __rhs._M_tie);
+ std::swap(_M_fill, __rhs._M_fill);
+ std::swap(_M_fill_init, __rhs._M_fill_init);
+ }
+
+ void
+ set_rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
+ { _M_streambuf = __sb; }
+#endif
+
void
_M_cache_locale(const locale& __loc);
};
-_GLIBCXX_END_NAMESPACE
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
-#ifndef _GLIBCXX_EXPORT_TEMPLATE
#include <bits/basic_ios.tcc>
-#endif
#endif /* _BASIC_IOS_H */