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 127a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant// iterator erase_after(const_iterator first, const_iterator last); 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 const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c(std::begin(t), std::end(t)); 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 277a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant C::iterator i = c.erase_after(next(c.cbefore_begin(), 4), next(c.cbefore_begin(), 4)); 287a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant assert(i == next(c.cbefore_begin(), 4)); 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 10); 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 0) == 0); 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 1) == 1); 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 2) == 2); 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 3) == 3); 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 4) == 4); 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 5) == 5); 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 6) == 6); 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 7) == 7); 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 8) == 8); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 9) == 9); 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 417a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 2), next(c.cbefore_begin(), 5)); 427a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant assert(i == next(c.begin(), 2)); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 8); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 0) == 0); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 1) == 1); 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 2) == 4); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 3) == 5); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 4) == 6); 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 5) == 7); 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 6) == 8); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 7) == 9); 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 537a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 2), next(c.cbefore_begin(), 3)); 547a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant assert(i == next(c.begin(), 2)); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 8); 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 0) == 0); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 1) == 1); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 2) == 4); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 3) == 5); 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 4) == 6); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 5) == 7); 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 6) == 8); 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 7) == 9); 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 657a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 5), next(c.cbefore_begin(), 9)); 667a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant assert(i == c.end()); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 5); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 0) == 0); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 1) == 1); 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 2) == 4); 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 3) == 5); 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 4) == 6); 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 747a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 0), next(c.cbefore_begin(), 2)); 757a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant assert(i == c.begin()); 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 4); 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 0) == 1); 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 1) == 4); 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 2) == 5); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(c.begin(), 3) == 6); 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 827a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 0), next(c.cbefore_begin(), 5)); 837a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant assert(i == c.begin()); 847a2523b201eb46508db7570718da915f8f982a4aHoward Hinnant assert(i == c.end()); 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(distance(c.begin(), c.end()) == 0); 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 8781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#if __cplusplus >= 201103L 8881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant { 8981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef int T; 9081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant typedef std::forward_list<T, min_allocator<T>> C; 9181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 9281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C c(std::begin(t), std::end(t)); 9381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 9481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant C::iterator i = c.erase_after(next(c.cbefore_begin(), 4), next(c.cbefore_begin(), 4)); 9581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == next(c.cbefore_begin(), 4)); 9681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 10); 9781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 0) == 0); 9881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 1) == 1); 9981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 2) == 2); 10081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 3) == 3); 10181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 4) == 4); 10281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 5) == 5); 10381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 6) == 6); 10481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 7) == 7); 10581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 8) == 8); 10681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 9) == 9); 10781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 10881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 2), next(c.cbefore_begin(), 5)); 10981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == next(c.begin(), 2)); 11081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 8); 11181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 0) == 0); 11281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 1) == 1); 11381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 2) == 4); 11481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 3) == 5); 11581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 4) == 6); 11681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 5) == 7); 11781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 6) == 8); 11881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 7) == 9); 11981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 12081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 2), next(c.cbefore_begin(), 3)); 12181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == next(c.begin(), 2)); 12281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 8); 12381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 0) == 0); 12481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 1) == 1); 12581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 2) == 4); 12681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 3) == 5); 12781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 4) == 6); 12881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 5) == 7); 12981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 6) == 8); 13081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 7) == 9); 13181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 13281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 5), next(c.cbefore_begin(), 9)); 13381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == c.end()); 13481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 5); 13581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 0) == 0); 13681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 1) == 1); 13781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 2) == 4); 13881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 3) == 5); 13981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 4) == 6); 14081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 14181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 0), next(c.cbefore_begin(), 2)); 14281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == c.begin()); 14381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 4); 14481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 0) == 1); 14581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 1) == 4); 14681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 2) == 5); 14781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(*next(c.begin(), 3) == 6); 14881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant 14981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant i = c.erase_after(next(c.cbefore_begin(), 0), next(c.cbefore_begin(), 5)); 15081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == c.begin()); 15181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(i == c.end()); 15281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant assert(distance(c.begin(), c.end()) == 0); 15381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant } 15481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#endif 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 156