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>
@@ -153,20 +154,20 @@ struct trade_v1::Private::Static {
153
154
trade_v1::Private::access_base_t *
154
155
trade_v1::Private::insert (transaction_base_t *transaction,
155
156
atom_mono_t *access_atom,
156
- size_t align_m1,
157
- size_t size) {
157
+ const meta_t &meta) {
158
158
auto root = transaction->m_accesses ;
159
159
160
160
auto access_ix = lock_ix_of (access_atom);
161
161
162
162
if (!root) {
163
- auto access = Static::alloc_align (transaction, align_m1 );
164
- if (Static::alloc_limit (transaction, access , size )) {
163
+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
164
+ if (Static::alloc_limit (transaction, access , meta. m_access_size )) {
165
165
access ->m_children [0 ] = nullptr ;
166
166
access ->m_children [1 ] = nullptr ;
167
167
access ->m_atom = access_atom;
168
168
access ->m_state = INITIAL;
169
169
access ->m_lock_ix = access_ix;
170
+ access ->m_destroy = meta.m_destroy ;
170
171
return transaction->m_accesses = access ;
171
172
} else {
172
173
throw transaction;
@@ -188,13 +189,14 @@ trade_v1::Private::insert(transaction_base_t *transaction,
188
189
*side_near[0 ] = nullptr ;
189
190
*side_near[1 ] = root->m_children [1 ];
190
191
root->m_children [1 ] = side_root[1 ];
191
- auto access = Static::alloc_align (transaction, align_m1 );
192
- if (Static::alloc_limit (transaction, access , size )) {
192
+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
193
+ if (Static::alloc_limit (transaction, access , meta. m_access_size )) {
193
194
access ->m_children [0 ] = side_root[0 ];
194
195
access ->m_children [1 ] = root;
195
196
access ->m_atom = access_atom;
196
197
access ->m_state = INITIAL;
197
198
access ->m_lock_ix = access_ix;
199
+ access ->m_destroy = meta.m_destroy ;
198
200
return transaction->m_accesses = access ;
199
201
} else {
200
202
root->m_children [0 ] = side_root[0 ];
@@ -213,13 +215,15 @@ trade_v1::Private::insert(transaction_base_t *transaction,
213
215
if (!next) {
214
216
*side_near[0 ] = nullptr ;
215
217
*side_near[1 ] = root;
216
- auto access = Static::alloc_align (transaction, align_m1);
217
- if (Static::alloc_limit (transaction, access , size)) {
218
+ auto access =
219
+ Static::alloc_align (transaction, meta.m_access_align_m1 );
220
+ if (Static::alloc_limit (transaction, access , meta.m_access_size )) {
218
221
access ->m_children [0 ] = side_root[0 ];
219
222
access ->m_children [1 ] = side_root[1 ];
220
223
access ->m_atom = access_atom;
221
224
access ->m_state = INITIAL;
222
225
access ->m_lock_ix = access_ix;
226
+ access ->m_destroy = meta.m_destroy ;
223
227
return transaction->m_accesses = access ;
224
228
} else {
225
229
root->m_children [0 ] = side_root[0 ];
@@ -239,13 +243,14 @@ trade_v1::Private::insert(transaction_base_t *transaction,
239
243
*side_near[0 ] = root->m_children [0 ];
240
244
*side_near[1 ] = nullptr ;
241
245
root->m_children [0 ] = side_root[0 ];
242
- auto access = Static::alloc_align (transaction, align_m1 );
243
- if (Static::alloc_limit (transaction, access , size )) {
246
+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
247
+ if (Static::alloc_limit (transaction, access , meta. m_access_size )) {
244
248
access ->m_children [0 ] = root;
245
249
access ->m_children [1 ] = side_root[1 ];
246
250
access ->m_atom = access_atom;
247
251
access ->m_state = INITIAL;
248
252
access ->m_lock_ix = access_ix;
253
+ access ->m_destroy = meta.m_destroy ;
249
254
return transaction->m_accesses = access ;
250
255
} else {
251
256
root->m_children [1 ] = side_root[1 ];
@@ -264,13 +269,15 @@ trade_v1::Private::insert(transaction_base_t *transaction,
264
269
if (!next) {
265
270
*side_near[0 ] = root;
266
271
*side_near[1 ] = nullptr ;
267
- auto access = Static::alloc_align (transaction, align_m1);
268
- if (Static::alloc_limit (transaction, access , size)) {
272
+ auto access =
273
+ Static::alloc_align (transaction, meta.m_access_align_m1 );
274
+ if (Static::alloc_limit (transaction, access , meta.m_access_size )) {
269
275
access ->m_children [0 ] = side_root[0 ];
270
276
access ->m_children [1 ] = side_root[1 ];
271
277
access ->m_atom = access_atom;
272
278
access ->m_state = INITIAL;
273
279
access ->m_lock_ix = access_ix;
280
+ access ->m_destroy = meta.m_destroy ;
274
281
return transaction->m_accesses = access ;
275
282
} else {
276
283
root->m_children [1 ] = side_root[1 ];
0 commit comments