#ifndef VECTOR_HPP #define VECTOR_HPP /* ************************************************************************** */ #include "../container/container.hpp" /* ************************************************************************** */ namespace lasd { /* ************************************************************************** */ template class Vector : virtual public LinearContainer, virtual public MappableContainer, virtual public FoldableContainer{ // Must extend LinearContainer, MappableContainer, and FoldableContainer private: protected: using LinearContainer::size; Data* Elements = nullptr; public: Vector() = default; // Specific constructors Vector(const ulong); // A vector with a given initial dimension Vector(const LinearContainer&); // A vector obtained from a LinearContainer // Copy constructor Vector(const Vector&); // Move constructor Vector(Vector&&)noexcept; // Destructor ~Vector(); // Copy assignment Vector& operator=(const Vector&); // Move assignment Vector& operator=(Vector&&) noexcept; // Comparison operators bool operator==(const Vector&) const noexcept; bool operator!=(const Vector&) const noexcept; void Resize(const ulong); // Resize the vector to a given size void Clear() override; // Override Container member Data& Front() const override; // Override LinearContainer member (must throw std::length_error when empty) Data& Back() const override; // Override LinearContainer member (must throw std::length_error when empty) Data& operator[](const ulong) const override; // Override LinearContainer member (must throw std::out_of_range when out of range) using typename MappableContainer::MapFunctor; void MapPreOrder(const MapFunctor, void*) override; // Override MappableContainer member void MapPostOrder(const MapFunctor, void*) override; // Override MappableContainer member using typename FoldableContainer::FoldFunctor; void FoldPreOrder(const FoldFunctor, const void*, void*) const override; // Override FoldableContainer member void FoldPostOrder(const FoldFunctor, const void*, void*) const override; // Override FoldableContainer member }; } #include "vector.cpp" #endif