summary refs log tree commit diff stats
path: root/tests/converter/t7097.nim
blob: fdb5735886fe8fb2f2f73c16b6d633125420174a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
type
  Byte* = uint8
  Bytes* = seq[Byte]
  
  BytesRange* = object
    bytes: Bytes
    ibegin, iend: int

proc initBytesRange*(s: var Bytes, ibegin = 0, iend = -1): BytesRange =
  let e = if iend < 0: s.len + iend + 1
          else: iend
  assert ibegin > 0 and e <= s.len
  
  shallow(s)
  result.bytes = s
  result.ibegin = ibegin
  result.iend = e

template `[]=`*(r: var BytesRange, i: int, v: Byte) =
  r.bytes[r.ibegin + i] = v

converter fromSeq*(s: Bytes): BytesRange =
  var seqCopy = s
  return initBytesRange(seqCopy)

type
  Reader* = object
    data: BytesRange
    position: int

proc readerFromHex*(input: string): Reader =
  let totalBytes = input.len div 2
  var backingStore = newSeq[Byte](totalBytes)
  result.data = initBytesRange(backingStore)

  for i in 0 ..< totalBytes:
    var nextByte = 0
    result.data[i] = Byte(nextByte) # <-------- instantiated from here