[v3] Fix second half of libstdc++/6745

Paolo Carlini pcarlini@unitus.it
Mon Nov 18 16:57:00 GMT 2002


Jonathan Lennox wrote:

>I'm pretty sure it can't happen with any of the standard streambuf classes
>defined by the C++ standard, but it can easily happen for user-defined
>streambuf classes.
>
>As an example, consider test_buffer_1 from
>libstdc++/testsuite/27_io/ostream_inserter_other.cc:
>  class test_buffer_1 : public std::streambuf 
>  {
>  public:
>    test_buffer_1(const std::string& s) : str(s), it(str.begin()) { }
>  
>  protected:
>    virtual int underflow() { return (it != str.end() ? *it : EOF); }
>    virtual int uflow() { return (it != str.end() ? *it++ : EOF); }
>
>  private:
>    const std::string str;
>    std::string::const_iterator it;
>  };
>
>__copy_streambufs will loop once without your patch, but s.length() times
>with it, if stdin is a tty.
>
>An actual practical example is something like Matt Austern's syncstream,
>which is attached to PR 8071.
>
I want to study this in more detail but basically I believe you are 
right: we have a performance
issue in such cases. Could you possibly work out a patch along the lines 
which you suggested?
Not adding new public members to basic_filebuf, however...

Paolo



More information about the Libstdc++ mailing list