/*
C# A Beginner's Guide
By Schildt
Publisher: Osborne McGraw-Hill
ISBN: 0072133295
*/
/*
Project 10-1
Add exception handling to the queue classes.
*/
using System;
// A character queue interface.
public interface ICharQ {
// Put a characer into the queue.
void put(char ch);
// Get a character from the queue.
char get();
}
// An exception for queue-full errors.
class QueueFullException : ApplicationException {
public QueueFullException() : base() { }
public QueueFullException(string str) : base(str) { }
public override string ToString() {
return "\n" + Message;
}
}
// An exception for queue-empty errors.
class QueueEmptyException : ApplicationException {
public QueueEmptyException() : base() { }
public QueueEmptyException(string str) : base(str) { }
public override string ToString() {
return "\n" + Message;
}
}
// A fixed-size queue class for characters that uses exceptions.
class FixedQueue : ICharQ {
char[] q; // this array holds the queue
int putloc, getloc; // the put and get indices
// Construct an empty queue given its size.
public FixedQueue(int size) {
q = new char[size+1]; // allocate memory for queue
putloc = getloc = 0;
}
// Put a character into the queue.
public void put(char ch) {
if(putloc==q.Length-1)
throw new QueueFullException("Max length is " +
(q.Length-1));
putloc++;
q[putloc] = ch;
}
// Get a character from the queue.
public char get() {
if(getloc == putloc)
throw new QueueEmptyException();
getloc++;
return q[getloc];
}
}
// Demonstrate the queue exceptions.
public class QExcDemo {
public static void Main() {
FixedQueue q = new FixedQueue(10);
char ch;
int i;
try {
// overrun the queue
for(i=0; i < 11; i++) {
Console.Write("Attempting to store : " +
(char) ('A' + i));
q.put((char) ('A' + i));
Console.WriteLine(" -- OK");
}
Console.WriteLine();
}
catch (QueueFullException exc) {
Console.WriteLine(exc);
}
Console.WriteLine();
try {
// over-empty the queue
for(i=0; i < 11; i++) {
Console.Write("Getting next char: ");
ch = q.get();
Console.WriteLine(ch);
}
}
catch (QueueEmptyException exc) {
Console.WriteLine(exc);
}
}
}