1
1
#include " trade_v1/trade.hpp"
2
+ #include " trade_v1/private/meta.hpp"
2
3
3
4
#include < condition_variable>
4
5
#include < cstdio>
@@ -155,20 +156,20 @@ struct trade_v1::Private::Static {
155
156
trade_v1::Private::access_base_t *
156
157
trade_v1::Private::insert (transaction_base_t *transaction,
157
158
atom_mono_t *access_atom,
158
- size_t align_m1,
159
- size_t size) {
159
+ const meta_t &meta) {
160
160
auto root = transaction->m_accesses ;
161
161
162
162
auto access_ix = lock_ix_of (access_atom);
163
163
164
164
if (!root) {
165
- auto access = Static::alloc_align (transaction, align_m1 );
166
- if (Static::alloc_limit (transaction, access , size )) {
165
+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
166
+ if (Static::alloc_limit (transaction, access , meta. m_access_size )) {
167
167
access ->m_children [0 ] = nullptr ;
168
168
access ->m_children [1 ] = nullptr ;
169
169
access ->m_atom = access_atom;
170
170
access ->m_state = INITIAL;
171
171
access ->m_lock_ix = access_ix;
172
+ access ->m_destroy = meta.m_destroy ;
172
173
return transaction->m_accesses = access ;
173
174
} else {
174
175
throw transaction;
@@ -190,13 +191,14 @@ trade_v1::Private::insert(transaction_base_t *transaction,
190
191
*side_near[0 ] = nullptr ;
191
192
*side_near[1 ] = root->m_children [1 ];
192
193
root->m_children [1 ] = side_root[1 ];
193
- auto access = Static::alloc_align (transaction, align_m1 );
194
- if (Static::alloc_limit (transaction, access , size )) {
194
+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
195
+ if (Static::alloc_limit (transaction, access , meta. m_access_size )) {
195
196
access ->m_children [0 ] = side_root[0 ];
196
197
access ->m_children [1 ] = root;
197
198
access ->m_atom = access_atom;
198
199
access ->m_state = INITIAL;
199
200
access ->m_lock_ix = access_ix;
201
+ access ->m_destroy = meta.m_destroy ;
200
202
return transaction->m_accesses = access ;
201
203
} else {
202
204
root->m_children [0 ] = side_root[0 ];
@@ -215,13 +217,15 @@ trade_v1::Private::insert(transaction_base_t *transaction,
215
217
if (!next) {
216
218
*side_near[0 ] = nullptr ;
217
219
*side_near[1 ] = root;
218
- auto access = Static::alloc_align (transaction, align_m1);
219
- if (Static::alloc_limit (transaction, access , size)) {
220
+ auto access =
221
+ Static::alloc_align (transaction, meta.m_access_align_m1 );
222
+ if (Static::alloc_limit (transaction, access , meta.m_access_size )) {
220
223
access ->m_children [0 ] = side_root[0 ];
221
224
access ->m_children [1 ] = side_root[1 ];
222
225
access ->m_atom = access_atom;
223
226
access ->m_state = INITIAL;
224
227
access ->m_lock_ix = access_ix;
228
+ access ->m_destroy = meta.m_destroy ;
225
229
return transaction->m_accesses = access ;
226
230
} else {
227
231
root->m_children [0 ] = side_root[0 ];
@@ -241,13 +245,14 @@ trade_v1::Private::insert(transaction_base_t *transaction,
241
245
*side_near[0 ] = root->m_children [0 ];
242
246
*side_near[1 ] = nullptr ;
243
247
root->m_children [0 ] = side_root[0 ];
244
- auto access = Static::alloc_align (transaction, align_m1 );
245
- if (Static::alloc_limit (transaction, access , size )) {
248
+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
249
+ if (Static::alloc_limit (transaction, access , meta. m_access_size )) {
246
250
access ->m_children [0 ] = root;
247
251
access ->m_children [1 ] = side_root[1 ];
248
252
access ->m_atom = access_atom;
249
253
access ->m_state = INITIAL;
250
254
access ->m_lock_ix = access_ix;
255
+ access ->m_destroy = meta.m_destroy ;
251
256
return transaction->m_accesses = access ;
252
257
} else {
253
258
root->m_children [1 ] = side_root[1 ];
@@ -266,13 +271,15 @@ trade_v1::Private::insert(transaction_base_t *transaction,
266
271
if (!next) {
267
272
*side_near[0 ] = root;
268
273
*side_near[1 ] = nullptr ;
269
- auto access = Static::alloc_align (transaction, align_m1);
270
- if (Static::alloc_limit (transaction, access , size)) {
274
+ auto access =
275
+ Static::alloc_align (transaction, meta.m_access_align_m1 );
276
+ if (Static::alloc_limit (transaction, access , meta.m_access_size )) {
271
277
access ->m_children [0 ] = side_root[0 ];
272
278
access ->m_children [1 ] = side_root[1 ];
273
279
access ->m_atom = access_atom;
274
280
access ->m_state = INITIAL;
275
281
access ->m_lock_ix = access_ix;
282
+ access ->m_destroy = meta.m_destroy ;
276
283
return transaction->m_accesses = access ;
277
284
} else {
278
285
root->m_children [1 ] = side_root[1 ];
0 commit comments