Skip to content

Instantly share code, notes, and snippets.

@samdphillips
Created January 4, 2022 01:52
Show Gist options
  • Save samdphillips/db507867cebff520c2affccc73dba6c9 to your computer and use it in GitHub Desktop.
Save samdphillips/db507867cebff520c2affccc73dba6c9 to your computer and use it in GitHub Desktop.
Barely using Arrow array library from Racket
#lang racket/base
(require ffi/unsafe
gir)
(define arrow-lib (gi-ffi "Arrow"))
(define (make-arrow-buffer buf size)
(arrow-lib 'Buffer 'new buf size))
(define (make-arrow-double-array size buf)
(arrow-lib 'DoubleArray 'new size (buf ':this) #f 0))
(define array-size 32)
(define bytes-size (* 8 array-size))
(define rdata (make-bytes bytes-size))
(for ([n (in-naturals 42)]
[i (in-range array-size)])
(real->floating-point-bytes n 8 (system-big-endian?) rdata (* i 8)))
;; memory for the buffer
(define data (malloc bytes-size 'raw))
;; copy racket bytes into a raw bit of memory
(memcpy data rdata bytes-size)
(define an-arrow-buffer
(make-arrow-buffer data bytes-size))
(define a-double-array
(make-arrow-double-array array-size an-arrow-buffer))
(for ([i (in-range array-size)])
(displayln (a-double-array 'get_value i)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment