|
|
|
@ -25,7 +25,6 @@ |
|
|
|
|
|
|
|
|
|
|
|
#include "CompressIndices.h" |
|
|
|
#include "CompressIndices.h" |
|
|
|
|
|
|
|
|
|
|
|
#include <cstring> |
|
|
|
|
|
|
|
#include <Corrade/Containers/Array.h> |
|
|
|
#include <Corrade/Containers/Array.h> |
|
|
|
#include <Corrade/Containers/Pair.h> |
|
|
|
#include <Corrade/Containers/Pair.h> |
|
|
|
#include <Corrade/Utility/Algorithms.h> |
|
|
|
#include <Corrade/Utility/Algorithms.h> |
|
|
|
@ -46,11 +45,10 @@ namespace { |
|
|
|
template<class T, class U> inline Containers::Array<char> compress(const Containers::StridedArrayView1D<const U>& indices, Long offset) { |
|
|
|
template<class T, class U> inline Containers::Array<char> compress(const Containers::StridedArrayView1D<const U>& indices, Long offset) { |
|
|
|
/* Can't use Math::castInto() here because we're subtracting an offset in
|
|
|
|
/* Can't use Math::castInto() here because we're subtracting an offset in
|
|
|
|
addition */ |
|
|
|
addition */ |
|
|
|
Containers::Array<char> buffer(indices.size()*sizeof(T)); |
|
|
|
Containers::Array<char> buffer{NoInit, indices.size()*sizeof(T)}; |
|
|
|
for(std::size_t i = 0; i != indices.size(); ++i) { |
|
|
|
const Containers::ArrayView<T> view = Containers::arrayCast<T>(buffer); |
|
|
|
T index = static_cast<T>(indices[i] - offset); |
|
|
|
for(std::size_t i = 0; i != indices.size(); ++i) |
|
|
|
std::memcpy(buffer.begin()+i*sizeof(T), &index, sizeof(T)); |
|
|
|
view[i] = indices[i] - offset; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return buffer; |
|
|
|
return buffer; |
|
|
|
} |
|
|
|
} |
|
|
|
|