123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- discard """
- output: "true"
- """
- type
- Idx = object
- i: int
- Node = object
- n: int
- next: seq[Idx]
- FooBar = object
- s: seq[Node]
- proc `=copy`(dest: var Idx; source: Idx) {.error.}
- proc `=copy`(dest: var Node; source: Node) {.error.}
- proc `=copy`(dest: var FooBar; source: FooBar) {.error.}
- proc doSomething(ss: var seq[int], s: FooBar) =
- for i in 0 .. s.s.len-1:
- for elm in items s.s[i].next:
- ss.add s.s[elm.i].n
- when isMainModule:
- const foo = FooBar(s: @[Node(n: 1, next: @[Idx(i: 0)])])
- var ss: seq[int]
- doSomething(ss, foo)
- echo ss == @[1]
- from sequtils import mapIt
- from strutils import join
- proc toBinSeq*(b: uint8): seq[uint8] =
- ## Return binary sequence from each bits of uint8.
- runnableExamples:
- from sequtils import repeat
- doAssert 0'u8.toBinSeq == 0'u8.repeat(8)
- doAssert 0b1010_1010.toBinSeq == @[1'u8, 0, 1, 0, 1, 0, 1, 0]
- result = @[]
- var c = b
- for i in 1..8:
- result.add (uint8(c and 0b1000_0000) shr 7)
- c = c shl 1
- proc toBinString*(data: openArray[uint8], col: int): string =
- ## Return binary string from each bits of uint8.
- runnableExamples:
- doAssert @[0b0000_1111'u8, 0b1010_1010].toBinString(8) == "0000111110101010"
- doAssert @[0b1000_0000'u8, 0b0000_0000].toBinString(1) == "10"
- result = ""
- for b in items data.mapIt(it.toBinSeq.mapIt(it.`$`[0].char)):
- for i, c in b:
- if i < col:
- result.add c
- doAssert @[0b0000_1111'u8, 0b1010_1010].toBinString(8) == "0000111110101010"
- doAssert @[0b1000_0000'u8, 0b0000_0000].toBinString(1) == "10"
|