Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class UnderflowException(msg: String) extends Exception(msg)
- class Point(var x:Double = 0.0, var y:Double = 0.0) {
- override def toString= "[" + x + ", " + y + "]"
- }
- import java.awt.Color
- class Pixel(xp:Double=0.0, yp:Double=0.0,
- var color:Color= Color.BLACK) extends Point(xp, yp) {
- override def toString = super.toString+ " " + color
- }
- class Queue[+T] private(private val queue: (List[T], List[T])) {
- def enqueue[S >: T](element: S): Queue[S] = {
- val (firstList, secondList) = queue
- normalize(firstList, element :: secondList)
- }
- private def normalize[S >: T](list1: List[S], list2: List[S]) =
- (list1, list2) match {
- case (Nil, secondList) => new Queue[S]((secondList.reverse, Nil))
- case normalQueue => new Queue(normalQueue)
- }
- def dequeue: Queue[T] =
- queue match {
- case (_ :: tl, secondList) => normalize(tl, secondList)
- case _ => Queue.empty
- }
- def first: T =
- queue._1 match {
- case (hd :: _) => hd
- case _ => throw new UnderflowException("first")
- }
- def isEmpty: Boolean =
- queue._1 == Nil
- override def toString = "{ " + queue._1.toString + " | " + queue._2.toString + "}"
- }
- object Queue {
- def apply[T](xs: T*) = new Queue[T](xs.toList, Nil)
- def empty[T] = new Queue[T](Nil, Nil)
- }
- val qP = Queue(new Point(1,1),new Point(3,3),new Point(5,5))
- val qPx = Queue.empty
- val qPx1 = Queue.empty
- qP.enqueue(new Point(7,7))
- qPx.enqueue(new Pixel(2,2,Color.RED))
- val qPx1 = qOfPixels.dequeue
- val qP1:Queue[Point] = Queue(new Pixel(1,1))
- qP1.first.asInstanceOf[Pixel]
- qP.dequeue
- qPx.first
- qP.first
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement