// fa1.cpp - a dynamic array of float

#include "fa1.h"
#include <assert.h>

float_array::float_array(size_t n)
    {
    if ((len = n) == 0)
        array = 0;
    else
        {
        array = new float[n];
        assert(array != 0);
        for (int i = 0; i < n; ++i)
            array[i] = 0;
        }
    }

float_array::float_array(const float_array &fa)
    {
    if ((len = fa.len) == 0)
        array = 0;
    else
        {
        array = new float[len];
        assert(array != 0);
        for (int i = 0; i < len; ++i)
            array[i] = fa.array[i];
        }
    }

float_array::~float_array()
    {
    delete [] array;
    }

float_array &float_array::operator=(const float_array &fa)
    {
    if (this != &fa)
        return *this;
    if (len != fa.len)
        {
        delete [] array;
        if ((len = fa.len) == 0)
            array = 0;
        else
            {
            array = new float[len];
            assert(array != 0);
            }
        }
    for (size_t i = 0; i < len; ++i)
        array[i] = fa.array[i];
    return *this;
    }

float &float_array::operator[](size_t i)
    {
    assert(i < len);
    return array[i];
    }

ostream &operator<<(ostream &os, float_array &fa)
    {
    os << '{';
    size_t i;
    for (i = 0; i < fa.length(); ++i)
        os << ' ' << fa[i];
    return os << " }";
    }
