Advertisement
Guest User

Untitled

a guest
Oct 8th, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.30 KB | None | 0 0
  1. trait Graph[G <: AnyRef] extends Equal[G]{ self =>
  2.  
  3.   def vertices(g: G): Iterable[Int]
  4.   def edges(g: G): Iterable[Int]
  5.  
  6.   /** The order of the graph. This is equal to the number of vertices stored.
  7.     *
  8.     * WARNING: Will not complete for graphs where |V| is functionally infinite.
  9.     *
  10.     * @return The number of vertices in the graph
  11.     */
  12.   def order(g: G): Int = vertices(g).size
  13.  
  14.   /** The size of the graph. This is equal to the number of edges stored.
  15.     *
  16.     * WARNING: Will not complete for graphs where |E| is functionally infinite.
  17.     *
  18.     * @return The number of edges in the graph
  19.     */
  20.   def size(g: G): Int = edges(g).size
  21.  
  22.   def findVertex[V : Vertex](g: G)(f: V => Boolean): Option[V]
  23.  
  24.   def findEdge[E[_, _] : Edge](g: G)(f: E => Boolean): Option[E]
  25.  
  26.   def plusVertex[V : Vertex](g: G, v: V): G
  27.  
  28.   def minusVertex[V : Vertex](g: G, v: V): G
  29.  
  30.   def plusEdge[E[_, _] : Edge](g: G, e: E): G
  31.  
  32.   def minusEdge[E[_, _] : Edge](g: G, e: E): G
  33.  
  34.   override def equal(g1: G, g2: G) = {
  35.     import scalaz.std.iterable._
  36.     (g1 eq g2) ||
  37.       ((self.order(g1) === self.order(g2)) &&
  38.         (self.size(g1) === self.size(g2)) &&
  39.         (self.vertices(g1) === self.vertices(g2)) &&
  40.         (self.edges(g1) === self.vertices(g2)))
  41.  
  42.     //Last two === cannot be resolved
  43.   }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement