#include <iostream>
#include "dstack2.h"
dstack::dstack( int size)
{
v = new double[capacity = size];
sp = 0;
}
dstack::dstack( const dstack &other) /* ver2 */
{
copy(other);
}
dstack::~dstack() /* ver2 */
{
delete [] v;
}
dstack dstack::operator=( const dstack &other) /* ver2 */
{
if ( this != &other )
{
delete [] v;
copy(other);
}
return *this;
}
void dstack::copy( const dstack &other)
{
v = new double[capacity = other.capacity];
sp = other.sp;
for ( int i = 0 ; i < sp; ++i)
v[i] = other.v[i];
}
void dstack::push( double d)
{
if ( ! is_full() )
v[sp++] = d;
}
double dstack::pop()
{
return is_empty() ? 0.0 : v[--sp];
}
bool dstack::is_empty() const
{
return 0 == sp;
}
bool dstack::is_full() const
{
return capacity == sp;
}
std::ostream &operator<<( std::ostream &os, dstack ds)
{
os << "[ ";
for ( int i = 0; i < ds.sp-1; ++i )
os << ds.v[i] << ", ";
if ( ds.sp > 0 )
os << ds.v[ds.sp-1];
os << " ]";
return os;
}