[libcxx-commits] [libcxx] 61517a8 - [libc++][NFC] Inline fstream functions into the class body (#211738)
via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Jul 26 08:46:19 PDT 2026
Author: Nikolas Klauser
Date: 2026-07-26T17:46:14+02:00
New Revision: 61517a81407d2a7353815dae7625caa1749b99ca
URL: https://github.com/llvm/llvm-project/commit/61517a81407d2a7353815dae7625caa1749b99ca
DIFF: https://github.com/llvm/llvm-project/commit/61517a81407d2a7353815dae7625caa1749b99ca.diff
LOG: [libc++][NFC] Inline fstream functions into the class body (#211738)
The `fstream` member functions are all really short, so inlining them
removes quite a bit of boiler plate code.
Added:
Modified:
libcxx/include/fstream
Removed:
################################################################################
diff --git a/libcxx/include/fstream b/libcxx/include/fstream
index 4b276251aa917..a5c29bb942867 100644
--- a/libcxx/include/fstream
+++ b/libcxx/include/fstream
@@ -1500,15 +1500,28 @@ public:
using native_handle_type = typename basic_filebuf<_CharT, _Traits>::native_handle_type;
# endif
- _LIBCPP_HIDE_FROM_ABI basic_fstream();
+ _LIBCPP_HIDE_FROM_ABI basic_fstream() : basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {}
_LIBCPP_HIDE_FROM_ABI explicit basic_fstream(const char* __s,
- ios_base::openmode __mode = ios_base::in | ios_base::out);
+ ios_base::openmode __mode = ios_base::in | ios_base::out)
+ : basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
+ if (__sb_.open(__s, __mode) == nullptr)
+ this->setstate(ios_base::failbit);
+ }
# if _LIBCPP_HAS_OPEN_WITH_WCHAR
_LIBCPP_HIDE_FROM_ABI explicit basic_fstream(const wchar_t* __s,
- ios_base::openmode __mode = ios_base::in | ios_base::out);
+ ios_base::openmode __mode = ios_base::in | ios_base::out)
+ : basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
+ if (__sb_.open(__s, __mode) == nullptr)
+ this->setstate(ios_base::failbit);
+ }
# endif
+
_LIBCPP_HIDE_FROM_ABI explicit basic_fstream(const string& __s,
- ios_base::openmode __mode = ios_base::in | ios_base::out);
+ ios_base::openmode __mode = ios_base::in | ios_base::out)
+ : basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
+ if (__sb_.open(__s, __mode) == nullptr)
+ this->setstate(ios_base::failbit);
+ }
# if _LIBCPP_STD_VER >= 17
template <class _Tp, class = enable_if_t<is_same_v<_Tp, filesystem::path>>>
@@ -1516,24 +1529,55 @@ public:
: basic_fstream(__p.c_str(), __mode) {}
# endif // _LIBCPP_STD_VER >= 17
- _LIBCPP_HIDE_FROM_ABI basic_fstream(basic_fstream&& __rhs);
+ _LIBCPP_HIDE_FROM_ABI basic_fstream(basic_fstream&& __rhs)
+ : basic_iostream<char_type, traits_type>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
+ this->set_rdbuf(std::addressof(__sb_));
+ }
- _LIBCPP_HIDE_FROM_ABI basic_fstream& operator=(basic_fstream&& __rhs);
+ _LIBCPP_HIDE_FROM_ABI basic_fstream& operator=(basic_fstream&& __rhs) {
+ basic_iostream<char_type, traits_type>::operator=(std::move(__rhs));
+ __sb_ = std::move(__rhs.__sb_);
+ return *this;
+ }
- _LIBCPP_HIDE_FROM_ABI void swap(basic_fstream& __rhs);
+ _LIBCPP_HIDE_FROM_ABI void swap(basic_fstream& __rhs) {
+ basic_iostream<char_type, traits_type>::swap(__rhs);
+ __sb_.swap(__rhs.__sb_);
+ }
+
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI basic_filebuf<char_type, traits_type>* rdbuf() const {
+ return const_cast<basic_filebuf<char_type, traits_type>*>(std::addressof(__sb_));
+ }
- [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI basic_filebuf<char_type, traits_type>* rdbuf() const;
# if _LIBCPP_STD_VER >= 26
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI native_handle_type native_handle() const noexcept {
return rdbuf()->native_handle();
}
# endif
- [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool is_open() const;
- _LIBCPP_HIDE_FROM_ABI void open(const char* __s, ios_base::openmode __mode = ios_base::in | ios_base::out);
+
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool is_open() const { return __sb_.is_open(); }
+
+ _LIBCPP_HIDE_FROM_ABI void open(const char* __s, ios_base::openmode __mode = ios_base::in | ios_base::out) {
+ if (__sb_.open(__s, __mode))
+ this->clear();
+ else
+ this->setstate(ios_base::failbit);
+ }
+
# if _LIBCPP_HAS_OPEN_WITH_WCHAR
- void open(const wchar_t* __s, ios_base::openmode __mode = ios_base::in | ios_base::out);
+ void open(const wchar_t* __s, ios_base::openmode __mode = ios_base::in | ios_base::out) {
+ if (__sb_.open(__s, __mode))
+ this->clear();
+ else
+ this->setstate(ios_base::failbit);
+ }
# endif
- _LIBCPP_HIDE_FROM_ABI void open(const string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out);
+ _LIBCPP_HIDE_FROM_ABI void open(const string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out) {
+ if (__sb_.open(__s, __mode))
+ this->clear();
+ else
+ this->setstate(ios_base::failbit);
+ }
# if _LIBCPP_STD_VER >= 17
_LIBCPP_HIDE_FROM_ABI void
@@ -1542,106 +1586,20 @@ public:
}
# endif // _LIBCPP_STD_VER >= 17
- _LIBCPP_HIDE_FROM_ABI void close();
+ _LIBCPP_HIDE_FROM_ABI void close() {
+ if (__sb_.close() == nullptr)
+ this->setstate(ios_base::failbit);
+ }
private:
basic_filebuf<char_type, traits_type> __sb_;
};
-template <class _CharT, class _Traits>
-inline basic_fstream<_CharT, _Traits>::basic_fstream()
- : basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {}
-
-template <class _CharT, class _Traits>
-inline basic_fstream<_CharT, _Traits>::basic_fstream(const char* __s, ios_base::openmode __mode)
- : basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
- if (__sb_.open(__s, __mode) == nullptr)
- this->setstate(ios_base::failbit);
-}
-
-# if _LIBCPP_HAS_OPEN_WITH_WCHAR
-template <class _CharT, class _Traits>
-inline basic_fstream<_CharT, _Traits>::basic_fstream(const wchar_t* __s, ios_base::openmode __mode)
- : basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
- if (__sb_.open(__s, __mode) == nullptr)
- this->setstate(ios_base::failbit);
-}
-# endif
-
-template <class _CharT, class _Traits>
-inline basic_fstream<_CharT, _Traits>::basic_fstream(const string& __s, ios_base::openmode __mode)
- : basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
- if (__sb_.open(__s, __mode) == nullptr)
- this->setstate(ios_base::failbit);
-}
-
-// extension
-template <class _CharT, class _Traits>
-inline basic_fstream<_CharT, _Traits>::basic_fstream(basic_fstream&& __rhs)
- : basic_iostream<char_type, traits_type>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
- this->set_rdbuf(std::addressof(__sb_));
-}
-
-template <class _CharT, class _Traits>
-inline basic_fstream<_CharT, _Traits>& basic_fstream<_CharT, _Traits>::operator=(basic_fstream&& __rhs) {
- basic_iostream<char_type, traits_type>::operator=(std::move(__rhs));
- __sb_ = std::move(__rhs.__sb_);
- return *this;
-}
-
-template <class _CharT, class _Traits>
-inline void basic_fstream<_CharT, _Traits>::swap(basic_fstream& __rhs) {
- basic_iostream<char_type, traits_type>::swap(__rhs);
- __sb_.swap(__rhs.__sb_);
-}
-
template <class _CharT, class _Traits>
inline _LIBCPP_HIDE_FROM_ABI void swap(basic_fstream<_CharT, _Traits>& __x, basic_fstream<_CharT, _Traits>& __y) {
__x.swap(__y);
}
-template <class _CharT, class _Traits>
-inline basic_filebuf<_CharT, _Traits>* basic_fstream<_CharT, _Traits>::rdbuf() const {
- return const_cast<basic_filebuf<char_type, traits_type>*>(std::addressof(__sb_));
-}
-
-template <class _CharT, class _Traits>
-inline bool basic_fstream<_CharT, _Traits>::is_open() const {
- return __sb_.is_open();
-}
-
-template <class _CharT, class _Traits>
-void basic_fstream<_CharT, _Traits>::open(const char* __s, ios_base::openmode __mode) {
- if (__sb_.open(__s, __mode))
- this->clear();
- else
- this->setstate(ios_base::failbit);
-}
-
-# if _LIBCPP_HAS_OPEN_WITH_WCHAR
-template <class _CharT, class _Traits>
-void basic_fstream<_CharT, _Traits>::open(const wchar_t* __s, ios_base::openmode __mode) {
- if (__sb_.open(__s, __mode))
- this->clear();
- else
- this->setstate(ios_base::failbit);
-}
-# endif
-
-template <class _CharT, class _Traits>
-void basic_fstream<_CharT, _Traits>::open(const string& __s, ios_base::openmode __mode) {
- if (__sb_.open(__s, __mode))
- this->clear();
- else
- this->setstate(ios_base::failbit);
-}
-
-template <class _CharT, class _Traits>
-inline void basic_fstream<_CharT, _Traits>::close() {
- if (__sb_.close() == nullptr)
- this->setstate(ios_base::failbit);
-}
-
# if _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ifstream<char>;
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ofstream<char>;
More information about the libcxx-commits
mailing list