// // Final Project Iteration 1 // // Authors: Michael Levin (3287290, sec. 2) // Ilya Feldshteyn (2957187, sec. 1) // // Date: 10/24/2007 // #include #include 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"; }