async_postgres/pg_bytes

Low-level byte buffer helpers for big-endian encoding / bulk copy.

This module is dependency-free (stdlib only) and intended to be imported from both pg_protocol and pg_types/* without introducing circular dependencies. Prefer these helpers over hand-written copyMem calls for readability and to keep addr use localized.

Procs

func decodeFloat32BE(data: openArray[byte]; offset = 0): float32 {.inline,
    ...raises: [], tags: [], forbids: [].}
Decode a big-endian IEEE-754 32-bit float from data at offset.
func decodeFloat64BE(data: openArray[byte]; offset = 0): float64 {.inline,
    ...raises: [], tags: [], forbids: [].}
Decode a big-endian IEEE-754 64-bit float from data at offset.
func fromBE16(data: openArray[byte]; offset = 0): int16 {.inline, ...raises: [],
    tags: [], forbids: [].}
Decode a big-endian 16-bit integer from data at offset.
func fromBE32(data: openArray[byte]; offset = 0): int32 {.inline, ...raises: [],
    tags: [], forbids: [].}
Decode a big-endian 32-bit integer from data at offset.
func fromBE64(data: openArray[byte]; offset = 0): int64 {.inline, ...raises: [],
    tags: [], forbids: [].}
Decode a big-endian 64-bit integer from data at offset.
proc readBytes(src: openArray[byte]; off, len: int): seq[byte] {....raises: [],
    tags: [], forbids: [].}
Copy len bytes from src starting at off into a new seq[byte].
proc readString(src: openArray[byte]; off, len: int): string {....raises: [],
    tags: [], forbids: [].}
Copy len bytes from src starting at off into a new string.
func toBE16(v: int16): array[2, byte] {.inline, ...raises: [], tags: [],
                                        forbids: [].}
Encode a 16-bit integer as big-endian bytes.
func toBE32(v: int32): array[4, byte] {.inline, ...raises: [], tags: [],
                                        forbids: [].}
Encode a 32-bit integer as big-endian bytes.
func toBE64(v: int64): array[8, byte] {.inline, ...raises: [], tags: [],
                                        forbids: [].}
Encode a 64-bit integer as big-endian bytes.

Templates

template appendBytes(buf: var seq[byte]; src: openArray[byte])
Append src bytes to the end of buf. No-op when src is empty.
template writeBE16(buf: var openArray[byte]; pos: int; v: int16)
template writeBE32(buf: var openArray[byte]; pos: int; v: int32)
template writeBE64(buf: var openArray[byte]; pos: int; v: int64)
template writeBytesAt(dst: var openArray[byte]; pos: int; src: openArray[byte])
Copy src bytes into dst starting at pos. No-op when src is empty.