add u8vector->cpointer for consistency; document ->cpointer, etc.

This commit is contained in:
Matthew Flatt 2010-09-26 14:56:38 -04:00
parent 43d7058a16
commit 337ace3847
2 changed files with 22 additions and 13 deletions

View File

@ -146,6 +146,13 @@
[bytes->list u8vector->list ]
[list->bytes list->u8vector ]
[_bytes _u8vector ]))
(define (u8vector->cpointer v)
(unless (bytes? v)
(raise-type-error 'u8vector->cpointer "byte string" v))
v)
(provide u8vector->cpointer)
;; additional `u8vector' bindings for srfi-66
(provide (rename-out [bytes-copy u8vector-copy] [bytes=? u8vector=?]))
(define* (u8vector-compare v1 v2)

View File

@ -1,5 +1,6 @@
#lang scribble/doc
@(require "utils.ss")
@(require "utils.ss"
(only-in scribble/decode make-splice))
@title[#:tag "homogeneous-vectors"]{Safe Homogenous Vectors}
@ -7,24 +8,21 @@
Homogenous vectors are similar to C vectors (see
@secref["foreign:cvector"]), except that they define different types
of vectors, each with a hard-wired type.
An exception is the @schemeidfont{u8} family of bindings, which are
just aliases for byte-string bindings: @scheme[make-u8vector],
@scheme[u8vector]. @scheme[u8vector?], @scheme[u8vector-length],
@scheme[u8vector-ref], @scheme[u8vector-set!],
@scheme[list->u8vector], @scheme[u8vector->list].
of vectors, each with a hard-wired type. An exception is the
@schemeidfont{u8} family of bindings, which are just aliases for
byte-string bindings; for example, @scheme[make-u8vector] is an alias
for @racket[make-bytes].
@(begin
(require (for-syntax scheme/base))
(define-syntax (srfi-4-vector stx)
(syntax-case stx ()
[(_ id elem)
#'(srfi-4-vector/desc id elem
#'(srfi-4-vector/desc id elem make-splice
"Like " (scheme make-vector) ", etc., but for " (scheme elem) " elements.")]))
(define-syntax (srfi-4-vector/desc stx)
(syntax-case stx ()
[(_ id elem . desc)
[(_ id elem extra desc ...)
(let ([mk
(lambda l
(datum->syntax
@ -57,7 +55,10 @@ just aliases for byte-string bindings: @scheme[make-u8vector],
[(list-> [lst (listof number?)]) ?]
[(->list [vec ?]) (listof number?)]
[(->cpointer [vec ?]) cpointer?])
. desc)
desc ...
(extra
(list
" The " (scheme ->cpointer) " function extracts a plain pointer to the underlying array.")))
;; Big pain: make up relatively-correct source locations
;; for pieces in the _vec definition:
(defform* [#,(datum->syntax
@ -93,10 +94,11 @@ just aliases for byte-string bindings: @scheme[make-u8vector],
"Like " (scheme _cvector) ", but for vectors of " (scheme elem) " elements."))))])))
@srfi-4-vector/desc[u8 _uint8]{
@srfi-4-vector/desc[u8 _uint8 (lambda (x) (make-splice null))]{
Like @scheme[_cvector], but for vectors of @scheme[_byte] elements. These are
aliases for @schemeidfont{byte} operations.}
aliases for @schemeidfont{byte} operations, where @racket[u8vector->cpointer]
is the identity function.}
@srfi-4-vector[s8 _int8]
@srfi-4-vector[s16 _int16]