diff --git a/build_linux64/libamsmathutil25.linux64.a b/build_linux64/libamsmathutil25.linux64.a index 316d743..02d26cf 100644 Binary files a/build_linux64/libamsmathutil25.linux64.a and b/build_linux64/libamsmathutil25.linux64.a differ diff --git a/build_linux64/objstore/amsmathtuil25_test1.o b/build_linux64/objstore/amsmathtuil25_test1.o index 12ad038..a5c071b 100644 Binary files a/build_linux64/objstore/amsmathtuil25_test1.o and b/build_linux64/objstore/amsmathtuil25_test1.o differ diff --git a/build_linux64/objstore/amsmathutiil25_random.o b/build_linux64/objstore/amsmathutiil25_random.o index b3dcf6b..e34229d 100644 Binary files a/build_linux64/objstore/amsmathutiil25_random.o and b/build_linux64/objstore/amsmathutiil25_random.o differ diff --git a/build_linux64/objstore/amsmathutil25_amsarray_sort.o b/build_linux64/objstore/amsmathutil25_amsarray_sort.o index 4960f3e..37bc1a2 100644 Binary files a/build_linux64/objstore/amsmathutil25_amsarray_sort.o and b/build_linux64/objstore/amsmathutil25_amsarray_sort.o differ diff --git a/build_linux64/tests b/build_linux64/tests index aed5fd0..8c59cb5 100644 Binary files a/build_linux64/tests and b/build_linux64/tests differ diff --git a/include/amsmathutil25/util/amsmathutil25_amsarray_impl.hpp b/include/amsmathutil25/util/amsmathutil25_amsarray_impl.hpp index c2fcb73..b782230 100644 --- a/include/amsmathutil25/util/amsmathutil25_amsarray_impl.hpp +++ b/include/amsmathutil25/util/amsmathutil25_amsarray_impl.hpp @@ -39,12 +39,12 @@ namespace ams amsarray_size_t lmin = 0; T defval = T(); - void* test_ptr = malloc(16); - if(test_ptr) free(test_ptr); - else { - printf("HEAP CORRUPTED before reserve()!\n"); - return amsarray_failure; - } + // void* test_ptr = malloc(16); + // if(test_ptr) free(test_ptr); + // else { + // printf("HEAP CORRUPTED before reserve()!\n"); + // return amsarray_failure; + // } if(_newcap<=0) { @@ -73,7 +73,8 @@ namespace ams if(data!=NULL) { lmin = (_newcap>=reserved) ? reserved : _newcap; - ams::buffer_cast_copy(newdata,data,lmin); + //ams::buffer_cast_copy(newdata,data,lmin); + ams::buffer_cast_move(newdata,data,lmin); } //ams::buffer_set(newdata,reserved,_newcap,defval); @@ -437,7 +438,7 @@ template int amsarray::insert(amsarray_size_t ind, const T& val) for(I=oldlen;I>=ind+1;I--) { - this->data[I] = this->data[I-1]; + this->data[I] = std::move(this->data[I-1]); } this->data[ind] = val; } @@ -501,7 +502,7 @@ template int amsarray::insert(amsarray_size_t ind, const amsarray { for(I=oldlen;I>=ind+other.length;I--) { - this->data[I] = this->data[I-1]; + this->data[I] = std::move(this->data[I-1]); } for(I=ind;I int amsarray::erase(amsarray_size_t ind) { for(I=ind;Ilength-1;I++) { - this->data[I] = this->data[I+1]; + this->data[I] = std::move(this->data[I+1]); } this->data[this->length-1] = T(); } diff --git a/include/amsmathutil25/util/amsmathutil25_bufferops.hpp b/include/amsmathutil25/util/amsmathutil25_bufferops.hpp index dab004c..87f7fdb 100644 --- a/include/amsmathutil25/util/amsmathutil25_bufferops.hpp +++ b/include/amsmathutil25/util/amsmathutil25_bufferops.hpp @@ -31,6 +31,23 @@ namespace ams //threaded copy of bufferfrom to bufferto template int buffer_cast_copy_unthreaded(T1* bufferto, const T2* bufferfrom, buffer_size_t N); + + + //threaded std::move of bufferfrom[offsetfrom + I] to bufferto[offsetto+I] I = [0,N) + template int buffer_cast_move(T1* bufferto, const T2* bufferfrom, + buffer_size_t offsetto, buffer_size_t offsetfrom, buffer_size_t N); + + //threaded std::move of bufferfrom to bufferto + template int buffer_cast_move(T1* bufferto, const T2* bufferfrom, buffer_size_t N); + + //threaded std::move of bufferfrom[offsetfrom + I] to bufferto[offsetto+I] I = [0,N) + template int buffer_cast_move_unthreaded(T1* bufferto, const T2* bufferfrom, + buffer_size_t offsetto, buffer_size_t offsetfrom, buffer_size_t N); + + //threaded std::move of bufferfrom to bufferto + template int buffer_cast_move_unthreaded(T1* bufferto, const T2* bufferfrom, buffer_size_t N); + + }; //end namespace ams #include diff --git a/include/amsmathutil25/util/amsmathutil25_bufferops_impl.hpp b/include/amsmathutil25/util/amsmathutil25_bufferops_impl.hpp index d48a5b2..c4b9df1 100644 --- a/include/amsmathutil25/util/amsmathutil25_bufferops_impl.hpp +++ b/include/amsmathutil25/util/amsmathutil25_bufferops_impl.hpp @@ -225,6 +225,111 @@ namespace ams } + //////////////////// + //buffer_cast_move// + //////////////////// + + template void buffer_cast_move_tf( + int threadnum, + int nthread, + T1 *bufferto, + const T2 *bufferfrom, + buffer_size_t offsetto, + buffer_size_t offsetfrom, + buffer_size_t N + ) + { + buffer_size_t I,I0,I1,Is; + + // Is = N/(nthread-1); + // Is = (Is<=0) ? 1 : Is; + // I0 = Is*(threadnum); + // I1 = Is*(threadnum+1); + // I0 = (I0<=0) ? 0 : I0; + // I1 = (I1<=0) ? 0 : I1; + // I0 = (I0>N) ? N : I0; + // I1 = (I1>N) ? N : I1; + + Is = (nthread<=0) ? N : N/nthread; + I0 = Is*(threadnum); + I1 = (threadnum>=(nthread-1)) ? N : Is*(threadnum+1); + + // I0 = (I0<=0) ? 0 : I0; + // I1 = (I1<=0) ? 0 : I1; + I0 = (I0>N) ? N : I0; + I1 = (I1>N) ? N : I1; + + for(I=I0;I int buffer_cast_move(T1* bufferto, const T2* bufferfrom, + buffer_size_t offsetto, buffer_size_t offsetfrom, buffer_size_t N) + { + int ret = amsmathutil25_success; + int res; + res = ams::threaded_execute( + &buffer_cast_copy_tf,(int64_t) N, + bufferto,bufferfrom,offsetto,offsetfrom,N + ); + ret = res; + + return ret; + } + + //threaded copy of bufferfrom to bufferto + template int buffer_cast_move(T1* bufferto, const T2* bufferfrom, buffer_size_t N) + { + int ret = amsmathutil25_success; + buffer_size_t I; + + if(N(bufferto,bufferfrom,0,0,N); + } + + return ret; + } + + //threaded copy of bufferfrom[offsetfrom + I] to bufferto[offsetto+I] I = [0,N) + template int buffer_cast_move_unthreaded(T1* bufferto, const T2* bufferfrom, + buffer_size_t offsetto, buffer_size_t offsetfrom, buffer_size_t N) + { + int ret = amsmathutil25_success; + buffer_size_t I; + + for(I=0;I int buffer_cast_move_unthreaded(T1* bufferto, const T2* bufferfrom, buffer_size_t N) + { + int ret = amsmathutil25_success; + buffer_size_t I; + + for(I=0;I