File tree Expand file tree Collapse file tree 3 files changed +139
-0
lines changed
main/java/com/lightningkite/kotlin/bytes
test/java/com/lightningkite/kotlin Expand file tree Collapse file tree 3 files changed +139
-0
lines changed Original file line number Diff line number Diff line change
1
+ package com.lightningkite.kotlin.bytes
2
+
3
+ /* *
4
+ *
5
+ * Created by shanethompson on 6/29/17.
6
+ *
7
+ */
8
+
9
+ class IntBitArray (var value : Int = 0 ) : Iterable<Boolean> {
10
+ operator fun get (index : Int ): Boolean {
11
+ return value.ushr(index).and (0x1 ) == 1
12
+ }
13
+
14
+ operator fun set (index : Int , isTrue : Boolean ) {
15
+ if (isTrue) {
16
+ value = value or 0x1 .shl(index)
17
+ } else {
18
+ value = value.and (1 .shl(index).inv ())
19
+ }
20
+ }
21
+
22
+ override fun iterator (): Iterator <Boolean > {
23
+ return object : Iterator <Boolean > {
24
+ var currentIndex = 0
25
+ override fun hasNext (): Boolean {
26
+ return currentIndex < 32
27
+ }
28
+
29
+ override fun next (): Boolean {
30
+ val result = this @IntBitArray[currentIndex]
31
+ currentIndex++
32
+ return result
33
+ }
34
+ }
35
+ }
36
+ }
37
+
38
+ fun Int.toBitArray (): IntBitArray {
39
+ return IntBitArray (this )
40
+ }
Original file line number Diff line number Diff line change
1
+ package com.lightningkite.kotlin.bytes
2
+
3
+ /* *
4
+ *
5
+ * Created by shanethompson on 6/29/17.
6
+ *
7
+ */
8
+
9
+
10
+ class LongBitArray (var value : Long = 0 ) : Iterable<Boolean> {
11
+ operator fun get (index : Int ): Boolean {
12
+ return value.ushr(index).and (0x1 ) == 1L
13
+ }
14
+
15
+ operator fun set (index : Int , isTrue : Boolean ) {
16
+ if (isTrue) {
17
+ value = value or 0x1 .shl(index).toLong()
18
+ } else {
19
+ value = value.and (1 .shl(index).inv ().toLong())
20
+ }
21
+ }
22
+
23
+ override fun iterator (): Iterator <Boolean > {
24
+ return object : Iterator <Boolean > {
25
+ var currentIndex = 0
26
+ override fun hasNext (): Boolean {
27
+ return currentIndex < 64
28
+ }
29
+
30
+ override fun next (): Boolean {
31
+ val result = this @LongBitArray[currentIndex]
32
+ currentIndex++
33
+ return result
34
+ }
35
+ }
36
+ }
37
+ }
38
+
39
+ fun Long.toBitArray (): LongBitArray {
40
+ return LongBitArray (this )
41
+ }
Original file line number Diff line number Diff line change
1
+ package com.lightningkite.kotlin
2
+
3
+ import com.lightningkite.kotlin.bytes.toBitArray
4
+ import org.junit.Test
5
+ import org.junit.Assert.*
6
+
7
+ class BitArrayTest {
8
+
9
+ @Test
10
+ fun testIntBitArray () {
11
+ var intArray = 0 .toBitArray()
12
+ intArray.forEach {
13
+ assertFalse(it)
14
+ }
15
+ assertEquals(0 , intArray.value)
16
+ intArray[0 ] = true
17
+ assertEquals(1 , intArray.value)
18
+ intArray[4 ] = true
19
+ intArray.forEachIndexed { index, b ->
20
+ when (index) {
21
+ 0 -> assertTrue(b)
22
+ 4 -> assertTrue(b)
23
+ else -> assertFalse(b)
24
+ }
25
+ }
26
+ intArray[31 ] = true
27
+ assertTrue(intArray[31 ])
28
+ for (i in 0 .. 31 ) {
29
+ intArray[i] = true
30
+ }
31
+ intArray.forEach { assertTrue(it) }
32
+ }
33
+
34
+ @Test
35
+ fun testLongArray () {
36
+ var longArray = 0L .toBitArray()
37
+ longArray.forEach {
38
+ assertFalse(it)
39
+ }
40
+ assertEquals(0 , longArray.value)
41
+ longArray[0 ] = true
42
+ assertEquals(1 , longArray.value)
43
+ longArray[4 ] = true
44
+ longArray.forEachIndexed { index, b ->
45
+ when (index) {
46
+ 0 -> assertTrue(b)
47
+ 4 -> assertTrue(b)
48
+ else -> assertFalse(b)
49
+ }
50
+ }
51
+ longArray[31 ] = true
52
+ assertTrue(longArray[31 ])
53
+ for (i in 0 .. 63 ) {
54
+ longArray[i] = true
55
+ }
56
+ longArray.forEach { assertTrue(it) }
57
+ }
58
+ }
You can’t perform that action at this time.
0 commit comments