1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <iterator>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// insert_iterator
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14712522cfd8f61321b4f197ec0de02b0146afb5a5Howard Hinnant// requires CopyConstructible<Cont::value_type>
15712522cfd8f61321b4f197ec0de02b0146afb5a5Howard Hinnant//   insert_iterator<Cont>&
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//   operator=(const Cont::value_type& value);
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <iterator>
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <vector>
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
2153c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow#include "nasty_containers.hpp"
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class C>
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest(C c1, typename C::difference_type j,
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant     typename C::value_type x1, typename C::value_type x2,
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant     typename C::value_type x3, const C& c2)
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    std::insert_iterator<C> q(c1, c1.begin() + j);
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    q = x1;
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    q = x2;
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    q = x3;
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    assert(c1 == c2);
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class C>
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinsert3at(C& c, typename C::iterator i,
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant     typename C::value_type x1, typename C::value_type x2,
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant     typename C::value_type x3)
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    i = c.insert(i, x1);
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    i = c.insert(++i, x2);
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    c.insert(++i, x3);
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
4953c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    {
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    typedef std::vector<int> C;
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    C c1;
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    for (int i = 0; i < 3; ++i)
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        c1.push_back(i);
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    C c2 = c1;
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    insert3at(c2, c2.begin(), 'a', 'b', 'c');
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(c1, 0, 'a', 'b', 'c', c2);
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    c2 = c1;
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    insert3at(c2, c2.begin()+1, 'a', 'b', 'c');
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(c1, 1, 'a', 'b', 'c', c2);
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    c2 = c1;
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    insert3at(c2, c2.begin()+2, 'a', 'b', 'c');
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(c1, 2, 'a', 'b', 'c', c2);
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    c2 = c1;
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    insert3at(c2, c2.begin()+3, 'a', 'b', 'c');
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    test(c1, 3, 'a', 'b', 'c', c2);
6653c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    }
6753c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    {
6853c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    typedef nasty_vector<int> C;
6953c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    C c1;
7053c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    for (int i = 0; i < 3; ++i)
7153c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow        c1.push_back(i);
7253c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    C c2 = c1;
7353c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    insert3at(c2, c2.begin(), 'a', 'b', 'c');
7453c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    test(c1, 0, 'a', 'b', 'c', c2);
7553c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    c2 = c1;
7653c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    insert3at(c2, c2.begin()+1, 'a', 'b', 'c');
7753c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    test(c1, 1, 'a', 'b', 'c', c2);
7853c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    c2 = c1;
7953c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    insert3at(c2, c2.begin()+2, 'a', 'b', 'c');
8053c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    test(c1, 2, 'a', 'b', 'c', c2);
8153c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    c2 = c1;
8253c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    insert3at(c2, c2.begin()+3, 'a', 'b', 'c');
8353c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    test(c1, 3, 'a', 'b', 'c', c2);
8453c0e72d5c5b7ccfa2234efbd84be5d6749dea89Marshall Clow    }
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
86