import java.io.PrintWriter;
import java.io.FileWriter;

/**
 * A simple output system for beginning programmers.  Permits 
 * writing of basic data types without delving into the workings 
 * of the various Java libraries.  Using this library makes it
 * easier to change programs to do output to a file (hopefully) and
 * for students to extend the class by adding new routines.
 * <p>
 * While it would be preferable to have this class extend 
 * PrintWriter, this makes it difficult to make it work with files
 * (at least in my experience).
 * <p>
 * Note that this class does not precisely match the description
 * in the text.  The one described in the text is designed to be
 * somewhat more understandable for beginning programmers.  
 * <p>
 * Requires Java 1.1 or later.
 *
 * @author Samuel A. Rebelsky
 * @version 1.5 of January 1999
 */
public class SimpleOutput {
  // +--------+------------------------------------------------------------
  // | Fields |
  // +--------+

  /** The base Writer used for doing the actual output.  */
  protected PrintWriter base;


  // +--------------+------------------------------------------------------
  // | Constructors |
  // +--------------+

  /**
   * Build an object that can write to standard output.
   */
  public SimpleOutput() {
    // Use System.out, converting it as appropriate.
    base = new PrintWriter(System.out, true);
  } // SimpleOutput

 
  // +------------+--------------------------------------------------------
  // | Finalizers |
  // +------------+

 
  // +------------------+--------------------------------------------------
  // | Exported Methods |
  // +------------------+

  /**
   * Print a boolean (truth) value.
   */
  public void print(boolean b) {
    base.print(b);
  } // print(boolean)

  /**
   * Print a character value.
   */
  public void print(char c) {
    base.print(c);
  } // print(char)

  /**
   * Print a double value.
   */
  public void print(double d) {
    base.print(d);
  } // print(double)

  /**
   * Print an integer value.
   */
  public void print(int i) {
    base.print(i);
  } // print(int)

  /**
   * Print a long value.
   */
  public void print(long l) {
    base.print(l);
  } // print(long)

  /**
   * Print a float value.
   */
  public void print(float f) {
    base.print(f);
  } // print(float)

  /**
   * Print an object.
   */
  public void print(Object o) {
    this.print(o.toString());
  } // print(Object)
    
  /**
   * Print a string value.
   */
  public void print(String s) {
    base.print(s);
    base.flush();
  } // print(String)

  /**
   * Print a carriage return.
   */
  public void println() {
    base.println();
  } //println

  /**
   * Print a boolean (truth) value followed by a carriage return
   */
  public void println(boolean b) {
    base.println(b);
  } // println(boolean)

  /**
   * Print a character value followed by a carriage return.
   */
  public void println(char c) {
    base.println(c);
  } // println(char)

  /**
   * Print a double value followed by a carriage return.
   */
  public void println(double d) {
    base.println(d);
  } // println(double)

  /**
   * Print an integer value followed by a carriage return.
   */
  public void println(int i) {
    base.println(i);
  } // println(int)

  /**
   * Print a long value followed by a carriage return.
   */
  public void println(long l) {
    base.println(l);
  } // println(long)

  /**
   * Print a float value followed by a carriage return.
  public void println(float f) {
    base.println(f);
  } // println(float)

  /**
   * Print an object followed by a carriage return.
   */
  public void println(Object o) {
    this.println(o.toString());
  } // println(Object)
  
  /**
   * Print a string value followed by a carriage return.
   */
  public void println(String s) {
    base.println(s);
  } // println(String)

} // SimpleOutput

