#lang racket/base
(require ffi/unsafe)
(provide pointer->num
num->pointer)
(define ptr-size (ctype-sizeof _pointer))
(define int-type
(cond [(= ptr-size 4) _uint32]
[(= ptr-size 8) _uint64]
[else
(error 'pointer->num
"pointer-size isn't 4 or 8: ~e" ptr-size)]))
(define (pointer->num ptr)
(cast ptr _pointer int-type))
(define (num->pointer num)
(cast num int-type _pointer))
(define my-ptr (malloc 14 'raw))
(unless (equal? my-ptr (num->pointer (pointer->num my-ptr)))
(error 'horrible-hack "round-tripping is broken."))
(free my-ptr)