rendered paste body//
// Final Project Iteration 1
//
// Authors: Michael Levin (3287290, sec. 2)
// Ilya Feldshteyn (2957187, sec. 1)
//
// Date: 10/24/2007
//
#include<iostream>
#include<string>
using namespace std;
#include "Reservoir.h"
Reservoir::Reservoir(string _name)
{
name = _name;
loss = 0.;
capacity = 0.;
volume = 0.;
minimum_volume = 0.;
outflow = 0.;
}
void Reservoir::set_capacity(double value)
{
capacity = value;
}
string Reservoir::get_name() {
return name;
}
double Reservoir::get_capacity()
{
return capacity;
}
double Reservoir::get_volume()
{
return volume;
}
void Reservoir::set_volume(double value)
{
volume = value;
}
void Reservoir::set_outflow(double value)
{
outflow = value;
}
double Reservoir::get_outflow() const
{
return outflow;
}
void Reservoir::set_loss(double value)
{
loss = value;
}
void Reservoir::set_minimum_volume(double value)
{
minimum_volume = value;
}
double Reservoir::get_minimum_volume()
{
return minimum_volume;
}
bool Reservoir::has_minimum_volume() const
{
return volume >= minimum_volume;
}
void Reservoir::operator+=(double value)
{
volume += value;
if (volume < 0)
volume = 0;
}
void Reservoir::operator-=(double value)
{
*this += -value;
}
void Reservoir::update_volume()
{
volume -= loss + outflow;
}
void Reservoir::check(ostream &out)
{
if (volume > capacity)
throw name + " exceeded capacity!";
if (volume <= 0)
throw name + " has run dry!";
if (out.good() && !has_minimum_volume())
out << "WARNING: " << name << " volume (" << volume
<< ") dropped below minimum (" << minimum_volume << ")!\n\n";
}
void Reservoir::print_initial(ostream &out)
{
out << "Reservoir " << name << ":\n"
<< " Capacity: " << capacity << "\n"
<< " Initial volume: " << volume << "\n"
<< " Minimum volume: " << minimum_volume << "\n"
<< " Initial outflow: " << get_outflow() << "\n";
}
ostream& operator<<(ostream &out, const Reservoir &obj)
{
out << "Reservoir " << obj.name << ":\n"
<< " Current volume: ";
out.width(10);
return out << obj.volume << " Current outflow: " << obj.get_outflow()
<< "\n";
}