ptr_math

Pointer arithmetic library


Keywords
pointer, arithmetic, math, c, ffi, nim
License
MIT
Install
nimble install ptr_math

Documentation

Pointer Arithmetic in Nim

This module implements basic pointer arithmetic functionality using Nim templates.

Documentation

https://kaushalmodi.github.io/ptr_math/

Installation

nimble install ptr_math

Quick Start

import std/[strformat]
import ptr_math

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}"

ptrMath:
  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]}"

Development

Requirement

This library is tested on Travis using Nim devel version. The version was 1.5.1 as of writing this on <2021-05-20 Thu>.

Prep

Once you clone this repo, do the below step first, before you execute any of the below “nim” commands:

# cd to the repo root
git clone https://github.com/kaushalmodi/nim_config && cp nim_config/config.nims .

Testing

nim test

Generate doc

Create the HTML page and associated search index in <repo>/public/.

nim docs

Credit

Most of the code in this library is from this code snippet authored by Nim Forum user Jehan.