55 const ptrdiff_t loc_prev = offsetof(struct node, prev); |
55 const ptrdiff_t loc_prev = offsetof(struct node, prev); |
56 const ptrdiff_t loc_next = offsetof(struct node, next); |
56 const ptrdiff_t loc_next = offsetof(struct node, next); |
57 const ptrdiff_t loc_data = offsetof(struct node, data); |
57 const ptrdiff_t loc_data = offsetof(struct node, data); |
58 |
58 |
59 struct node_test_data { |
59 struct node_test_data { |
60 node *begin; |
60 node *begin = nullptr; |
61 |
61 |
62 explicit node_test_data(node *begin) : begin(begin) {} |
62 explicit node_test_data(node *begin) : begin(begin) { |
63 node_test_data(node_test_data&) = delete; |
|
64 node_test_data(node_test_data&&) = default; |
|
65 |
|
66 ~node_test_data() { |
|
67 auto n = begin; |
63 auto n = begin; |
68 while (n != nullptr) { |
64 while (n != nullptr) { |
69 auto next = n->next; |
65 nodes.push_back(n); |
70 delete n; |
66 n = n->next; |
71 n = next; |
|
72 } |
67 } |
73 } |
68 } |
|
69 |
|
70 node_test_data(node_test_data &) = delete; |
|
71 |
|
72 node_test_data(node_test_data &&) = default; |
|
73 |
|
74 ~node_test_data() { |
|
75 for (auto &&n: nodes) delete n; |
|
76 } |
|
77 |
|
78 private: |
|
79 std::vector<node *> nodes; |
74 }; |
80 }; |
75 |
81 |
76 static node_test_data create_nodes_test_data(size_t len) { |
82 static node_test_data create_nodes_test_data(size_t len) { |
77 if (len == 0) return node_test_data{nullptr}; |
83 if (len == 0) return node_test_data{nullptr}; |
78 auto begin = new node; |
84 auto begin = new node; |