111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// The LLVM Compiler Infrastructure 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <iterator> 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// insert_iterator 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// requires CopyConstructible<Cont::value_type> 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// insert_iterator<Cont>& 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// operator=(const Cont::value_type& value); 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <iterator> 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <vector> 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert> 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "nasty_containers.hpp" 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class C> 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttest(C c1, typename C::difference_type j, 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename C::value_type x1, typename C::value_type x2, 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename C::value_type x3, const C& c2) 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::insert_iterator<C> q(c1, c1.begin() + j); 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert q = x1; 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert q = x2; 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert q = x3; 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(c1 == c2); 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class C> 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinsert3at(C& c, typename C::iterator i, 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename C::value_type x1, typename C::value_type x2, 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename C::value_type x3) 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert i = c.insert(i, x1); 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert i = c.insert(++i, x2); 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c.insert(++i, x3); 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main() 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef std::vector<int> C; 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert C c1; 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (int i = 0; i < 3; ++i) 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c1.push_back(i); 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert C c2 = c1; 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert3at(c2, c2.begin(), 'a', 'b', 'c'); 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test(c1, 0, 'a', 'b', 'c', c2); 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c2 = c1; 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert3at(c2, c2.begin()+1, 'a', 'b', 'c'); 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test(c1, 1, 'a', 'b', 'c', c2); 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c2 = c1; 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert3at(c2, c2.begin()+2, 'a', 'b', 'c'); 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test(c1, 2, 'a', 'b', 'c', c2); 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c2 = c1; 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert3at(c2, c2.begin()+3, 'a', 'b', 'c'); 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test(c1, 3, 'a', 'b', 'c', c2); 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef nasty_vector<int> C; 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert C c1; 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (int i = 0; i < 3; ++i) 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c1.push_back(i); 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert C c2 = c1; 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert3at(c2, c2.begin(), 'a', 'b', 'c'); 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test(c1, 0, 'a', 'b', 'c', c2); 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c2 = c1; 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert3at(c2, c2.begin()+1, 'a', 'b', 'c'); 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test(c1, 1, 'a', 'b', 'c', c2); 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c2 = c1; 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert3at(c2, c2.begin()+2, 'a', 'b', 'c'); 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test(c1, 2, 'a', 'b', 'c', c2); 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert c2 = c1; 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert insert3at(c2, c2.begin()+3, 'a', 'b', 'c'); 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert test(c1, 3, 'a', 'b', 'c', c2); 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 86