#ifndef VaeaNtt32_D_HPP
#define VaeaNtt32_D_HPP
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <memory>
#include <functional>
#include <optional>
#include <cstdlib>
#include "diplomat_runtime.hpp"
class VaeaNttError;
namespace diplomat {
namespace capi {
struct VaeaNtt32;
} }
class VaeaNtt32 {
public:
inline static diplomat::result<std::unique_ptr<VaeaNtt32>, VaeaNttError> try_new(size_t n, uint32_t q);
inline size_t get_n() const;
inline uint32_t get_q() const;
inline diplomat::result<std::monostate, VaeaNttError> forward(diplomat::span<uint32_t> data) const;
inline diplomat::result<std::monostate, VaeaNttError> inverse(diplomat::span<uint32_t> data) const;
inline diplomat::result<std::monostate, VaeaNttError> inverse_lazy(diplomat::span<uint32_t> data) const;
inline diplomat::result<std::monostate, VaeaNttError> negacyclic_mul(diplomat::span<uint32_t> a, diplomat::span<uint32_t> b, diplomat::span<uint32_t> result) const;
inline diplomat::result<std::monostate, VaeaNttError> pointwise_mul(diplomat::span<const uint32_t> a, diplomat::span<const uint32_t> b, diplomat::span<uint32_t> result) const;
inline const diplomat::capi::VaeaNtt32* AsFFI() const;
inline diplomat::capi::VaeaNtt32* AsFFI();
inline static const VaeaNtt32* FromFFI(const diplomat::capi::VaeaNtt32* ptr);
inline static VaeaNtt32* FromFFI(diplomat::capi::VaeaNtt32* ptr);
inline static void operator delete(void* ptr);
private:
VaeaNtt32() = delete;
VaeaNtt32(const VaeaNtt32&) = delete;
VaeaNtt32(VaeaNtt32&&) noexcept = delete;
VaeaNtt32 operator=(const VaeaNtt32&) = delete;
VaeaNtt32 operator=(VaeaNtt32&&) noexcept = delete;
static void operator delete[](void*, size_t) = delete;
};
#endif