bytevector 周りの実装 1

2.2 General operations

(endianess )

これは psyntax でサポートされる。

(native-endianness)
#if WORDS_BIGENDIAN

で分岐して、'little か 'big を返す。

(bytevector? obj)

実装済み。

(make-bytevector k)

そのまま実装。

(make-bytevector k fill)

fill の範囲に注意。
equal に ByteVector の比較を追加。内部的には memcmp を使う。

(bytevector-length bytevector)

実装済み。

(bytevector=? bytevector1 bytevector2)

さっき作った関数がそのまま使える。
そういえば bytevector のリテラルは #vu8(1 2 3) 。将来の拡張を見越した気持ちは分かるのだけど、もう少し短い接頭子でも良かったような。

(bytevector-fill! bytevector fill)

memset 。fill の条件は make-bytevector と同じ。

(bytevector-copy! source source-start target target-start k)

重なりも考慮すべしとのこと。memmove。

(bytevector-copy bytevector)

コピーコピー。memcpy。

2.3 Operations on bytes and octets

(bytevector-u8-ref bytevector k)/(bytevector-s8-ref bytevector k)

バイトとオクテット。
#vu8(...) のリテラルの中ではオクテットのみ、bytevector-fill! などではどちらでも可。
添字の有効範囲やら、符号付きかどうか?などを細かくテスト。

(bytevector-u8-set! bytevector k octet)/(bytevector-s8-set! bytevector k byte)

同上。

(u8-list->bytevector list)

これは #vu8(...) を read するときにも使っているのでコードを共有するようにしよう。

(bytevector->u8-list bytevector)

何だかとても固いコードを書いている気になる。

続く。