// Description: Array locator
// Documentation: locators.txt
#ifndef PASTELSYS_ARRAY_LOCATOR_H
#define PASTELSYS_ARRAY_LOCATOR_H
#include "pastel/sys/locator/locator_concept.h"
#include "pastel/sys/point/point_concept.h"
#include "pastel/sys/real/real_concept.h"
#include "pastel/sys/ensure.h"
#include "pastel/sys/locator/default_locator.h"
#include <type_traits>
#include <array>
namespace Pastel
{
    template <
        typename Type,
        int N
    >
    requires Point_Concept<std::array<Type, N>>
    decltype(auto) pointLocator(std::array<Type, N>&& point)
    {
        return Default_Locator<std::array<Type, N>, Type, N>(N);
    }
    template <typename Real, int N>
    using Array_Locator = Default_Locator<std::array<Real, N>, Real, N>;
    template <typename Real_, int N_>
    decltype(auto) arrayLocator(integer n = N_)
    {
        return Array_Locator<Real_, N_>(n);
    }
}
#endif