chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
#include <napi.h>
|
||||
|
||||
namespace node_api::imaging {
|
||||
Napi::Value avif_encode_rgba(const Napi::CallbackInfo& info);
|
||||
Napi::Value avif_encode_rgba_batched(const Napi::CallbackInfo& info);
|
||||
Napi::Value avif_decode_rgba(const Napi::CallbackInfo& info);
|
||||
Napi::Value avif_decode_rgba_batched(const Napi::CallbackInfo& info);
|
||||
} // namespace node_api::imaging
|
||||
@@ -0,0 +1,92 @@
|
||||
#pragma once
|
||||
#include <memory>
|
||||
#include <napi.h>
|
||||
#include <span>
|
||||
#include <vector>
|
||||
|
||||
namespace node_api::buffer {
|
||||
template<typename T, typename D = std::default_delete<T>>
|
||||
class UniqueBufferFinalizer {
|
||||
public:
|
||||
UniqueBufferFinalizer() noexcept = default;
|
||||
UniqueBufferFinalizer(const UniqueBufferFinalizer<T, D>& other) = delete;
|
||||
UniqueBufferFinalizer(UniqueBufferFinalizer<T, D>&& other) noexcept = default;
|
||||
UniqueBufferFinalizer(std::unique_ptr<T, D>&& ptr) noexcept : ptr(std::move(ptr)) {}
|
||||
UniqueBufferFinalizer(T* ptr) noexcept : ptr(ptr) {}
|
||||
void operator()(Napi::Env env, T* data) noexcept {}
|
||||
|
||||
inline static Napi::Buffer<T> make_buffer(Napi::Env& env, std::unique_ptr<T, D>&& ptr, size_t size) noexcept {
|
||||
auto finalizer = UniqueBufferFinalizer(std::move(ptr));
|
||||
auto data_ptr = finalizer.ptr.get();
|
||||
return Napi::Buffer<T>::NewOrCopy(env, data_ptr, size, std::move(finalizer));
|
||||
}
|
||||
|
||||
protected:
|
||||
std::unique_ptr<T, D> ptr;
|
||||
};
|
||||
|
||||
template<typename T, typename D = std::default_delete<std::vector<T>>>
|
||||
class UniqueVecBufferFinalizer : public UniqueBufferFinalizer<std::vector<T>, D> {
|
||||
public:
|
||||
void operator()(Napi::Env env, T* data) noexcept {}
|
||||
|
||||
template<typename U>
|
||||
inline static Napi::Buffer<T> make_buffer(Napi::Env& env, U&& data) noexcept {
|
||||
auto finalizer = UniqueVecBufferFinalizer(std::forward<U>(data));
|
||||
auto data_ptr = finalizer.ptr->data();
|
||||
auto data_size = finalizer.ptr->size();
|
||||
return Napi::Buffer<T>::NewOrCopy(env, data_ptr, data_size, std::move(finalizer));
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
class SharedBufferFinalizer {
|
||||
public:
|
||||
SharedBufferFinalizer() noexcept = default;
|
||||
SharedBufferFinalizer(const SharedBufferFinalizer<T>& other) noexcept = default;
|
||||
SharedBufferFinalizer(SharedBufferFinalizer<T>&& other) noexcept = default;
|
||||
SharedBufferFinalizer(const std::shared_ptr<T>& ptr) noexcept : ptr(ptr) {}
|
||||
SharedBufferFinalizer(std::shared_ptr<T>&& ptr) noexcept : ptr(std::move(ptr)) {}
|
||||
void operator()(Napi::Env env, T* data) noexcept {}
|
||||
|
||||
template<typename U>
|
||||
requires std::is_same_v<std::remove_reference_t<U>, std::shared_ptr<T>>
|
||||
inline static Napi::Buffer<T> make_buffer(Napi::Env& env, U&& ptr, size_t size) noexcept {
|
||||
auto finalizer = SharedBufferFinalizer(std::forward<U>(ptr));
|
||||
auto data_ptr = finalizer.ptr.get();
|
||||
return Napi::Buffer<T>::NewOrCopy(env, data_ptr, size, std::move(finalizer));
|
||||
}
|
||||
|
||||
template<typename U>
|
||||
requires std::is_same_v<std::remove_reference_t<U>, std::shared_ptr<T>>
|
||||
inline static Napi::Buffer<T> make_buffer(Napi::Env& env, U&& ptr, size_t offset, size_t size) noexcept {
|
||||
auto finalizer = SharedBufferFinalizer(std::forward<U>(ptr));
|
||||
auto data_ptr = finalizer.ptr.get();
|
||||
return Napi::Buffer<T>::NewOrCopy(env, data_ptr + offset, size, std::move(finalizer));
|
||||
}
|
||||
|
||||
protected:
|
||||
std::shared_ptr<T> ptr;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
class SharedVecBufferFinalizer : public SharedBufferFinalizer<std::vector<T>> {
|
||||
public:
|
||||
void operator()(Napi::Env env, T* data) noexcept {}
|
||||
|
||||
template<typename U>
|
||||
inline static Napi::Buffer<T> make_buffer(Napi::Env& env, U&& data) noexcept {
|
||||
auto finalizer = SharedVecBufferFinalizer(std::forward<U>(data));
|
||||
auto data_ptr = finalizer.ptr->data();
|
||||
auto data_size = finalizer.ptr->size();
|
||||
return Napi::Buffer<T>::NewOrCopy(env, data_ptr, data_size, std::move(finalizer));
|
||||
}
|
||||
|
||||
template<typename U>
|
||||
inline static Napi::Buffer<T> make_buffer(Napi::Env& env, U&& data, size_t offset, size_t size) noexcept {
|
||||
auto finalizer = SharedVecBufferFinalizer(std::forward<U>(data));
|
||||
auto data_ptr = finalizer.ptr->data();
|
||||
return Napi::Buffer<T>::NewOrCopy(env, data_ptr + offset, size, std::move(finalizer));
|
||||
}
|
||||
};
|
||||
} // namespace node_api::buffer
|
||||
@@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
#include <napi.h>
|
||||
|
||||
namespace node_api::spatial {
|
||||
Napi::Value cluster_average(const Napi::CallbackInfo& info);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
#include <napi.h>
|
||||
|
||||
namespace node_api::splat {
|
||||
Napi::Value generate_lod(const Napi::CallbackInfo& info);
|
||||
Napi::Value split(const Napi::CallbackInfo& info);
|
||||
} // namespace node_api::splat
|
||||
@@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
#include <algorithm>
|
||||
#include <bit>
|
||||
#include <cstddef>
|
||||
#include <napi.h>
|
||||
#include <thread>
|
||||
#include <thread_pool.h>
|
||||
|
||||
namespace node_api::threading {
|
||||
class ThreadPool : public Napi::ObjectWrap<ThreadPool> {
|
||||
public:
|
||||
static Napi::FunctionReference Init(Napi::Env env, Napi::Object exports);
|
||||
|
||||
ThreadPool(const Napi::CallbackInfo& info);
|
||||
::threading::ThreadPool& impl() noexcept;
|
||||
|
||||
ThreadPool() = delete;
|
||||
|
||||
private:
|
||||
static size_t calc_thread_count(const Napi::CallbackInfo& info);
|
||||
Napi::Value thread_count(const Napi::CallbackInfo& info);
|
||||
Napi::Value task_count(const Napi::CallbackInfo& info);
|
||||
|
||||
::threading::ThreadPool impl_;
|
||||
};
|
||||
} // namespace node_api::threading
|
||||
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
#include <napi.h>
|
||||
|
||||
namespace node_api::imaging {
|
||||
Napi::Value webp_encode_rgba_lossless(const Napi::CallbackInfo& info);
|
||||
Napi::Value webp_encode_rgba(const Napi::CallbackInfo& info);
|
||||
Napi::Value webp_decode_rgba(const Napi::CallbackInfo& info);
|
||||
} // namespace node_api::imaging
|
||||
Reference in New Issue
Block a user