From: bkoz Date: Thu, 15 Aug 2002 22:25:39 +0000 (+0000) Subject: 2002-08-15 Benjamin Kosnik X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=a8efbd5454fed129fcc4a6701366f00f4ca33395 2002-08-15 Benjamin Kosnik * include/ext/stdio_filebuf.h (stdio_filebuf): Explicitly set _M_buf_size_opt to zero when unbuffering. * include/bits/fstream.tcc (filebuf::showmanyc): Simplify. Consistency checks for _M_buf_size_opt. Revert PR libstdc++/7445 * src/locale.cc (locale::classic): Revert. * docs/html/17_intro/TODO: Add. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56365 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6b0c9574abc..206d7729b18 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,15 @@ +2002-08-15 Benjamin Kosnik + + * include/ext/stdio_filebuf.h (stdio_filebuf): Explicitly set + _M_buf_size_opt to zero when unbuffering. + * include/bits/fstream.tcc (filebuf::showmanyc): Simplify. + Consistency checks for _M_buf_size_opt. + + Revert PR libstdc++/7445 + * src/locale.cc (locale::classic): Revert. + + * docs/html/17_intro/TODO: Add. + 2002-08-15 Phil Edwards * docs/html/documentation.html: Update doxygen links for 3.2. diff --git a/libstdc++-v3/docs/html/17_intro/TODO b/libstdc++-v3/docs/html/17_intro/TODO index c7a2ecbe24e..2ba36ad10a3 100644 --- a/libstdc++-v3/docs/html/17_intro/TODO +++ b/libstdc++-v3/docs/html/17_intro/TODO @@ -17,7 +17,16 @@ executable speed. - benchmarking addition to the testsuite that does the above. -- implement symbol versioning for ELF targets. +- implement testing for symbol versioning for ELF targets. + +- review streambuf, filebuf, stringbuf to optimize data member +placement. Do pback bits need to be in streambuf? How about +_M_set_indeterminate, etc? + +- Think about naming all member data and member functions consistently +as per +funtions: _M_verb_adverb +data: _M_noun_adjective - exception specifications need to be reviewed for all parts of the library support and utility areas, particularly . diff --git a/libstdc++-v3/include/bits/fstream.tcc b/libstdc++-v3/include/bits/fstream.tcc index 2caeb6e5e58..18dbaf1caae 100644 --- a/libstdc++-v3/include/bits/fstream.tcc +++ b/libstdc++-v3/include/bits/fstream.tcc @@ -90,9 +90,8 @@ namespace std { _M_allocate_internal_buffer(); _M_mode = __mode; - - // For time being, set both (in/out) sets of pointers. _M_set_indeterminate(); + if ((__mode & ios_base::ate) && this->seekoff(0, ios_base::end, __mode) < 0) this->close(); @@ -147,12 +146,7 @@ namespace std bool __testin = _M_mode & ios_base::in; if (__testin && this->is_open()) - { - if (_M_in_cur < _M_in_end) - __ret = _M_in_end - _M_in_cur; - else - __ret = 0; - } + __ret = _M_in_end - _M_in_cur; _M_last_overflowed = false; return __ret; } @@ -316,7 +310,7 @@ namespace std { int_type __ret = traits_type::eof(); bool __testput = _M_out_cur && _M_out_beg < _M_out_end; - bool __testunbuffered = _M_file.is_open() && !_M_buf_size; + bool __testunbuffered = _M_file.is_open() && !_M_buf_size_opt; if (__testput || __testunbuffered) { diff --git a/libstdc++-v3/include/ext/stdio_filebuf.h b/libstdc++-v3/include/ext/stdio_filebuf.h index cd869a8db32..59ab41a03e5 100644 --- a/libstdc++-v3/include/ext/stdio_filebuf.h +++ b/libstdc++-v3/include/ext/stdio_filebuf.h @@ -123,16 +123,18 @@ namespace __gnu_cxx if (this->is_open()) { _M_mode = __mode; - _M_buf_size_opt = __size; - if (__size > 0 && __size < 4) { + // Specify unbuffered. _M_buf = _M_unbuf; _M_buf_size = __size; + _M_buf_size_opt = 0; } else - _M_allocate_internal_buffer(); - + { + _M_buf_size_opt = __size; + _M_allocate_internal_buffer(); + } _M_set_indeterminate(); } } @@ -146,16 +148,18 @@ namespace __gnu_cxx if (this->is_open()) { _M_mode = __mode; - _M_buf_size_opt = __size; - if (__size > 0 && __size < 4) { + // Specify unbuffered. _M_buf = _M_unbuf; _M_buf_size = __size; + _M_buf_size_opt = 0; } else - _M_allocate_internal_buffer(); - + { + _M_buf_size_opt = __size; + _M_allocate_internal_buffer(); + } _M_set_indeterminate(); } } diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc index 3c755bbcba4..3cb9d1b4cbf 100644 --- a/libstdc++-v3/src/locale.cc +++ b/libstdc++-v3/src/locale.cc @@ -284,11 +284,11 @@ namespace std const locale& locale::classic() { + static _STL_mutex_lock __lock __STL_MUTEX_INITIALIZER; + _STL_auto_lock __auto(__lock); + if (!_S_classic) { - static _STL_mutex_lock __lock __STL_MUTEX_INITIALIZER; - _STL_auto_lock __auto(__lock); - try { // 26 Standard facets, 2 references.