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)
何だかとても固いコードを書いている気になる。
続く。