Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2014
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     abstract class CacheBase() {
  2.         def apply(key: Int): Float
  3.     }
  4.  
  5.  
  6.    case class CacheLeaf(key: Int, f: Int => Float) extends CacheBase {
  7.         lazy val value = f(key)
  8.         def apply(key: Int) = value
  9.     }
  10.  
  11.     object CacheNode {
  12.         def apply(size: Int, f: Int => Float): CacheNode = {
  13.  
  14.             def level(size: Int, mask: Int = 1): Int = size match {
  15.                 case 1 | 0 => mask
  16.                 case _     => level(size >> 1, mask << 1)
  17.             }
  18.  
  19.             CacheNode(level(size), 0, f)
  20.         }
  21.     }
  22.  
  23.     case class CacheNode(level: Int, key: Int, f: Int => Float) extends CacheBase {
  24.         lazy val left = if (level == 0) {
  25.             CacheLeaf(key, f)
  26.         } else {
  27.             CacheNode(level >> 1, key | level, f)
  28.         }
  29.  
  30.         lazy val right = if (level == 0) {
  31.             CacheLeaf(key, f)
  32.         } else {
  33.             CacheNode(level >> 1, key, f)
  34.         }
  35.  
  36.         def apply(key: Int) = if ((key & level) > 0) {
  37.             left(key)
  38.         } else {
  39.             right(key)
  40.         }
  41.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement