kaushalmodi / ptr_math

Pointer arithmetic in Nim
https://kaushalmodi.github.io/ptr_math/
MIT License
16 stars 3 forks source link
arithmetic c ffi nim pointer

+title: Pointer Arithmetic in Nim

+author: Kaushal Modi

[[https://github.com/kaushalmodi/ptr_math/actions/workflows/test.yml][https://github.com/kaushalmodi/ptr_math/actions/workflows/test.yml/badge.svg]] [[https://github.com/kaushalmodi/ptr_math/actions/workflows/docs.yml][https://github.com/kaushalmodi/ptr_math/actions/workflows/docs.yml/badge.svg]]

This module implements basic pointer arithmetic functionality.

var a: array[0 .. 3, int] p = addr(a[0]) # p is pointing to a[0]

for i, _ in a: a[i] += i echo &"before : a = {a}"

p += 1 # p is now pointing to a[1] p[] = 100 # p[] is accessing the contents of a[1] echo &"after p += 1; p[] = 100 : a = {a}"

p[0] = 200 # .. so does p[0] echo &"after p[0] = 200 : a = {a}"

p[1] -= 2 # p[1] is accessing the contents of a[2] echo &"after p[1] -= 2 : a = {a}"

p[2] += 50 # p[2] is accessing the contents of a[3] echo &"after p[2] += 50 : a = {a}"

p += 2 # p is now pointing to a[3] p[-1] += 77 # p[-1] is accessing the contents of a[2] echo &"after p += 2; p[-1] += 77 : a = {a}"

echo &"a[0] = p[-3] = {p[-3]}" echo &"a[1] = p[-2] = {p[-2]}" echo &"a[2] = p[-1] = {p[-1]}" echo &"a[3] = p[0] = {p[0]}"

+end_src