sbumpc.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <streambuf>
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template <class charT, class traits = char_traits<charT> >
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class basic_streambuf;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// int_type sbumpc();
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <streambuf>
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <cassert>
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int uflow_called = 0;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct test
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public std::basic_streambuf<char>
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typedef std::basic_streambuf<char> base;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test() {}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void setg(char* gbeg, char* gnext, char* gend)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::setg(gbeg, gnext, gend);
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int_type uflow()
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ++uflow_called;
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        return 'a';
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint main()
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        test t;
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        assert(uflow_called == 0);
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        assert(t.sbumpc() == 'a');
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        assert(uflow_called == 1);
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        char in[] = "ABC";
500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        t.setg(in, in, in+sizeof(in));
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(t.sbumpc() == 'A');
523240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch        assert(uflow_called == 1);
533240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch        assert(t.sbumpc() == 'B');
540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        assert(uflow_called == 1);
553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    }
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)