15aa3b6a6SXuan Hupackage utils 25aa3b6a6SXuan Hu 35aa3b6a6SXuan Huobject MathUtils { 45aa3b6a6SXuan Hu def IntToOH(n: Int): BigInt = { 55aa3b6a6SXuan Hu BigInt(1) << n 65aa3b6a6SXuan Hu } 7*62a2cb19SXuan Hu 8*62a2cb19SXuan Hu object BigIntGenMask { 9*62a2cb19SXuan Hu // generate w/r mask 10*62a2cb19SXuan Hu def apply(high: Int, low: Int): BigInt = { 11*62a2cb19SXuan Hu require(high > low) 12*62a2cb19SXuan Hu val maskLen = high - low + 1 13*62a2cb19SXuan Hu ((BigInt(1) << maskLen) - 1) << low 14*62a2cb19SXuan Hu } 15*62a2cb19SXuan Hu 16*62a2cb19SXuan Hu def apply(pos: Int): BigInt = { 17*62a2cb19SXuan Hu BigInt(1) << pos 18*62a2cb19SXuan Hu } 19*62a2cb19SXuan Hu } 20*62a2cb19SXuan Hu 21*62a2cb19SXuan Hu object BigIntNot { 22*62a2cb19SXuan Hu def apply(bigInt: BigInt): BigInt = { 23*62a2cb19SXuan Hu var res = bigInt 24*62a2cb19SXuan Hu val len = bigInt.bitLength 25*62a2cb19SXuan Hu for (i <- 0 until len) { 26*62a2cb19SXuan Hu res = res.flipBit(i) 27*62a2cb19SXuan Hu } 28*62a2cb19SXuan Hu res 29*62a2cb19SXuan Hu } 30*62a2cb19SXuan Hu } 315aa3b6a6SXuan Hu} 32