18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//===----------------------------------------------------------------------===//
28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//
38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//                     The LLVM Compiler Infrastructure
48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//
58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels// This file is dual licensed under the MIT and the University of Illinois Open
68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels// Source Licenses. See LICENSE.TXT for details.
78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//
88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//===----------------------------------------------------------------------===//
98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels// <streambuf>
118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels// template <class charT, class traits = char_traits<charT> >
138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels// class basic_streambuf;
148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels// void pbump(int n);
168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <streambuf>
188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <cassert>
198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstemplate <class CharT>
218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsstruct test
228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    : public std::basic_streambuf<CharT>
238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels{
248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    typedef std::basic_streambuf<CharT> base;
258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    test() {}
278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    void setp(CharT* pbeg, CharT* pend)
298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    {
308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        base::setp(pbeg, pend);
318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    void pbump(int n)
348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    {
358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        CharT* pbeg = base::pbase();
368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        CharT* pnext = base::pptr();
378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        CharT* pend = base::epptr();
388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        base::pbump(n);
398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        assert(base::pbase() == pbeg);
408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        assert(base::pptr() == pnext+n);
418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        assert(base::epptr() == pend);
428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels};
448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsint main()
468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels{
478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    {
488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        test<char> t;
498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        char in[] = "ABCDE";
508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        t.setp(in, in+sizeof(in)/sizeof(in[0]));
518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        t.pbump(2);
528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        t.pbump(1);
538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    {
558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        test<wchar_t> t;
568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        wchar_t in[] = L"ABCDE";
578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        t.setp(in, in+sizeof(in)/sizeof(in[0]));
588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        t.pbump(3);
598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        t.pbump(1);
608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels}
628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels