/*
 * htwg_array.h
 *
 * Stark vereinfachte Array-Klasse.
 *
 * Autor: H.Drachenfels
 * Erstellt am: 31.5.2024
 */
#ifndef HTWG_ARRAY_H
#define HTWG_ARRAY_H

#include <cstddef> // std::size_t

namespace htwg
{
    template<typename T, std::size_t N>
    class array final
    {
    public:
        T a[N];

        // array() = default;
        // ~array() = default;

        // array(const array& v) = default;
        // array& operator=(const array& v) = default;

        // array(array&& v) = default;
        // array& operator=(array&& v) = default;

        std::size_t size() const
        {
            return N;
        }

        T& operator[](std::size_t i)
        {
            // Verbesserungsvorschlag: Index pruefen
            return this->a[i];
        }

        const T& operator[](std::size_t i) const
        {
            // Verbesserungsvorschlag: Index pruefen
            return this->a[i];
        }

        typedef T* iterator;
        typedef const T* const_iterator;

        iterator begin()
        {
            return &this->a[0];
        }

        iterator end()
        {
            return &this->a[N];
        }

        const_iterator begin() const
        {
            return &this->a[0];
        }

        const_iterator end() const
        {
            return &this->a[N];
        }
    };
}

#endif

