All pastes #760124 Raw Edit

Mine

public text v1 · immutable
·published 2007-11-03 19:39 UTC
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";
}