default_locator.h

Back to Orphans

pastel/sys/locator/

// Description: Default locator

#ifndef PASTELSYS_DEFAULT_LOCATOR_H
#define PASTELSYS_DEFAULT_LOCATOR_H

#include "pastel/sys/locator/locator_concept.h"

namespace Pastel
{

    template <typename Point_, typename Real_, integer N_>
    class Default_Locator
    {
    public:
        static constexpr integer N = N_;
        PASTEL_STATIC_ASSERT(N >= 0);

        using Point = Point_;
        using Real = Real_;

        explicit Default_Locator(integer dimension = N)
        {
            ENSURE_OP(dimension, ==, N);
        }

        integer n() const
        {
            return N;
        }

        integer n(const Point& point) const
        {
            return n();
        }

        decltype(auto) operator()(
            const Point& point, integer i) const
        {
            return pointAxis(point, i);
        }
    };

    template <typename Point_, typename Real_>
    class Default_Locator<Point_, Real_, Dynamic>
    {
    public:
        static constexpr integer N = Dynamic;

        using Point = Point_;
        using Real = Real_;

        explicit Default_Locator(integer dimension = N)
            : n_(dimension)
        {
        }

        integer n() const
        {
            return n_;
        }

        integer n(const Point& point) const
        {
            return pointDimension(point);
        }

        decltype(auto) operator()(
            const Point& point, integer i) const
        {
            return pointAxis(point, i);
        }

    private:
        integer n_;
    };

}

#endif