mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 16:28:38 +09:00
Don't use PodCopy/PodMove to implement typed-array element-to-element copying
Standard std::copy and std::copy_n are readily optimized to the same thing, and they don't have a non-obvious requirement that the type being copied be trivial.
This commit is contained in:
parent
3bfbbf5d40
commit
74983ef77e
1 changed files with 17 additions and 4 deletions
|
|
@ -11,7 +11,8 @@
|
|||
|
||||
#include "mozilla/Assertions.h"
|
||||
#include "mozilla/FloatingPoint.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "jsarray.h"
|
||||
#include "jscntxt.h"
|
||||
|
|
@ -245,12 +246,24 @@ class UnsharedOps
|
|||
|
||||
template<typename T>
|
||||
static void podCopy(SharedMem<T*> dest, SharedMem<T*> src, size_t nelem) {
|
||||
mozilla::PodCopy(dest.unwrapUnshared(), src.unwrapUnshared(), nelem);
|
||||
// std::copy_n better matches the argument values/types of this
|
||||
// function, but as noted below it allows the input/output ranges to
|
||||
// overlap. std::copy does not, so use it so the compiler has extra
|
||||
// ability to optimize.
|
||||
const auto* first = src.unwrapUnshared();
|
||||
const auto* last = first + nelem;
|
||||
auto* result = dest.unwrapUnshared();
|
||||
std::copy(first, last, result);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static void podMove(SharedMem<T*> dest, SharedMem<T*> src, size_t nelem) {
|
||||
mozilla::PodMove(dest.unwrapUnshared(), src.unwrapUnshared(), nelem);
|
||||
static void podMove(SharedMem<T*> dest, SharedMem<T*> src, size_t n) {
|
||||
// std::copy_n copies from |src| to |dest| starting from |src|, so
|
||||
// input/output ranges *may* permissibly overlap, as this function
|
||||
// allows.
|
||||
const auto* start = src.unwrapUnshared();
|
||||
auto* result = dest.unwrapUnshared();
|
||||
std::copy_n(start, n, result);
|
||||
}
|
||||
|
||||
static SharedMem<void*> extract(TypedArrayObject* obj) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue