executorch-sys 0.9.0

Unsafe Rust bindings for ExecuTorch - On-device AI across mobile, embedded and edge for PyTorch
Documentation
#include <cstddef>

namespace executorch_rs
{
    struct Layout
    {
        size_t size;
        size_t alignment;
    };
    template <typename T>
    static constexpr Layout layout_of()
    {
        return Layout{
            .size = sizeof(T),
            .alignment = alignof(T),
        };
    }
    constexpr bool operator==(const Layout &lhs, const Layout &rhs)
    {
        return lhs.size == rhs.size && lhs.alignment == rhs.alignment;
    }

    template <typename T, typename U>
    constexpr bool is_equal_layout()
    {
        return layout_of<T>() == layout_of<U>();
    }

    template <typename U, typename T>
    constexpr U *checked_reinterpret_cast(T *ptr)
    {
        static_assert(executorch_rs::is_equal_layout<T, U>());
        return reinterpret_cast<U *>(ptr);
    }
    template <typename U, typename T>
    constexpr U **checked_reinterpret_cast(T **ptr)
    {
        static_assert(executorch_rs::is_equal_layout<T, U>());
        return reinterpret_cast<U **>(ptr);
    }

    template <typename U, typename T>
    constexpr const U *checked_reinterpret_cast(const T *ptr)
    {
        static_assert(executorch_rs::is_equal_layout<T, U>());
        return reinterpret_cast<const U *>(ptr);
    }
    template <typename U, typename T>
    constexpr const U **checked_reinterpret_cast(const T **ptr)
    {
        static_assert(executorch_rs::is_equal_layout<T, U>());
        return reinterpret_cast<const U **>(ptr);
    }
}