#include <deque>
#include <vector>
#include <iostream>
struct checkpoint {
checkpoint() {std::cout << "default construct\n";}
checkpoint(const checkpoint& rhs) {std::cout << "copy construct\n";}
checkpoint&operator=(const checkpoint& rhs) {std::cout << "copy assign\n"; return *this;}
};
void push(std::deque<std::vector<checkpoint> >&cont, std::vector<checkpoint>& indata) {
cont.push_back(std::vector<checkpoint>());
cont.back().swap(indata);
}
void pop(std::deque<std::vector<checkpoint> >&cont, std::vector<checkpoint>& outdata) {
cont.front().swap(outdata);
cont.pop_front();
}
int main() {
std::deque<std::vector<checkpoint> > cont;
std::vector<checkpoint> largedata(1);
std::cout << "checkpoint\n";
push(cont, largedata);
std::cout << "checkpoint\n";
pop(cont, largedata);
std::cout << "checkpoint\n";
return 0;
}
I2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CgpzdHJ1Y3QgY2hlY2twb2ludCB7CiAgICBjaGVja3BvaW50KCkge3N0ZDo6Y291dCA8PCAiZGVmYXVsdCBjb25zdHJ1Y3RcbiI7fQogICAgY2hlY2twb2ludChjb25zdCBjaGVja3BvaW50JiByaHMpIHtzdGQ6OmNvdXQgPDwgImNvcHkgY29uc3RydWN0XG4iO30KICAgIGNoZWNrcG9pbnQmb3BlcmF0b3I9KGNvbnN0IGNoZWNrcG9pbnQmIHJocykge3N0ZDo6Y291dCA8PCAiY29weSBhc3NpZ25cbiI7IHJldHVybiAqdGhpczt9Cn07Cgp2b2lkIHB1c2goc3RkOjpkZXF1ZTxzdGQ6OnZlY3RvcjxjaGVja3BvaW50PiA+JmNvbnQsIHN0ZDo6dmVjdG9yPGNoZWNrcG9pbnQ+JiBpbmRhdGEpIHsKICAgIGNvbnQucHVzaF9iYWNrKHN0ZDo6dmVjdG9yPGNoZWNrcG9pbnQ+KCkpOwogICAgY29udC5iYWNrKCkuc3dhcChpbmRhdGEpOwp9CnZvaWQgcG9wKHN0ZDo6ZGVxdWU8c3RkOjp2ZWN0b3I8Y2hlY2twb2ludD4gPiZjb250LCBzdGQ6OnZlY3RvcjxjaGVja3BvaW50PiYgb3V0ZGF0YSkgewogICAgY29udC5mcm9udCgpLnN3YXAob3V0ZGF0YSk7CiAgICBjb250LnBvcF9mcm9udCgpOwp9CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6ZGVxdWU8c3RkOjp2ZWN0b3I8Y2hlY2twb2ludD4gPiBjb250OwogICAgc3RkOjp2ZWN0b3I8Y2hlY2twb2ludD4gbGFyZ2VkYXRhKDEpOwogICAgc3RkOjpjb3V0IDw8ICJjaGVja3BvaW50XG4iOwogICAgcHVzaChjb250LCBsYXJnZWRhdGEpOwogICAgc3RkOjpjb3V0IDw8ICJjaGVja3BvaW50XG4iOwogICAgcG9wKGNvbnQsIGxhcmdlZGF0YSk7CiAgICBzdGQ6OmNvdXQgPDwgImNoZWNrcG9pbnRcbiI7CiAgICByZXR1cm4gMDsKIAoKfQ==