racket/collects/tests/mzscheme/benchmarks/rx/pcre.ss
2008-02-23 09:42:03 +00:00

35 lines
991 B
Scheme

(module pcre mzscheme
(require mzlib/foreign)
(unsafe!)
(provide pcregexp
pcregexp-match)
(define pcre-lib (ffi-lib "libpcre"))
(define pcre-compile
(get-ffi-obj "pcre_compile" pcre-lib
(_fun _bytes _int _bytes _bytes _pointer
-> _pointer)))
(define pcre-study
(get-ffi-obj "pcre_study" pcre-lib
(_fun _pointer _int _bytes
-> _pointer)))
(define pcre-exec
(get-ffi-obj "pcre_exec" pcre-lib
(_fun _pointer _pointer _bytes _int
_int _int _bytes _int
-> _int)))
(define random-vector (make-bytes 100))
(define (pcregexp s)
(let* ([pat (pcre-compile s 0 random-vector random-vector #f)]
[extra (pcre-study pat 0 random-vector)])
(cons pat extra)))
(define (pcregexp-match re bytes)
(pcre-exec (car re) (cdr re) bytes (bytes-length bytes)
0 0 random-vector 10)))