/ptr_math

Pointer arithmetic in Nim

Primary LanguageNimMIT LicenseMIT

Pointer Arithmetic in Nim

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

This module implements basic pointer arithmetic functionality.

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

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 using Nim devel version. The version was 1.5.1 as of writing this on <2021-06-03 Thu>.

Prep

Once you clone this repo, cd to the cloned directory and run the below command first (before you execute any of the below “nim” commands):

nim pullConfig

This will clone my global config.nims file into a <repo>/nim_config/ directory. That will enable running the nim test and nim docs commands.

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.