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