Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. class UnderflowException(msg: String) extends Exception(msg)
  2.  
  3. class Point(var x:Double = 0.0, var y:Double = 0.0) {
  4. override def toString= "[" + x + ", " + y + "]"
  5. }
  6.  
  7. import java.awt.Color
  8.  
  9. class Pixel(xp:Double=0.0, yp:Double=0.0,
  10. var color:Color= Color.BLACK) extends Point(xp, yp) {
  11.  
  12. override def toString = super.toString+ " " + color
  13. }
  14.  
  15.  
  16. class Queue[+T] private(private val queue: (List[T], List[T])) {
  17.  
  18. def enqueue[S >: T](element: S): Queue[S] = {
  19. val (firstList, secondList) = queue
  20. normalize(firstList, element :: secondList)
  21. }
  22.  
  23. private def normalize[S >: T](list1: List[S], list2: List[S]) =
  24. (list1, list2) match {
  25. case (Nil, secondList) => new Queue[S]((secondList.reverse, Nil))
  26. case normalQueue => new Queue(normalQueue)
  27. }
  28.  
  29. def dequeue: Queue[T] =
  30. queue match {
  31. case (_ :: tl, secondList) => normalize(tl, secondList)
  32. case _ => Queue.empty
  33. }
  34.  
  35. def first: T =
  36. queue._1 match {
  37. case (hd :: _) => hd
  38. case _ => throw new UnderflowException("first")
  39. }
  40.  
  41. def isEmpty: Boolean =
  42. queue._1 == Nil
  43.  
  44. override def toString = "{ " + queue._1.toString + " | " + queue._2.toString + "}"
  45.  
  46. }
  47.  
  48. object Queue {
  49. def apply[T](xs: T*) = new Queue[T](xs.toList, Nil)
  50.  
  51. def empty[T] = new Queue[T](Nil, Nil)
  52. }
  53.  
  54.  
  55.  
  56.  
  57. val qP = Queue(new Point(1,1),new Point(3,3),new Point(5,5))
  58. val qPx = Queue.empty
  59. val qPx1 = Queue.empty
  60.  
  61. qP.enqueue(new Point(7,7))
  62. qPx.enqueue(new Pixel(2,2,Color.RED))
  63.  
  64. val qPx1 = qOfPixels.dequeue
  65.  
  66. val qP1:Queue[Point] = Queue(new Pixel(1,1))
  67. qP1.first.asInstanceOf[Pixel]
  68.  
  69. qP.dequeue
  70.  
  71. qPx.first
  72. qP.first
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement