Advertisement
Guest User

Untitled

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