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// <forward_list> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// void splice_after(const_iterator p, forward_list&& x); 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <forward_list> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <iterator> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 1981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef int T; 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst T t1[] = {0, 1, 2, 3, 4, 5, 6, 7}; 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst T t2[] = {10, 11, 12, 13, 14, 15}; 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst int size_t1 = std::end(t1) - std::begin(t1); 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst int size_t2 = std::end(t2) - std::begin(t2); 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnanttemplate <class C> 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttestd(const C& c, int p, int l) 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 3081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typename C::const_iterator i = c.begin(); 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int n1 = 0; 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; n1 < p; ++n1, ++i) 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == t1[n1]); 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int n2 = 0; n2 < l; ++n2, ++i) 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == t2[n2]); 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; n1 < size_t1; ++n1, ++i) 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*i == t1[n1]); 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == size_t1 + l); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 4381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // splicing different containers 4581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef std::forward_list<T> C; 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int l = 0; l <= size_t2; ++l) 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (int p = 0; p <= size_t1; ++p) 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c1(std::begin(t1), std::end(t1)); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c2(t2, t2+l); 526046aced820aaab4f14f2026531dd11d10690691Howard Hinnant 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c1.splice_after(next(c1.cbefore_begin(), p), std::move(c2)); 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant testd(c1, p, l); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 5781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 5881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#if __cplusplus >= 201103L 5981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 6081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant // splicing different containers 6181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef std::forward_list<T, min_allocator<T>> C; 6281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant for (int l = 0; l <= size_t2; ++l) 6381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 6481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant for (int p = 0; p <= size_t1; ++p) 6581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 6681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c1(std::begin(t1), std::end(t1)); 6781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c2(t2, t2+l); 6881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 6981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant c1.splice_after(next(c1.cbefore_begin(), p), std::move(c2)); 7081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant testd(c1, p, l); 7181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 7281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 7381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 7481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#endif 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 76