File tree Expand file tree Collapse file tree 2 files changed +18
-8
lines changed
Expand file tree Collapse file tree 2 files changed +18
-8
lines changed Original file line number Diff line number Diff line change @@ -1011,20 +1011,26 @@ class abstract_chunked_voxel_storage : public regular_voxel_storage {
10111011 release (get_chunk (this , ijk));
10121012 }
10131013
1014- abstract_voxel_storage* a2 = a->is_explicit () ? a ->copy (n->next_slot ()) : a->make_explicit (n->next_slot ());
1014+ abstract_voxel_storage* a_explicit = a->is_explicit () ? (inplace ? a : a ->copy (n->next_slot () )) : a->make_explicit (n->next_slot ());
10151015 // b is temporary, so not assigned next_slot
1016- abstract_voxel_storage* b2 = b->is_explicit () ? nullptr : b->make_explicit ();
1017- abstract_voxel_storage* b3 = b2 ? b2 : b;
1016+ abstract_voxel_storage* b_temp = b->is_explicit () ? nullptr : b->make_explicit ();
1017+ abstract_voxel_storage* b_forced_explicit = b_temp ? b_temp : b;
10181018 if (mode == OP_UNION) {
1019- a2 ->boolean_union (b3 );
1019+ a_explicit ->boolean_union (b_forced_explicit );
10201020 } else if (mode == OP_SUBTRACTION) {
1021- a2 ->boolean_subtraction (b3 );
1021+ a_explicit ->boolean_subtraction (b_forced_explicit );
10221022 } else if (mode == OP_INTERSECTION) {
1023- a2 ->boolean_intersection (b3 );
1023+ a_explicit ->boolean_intersection (b_forced_explicit );
10241024 }
1025- delete b2;
1026- set_chunk (n, ijk, a2);
1025+ delete b_temp;
10271026
1027+ if (inplace && a_explicit != a) {
1028+ delete a;
1029+ }
1030+ if (!inplace || a_explicit != a) {
1031+ set_chunk (n, ijk, a_explicit);
1032+ }
1033+
10281034 END_LOOP;
10291035
10301036 return n;
Original file line number Diff line number Diff line change @@ -421,6 +421,10 @@ class visitor {
421421 queue.pop_front ();
422422 }
423423 }
424+
425+ ~visitor () {
426+ delete visited_;
427+ }
424428};
425429
426430class query_leftmost {
You can’t perform that action at this time.
0 commit comments