#ifndef HEADER_VOXEL_UTILITY_H #define HEADER_VOXEL_UTILITY_H #include "vector3i.h" #include #include #include #include // Takes elements starting from a given position and moves them at the beginning, // then shrink the array to fit them. Other elements are discarded. template void shift_up(Vector &v, int pos) { int j = 0; for (int i = pos; i < v.size(); ++i, ++j) { v.write[j] = v[i]; } int remaining = v.size() - pos; v.resize(remaining); } // Pops the last element of the vector and place it at the given position. // (The element that was at this position is the one removed). template void unordered_remove(Vector &v, int pos) { int last = v.size() - 1; v.write[pos] = v[last]; v.resize(last); } template void copy_to(PoolVector &to, const Vector &from) { to.resize(from.size()); typename PoolVector::Write w = to.write(); for (unsigned int i = 0; i < from.size(); ++i) { w[i] = from[i]; } } inline String ptr2s(const void *p) { return String::num_uint64((uint64_t)p, 16); } template void raw_copy_to(PoolVector &to, const std::vector &from) { to.resize(from.size()); typename PoolVector::Write w = to.write(); memcpy(w.ptr(), from.data(), from.size() * sizeof(T)); } #endif // HEADER_VOXEL_UTILITY_H