#include <iostream>
#include <cassert>
#include "SafeArray4.h"

using namespace std;

SafeArray::SafeArray() : elements(nullptr), length(0)
{
}

SafeArray::SafeArray(int len) : elements(nullptr), length(len)
{
    elements = new int[length];
}

SafeArray::~SafeArray()
{
    if (elements != nullptr) delete[] elements;
}

SafeArray& SafeArray::operator =(const SafeArray& rhs)
{
    if (this == &rhs) return *this;
    if (elements != nullptr) delete[] elements;

    length = rhs.length;
    elements = new int[length];

    for (int i = 0; i < length; i++)
    {
        elements[i] = rhs.elements[i];
    }

    return *this;
}

int SafeArray::get_length() const { return length; }

int SafeArray::at(int i) const
{
    assert((i >= 0) && (i < length));
    return elements[i];
}

void SafeArray::set(int i, int value)
{
    assert((i >= 0) && (i < length));
    elements[i] = value;
}