You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
/*
|
|
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
|
*/
|
|
|
|
struct item {
|
|
|
|
int data;
|
|
|
|
item* next;
|
|
|
|
};
|
|
|
|
|
|
|
|
template <typename E>
|
|
|
|
struct List {
|
|
|
|
List(E* E::*next_ptr) : head(nullptr), next_ptr(next_ptr) {}
|
|
|
|
|
|
|
|
void add(E* e) {
|
|
|
|
e->*next_ptr = head;
|
|
|
|
head = e;
|
|
|
|
}
|
|
|
|
|
|
|
|
void add_byref(E& e) {
|
|
|
|
e.*next_ptr = head;
|
|
|
|
head = &e;
|
|
|
|
}
|
|
|
|
|
|
|
|
E* head;
|
|
|
|
E* E::*next_ptr;
|
|
|
|
};
|
|
|
|
|
|
|
|
void skip() { List<item> l(&item::next); }
|
|
|
|
|
|
|
|
void noskip(List<item> l) {
|
|
|
|
item i;
|
|
|
|
l.add(&i);
|
|
|
|
l.add_byref(i);
|
|
|
|
}
|