/**
 * @file ListInterface.h
 * @author Anatole SCHRAMM-HENRY
 * @brief Interface defining all the needed function of a List type object
 * @version 0.1
 * @date 2025-10-29
 * 
 * @copyright MIT
 * 
 */
#ifndef LISTINTERFACE__H
#define LISTINTERFACE__H

template <typename T>
class ListInterface
{
    public:
        virtual boolean addFirst(T element) = 0;
        virtual boolean add(T element) = 0;
        virtual T remove(size_t index) = 0;
        virtual T removeFirst() = 0;
        virtual T removeLast() = 0;
        virtual T get(size_t index) = 0;
        virtual T operator[](size_t index) = 0;
        virtual T getFirst() = 0;
        virtual T getLast() = 0;
        virtual int64_t contains(T element) = 0;
        virtual size_t count() = 0;
        virtual size_t clear() = 0;
        virtual size_t dispose() = 0;

    protected:
    private:
};

#endif //LISTINTERFACE__H