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// iterator insert_after(const_iterator p, const value_type& v); 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <forward_list> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 17061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 1881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef int T; 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::forward_list<T> C; 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef C::iterator I; 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c; 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant I i = c.insert_after(c.cbefore_begin(), 0); 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == c.begin()); 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.front() == 0); 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.front() == 0); 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 1); 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant i = c.insert_after(c.cbegin(), 1); 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == next(c.begin())); 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.front() == 0); 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin()) == 1); 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 2); 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant i = c.insert_after(next(c.cbegin()), 2); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == next(c.begin(), 2)); 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.front() == 0); 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin()) == 1); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 2) == 2); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 3); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant i = c.insert_after(c.cbegin(), 3); 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == next(c.begin())); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.front() == 0); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 1) == 3); 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 2) == 1); 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 3) == 2); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 4); 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 5381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#if __cplusplus >= 201103L 5481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 5581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef int T; 5681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef std::forward_list<T, min_allocator<T>> C; 5781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef C::iterator I; 5881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c; 5981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant I i = c.insert_after(c.cbefore_begin(), 0); 6081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == c.begin()); 6181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c.front() == 0); 6281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c.front() == 0); 6381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 1); 6481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 6581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant i = c.insert_after(c.cbegin(), 1); 6681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == next(c.begin())); 6781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c.front() == 0); 6881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin()) == 1); 6981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 2); 7081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 7181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant i = c.insert_after(next(c.cbegin()), 2); 7281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == next(c.begin(), 2)); 7381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c.front() == 0); 7481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin()) == 1); 7581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 2) == 2); 7681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 3); 7781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 7881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant i = c.insert_after(c.cbegin(), 3); 7981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == next(c.begin())); 8081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(c.front() == 0); 8181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 1) == 3); 8281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 2) == 1); 8381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 3) == 2); 8481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 4); 8581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 8681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#endif 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 88