diff --git a/README.md b/README.md index 18cf6c3..ebc9370 100644 --- a/README.md +++ b/README.md @@ -366,6 +366,14 @@ Calling from Scheme: The passed c-bytevector, in example named cbv, should only be used **after** call to call-with-addres-of ends. +(**bytevector->c-bytevector** _bytevector_) + +Returns a newly allocated c-bytevector of the bytes of _bytevector_. + +(**c-bytevector->bytevector**) + +Returns a newly allocated bytevector of the bytes of _c-bytevector_. + (**native-endianness**) Returns the endianness symbol associated implementation’s preferred endianness @@ -396,10 +404,10 @@ If K is not a valid index of c-bytevector the behaviour is undefined. Returns the byte at index k of c-bytevector. -(**c-bytevector-uint-ref** _bytevector_ _k_ _endianness_ _size_) -(**c-bytevector-sint-ref** _bytevector_ _k_ _endianness_ _size_)
-(**c-bytevector-uint-set!** _bytevector_ _k_ _n_ _endianness_ _size_)
-(**c-bytevector-sint-set!** _bytevector_ _k_ _n_ _endianness_ _size_)
+(**c-bytevector-uint-ref** _c-bytevector_ _k_ _endianness_ _size_)
+(**c-bytevector-sint-ref** _c-bytevector_ _k_ _endianness_ _size_)
+(**c-bytevector-uint-set!** _c-bytevector_ _k_ _n_ _endianness_ _size_)
+(**c-bytevector-sint-set!** _c-bytevector_ _k_ _n_ _endianness_ _size_) Size must be a positive exact integer object. If _k_,...,_k_ + _size_ − 1 is not valid indices of c-bytevector the behavior is unspecified. @@ -428,14 +436,14 @@ Examples: > 100 -(**c-bytevector-u16-ref** _bytevector_ _k_ _endianness_) -(**c-bytevector-s16-ref** _bytevector_ _k_ _endianness_) -(**c-bytevector-u16-native-ref** _bytevector_ _k_) -(**c-bytevector-s16-native-ref** _bytevector_ _k_) -(**c-bytevector-u16-set!** _bytevector_ _k_ _n_ _endianness_) -(**c-bytevector-s16-set!** _bytevector_ _k_ _n_ _endianness_) -(**c-bytevector-u16-native-set!** _bytevector_ _k_ _n_) -(**c-bytevector-s16-native-set!** _bytevector_ _k_ _n_) +(**c-bytevector-u16-ref** _c-bytevector_ _k_ _endianness_)
+(**c-bytevector-s16-ref** _c-bytevector_ _k_ _endianness_)
+(**c-bytevector-u16-native-ref** _c-bytevector_ _k_)
+(**c-bytevector-s16-native-ref** _c-bytevector_ _k_)
+(**c-bytevector-u16-set!** _c-bytevector_ _k_ _n_ _endianness_)
+(**c-bytevector-s16-set!** _c-bytevector_ _k_ _n_ _endianness_)
+(**c-bytevector-u16-native-set!** _c-bytevector_ _k_ _n_)
+(**c-bytevector-s16-native-set!** _c-bytevector_ _k_ _n_) _K_ must be a valid index of _c-bytevector_ ; so must _k_ + 1. For c-bytevector-u16-set! and c-bytevector-u16-native-set!, _n_ must be an exact @@ -453,14 +461,14 @@ work only at aligned indices: _k_ must be a multiple of 2. The ...-set! procedures return unspecified values. -(**c-bytevector-u32-ref** _bytevector_ _k_ _endianness_) -(**c-bytevector-s32-ref** _bytevector_ _k_ _endianness_) -(**c-bytevector-u32-native-ref** _bytevector_ _k_) -(**c-bytevector-s32-native-ref** _bytevector_ _k_) -(**c-bytevector-u32-set!** _bytevector_ _k_ _n_ _endianness_) -(**c-bytevector-s32-set!** _bytevector_ _k_ _n_ _endianness_) -(**c-bytevector-u32-native-set!** _bytevector_ _k_ _n_) -(**c-bytevector-s32-native-set!** _bytevector_ _k_ _n_) +(**c-bytevector-u32-ref** _c-bytevector_ _k_ _endianness_)
+(**c-bytevector-s32-ref** _c-bytevector_ _k_ _endianness_)
+(**c-bytevector-u32-native-ref** _c-bytevector_ _k_)
+(**c-bytevector-s32-native-ref** _c-bytevector_ _k_)
+(**c-bytevector-u32-set!** _c-bytevector_ _k_ _n_ _endianness_)
+(**c-bytevector-s32-set!** _c-bytevector_ _k_ _n_ _endianness_)
+(**c-bytevector-u32-native-set!** _c-bytevector_ _k_ _n_)
+(**c-bytevector-s32-native-set!** _c-bytevector_ _k_ _n_) _K_,...,_k_ + 3 must be valid indices of bytevector. For c-bytevector-u32-set! and bytevector-u32-native-set!, _n_ must be an exact integer object in the @@ -478,30 +486,79 @@ work only at aligned indices: _k_ must be a multiple of 4. The ...-set! procedures return unspecified values. -(**c-bytevector-s64-set!**) -(**c-bytevector-s64-ref**) -(**c-bytevector-s64-native-set!**) -(**c-bytevector-s64-native-ref**) -(**c-bytevector-u64-set!**) -(**c-bytevector-u64-ref**) -(**c-bytevector-u64-native-set!**) -(**c-bytevector-u64-native-ref**) +(**c-bytevector-u64-ref** _c-bytevector_ _k_ _endianness_)
+(**c-bytevector-s64-ref** _c-bytevector_ _k_ _endianness_)
+(**c-bytevector-u64-native-ref** _c-bytevector_ _k_)
+(**c-bytevector-s64-native-ref** _c-bytevector_ _k_)
+(**c-bytevector-u64-set!** _c-bytevector_ _k_ _n_ _endianness_)
+(**c-bytevector-s64-set!** _c-bytevector_ _k_ _n_ _endianness_)
+(**c-bytevector-u64-native-set!** _c-bytevector_ _k_ _n_)
+(**c-bytevector-s64-native-set!** _c-bytevector_ _k_ _n_) -(**c-bytevector-ieee-single-set!**) -(**c-bytevector-ieee-single-native-set!**) -(**c-bytevector-ieee-single-ref**) -(**c-bytevector-ieee-single-native-ref**) +_K_,...,_k_ + 7 must be valid indices of _c-bytevector_. For +c-bytevector-u64-set! and c-bytevector-u64-native-set!, _n_ must be an exact +integer object in the interval {0,...,264 − 1}. For c-bytevector-s64-set! and +c-bytevector-s64-native-set!, _n_ must be an exact integer object in the +interval {−263,...,264 − 1}. + +These retrieve and set eight-byte representations of numbers at indices +_k_,...,_k_ + 7, according to the endianness specified by _endianness_. The +procedures with u64 in their names deal with the unsigned representation; those +with s64 with the two’s-complement representation. + +The procedures with native in their names employ the native endianness, and +work only at aligned indices: _k_ must be a multiple of 8. + +The ...-set! procedures return unspecified values. + +(**c-bytevector-ieee-single-native-ref**)
+(**c-bytevector-ieee-single-ref**)
+ +_K_,...,_k_ + 3 must be valid indices of _c-bytevector_. For +c-bytevector-ieee-single-native-ref, _k_ must be a multiple of 4. + +These procedures return the inexact real number object that best represents the +IEEE-754 single-precision number represented by the four bytes beginning at +index _k_. -(**c-bytevector-ieee-double-set!**) -(**c-bytevector-ieee-double-native-set!**) -(**c-bytevector-ieee-double-ref**) (**c-bytevector-ieee-double-native-ref**) +(**c-bytevector-ieee-double-ref**) -(**bytevector->c-bytevector**) -(**c-bytevector->bytevector**) +_K_,...,_k_ + 7 must be valid indices of _c-bytevector_. For +c-bytevector-ieee-double-native-ref, _k_ must be a multiple of 8. -(**string->c-utf8**) -(**c-utf8->string**) +These procedures return the inexact real number object that best represents the +IEEE-754 double-precision number represented by the eight bytes beginning at +index _k_. + +(**c-bytevector-ieee-single-native-set!**) +(**c-bytevector-ieee-single-set!**) + +_K_,...,_k_ + 3 must be valid indices of _c-bytevector_. For +c-bytevector-ieee-single-native-set!, _k_ must be a multiple of 4. + +These procedures store an IEEE-754 single-precision representation of x into +elements _k_ through _k_ + 3 of bytevector, and return unspecified values. + +(**c-bytevector-ieee-double-native-set!**) +(**c-bytevector-ieee-double-set!**) + +_K_,...,_k_ + 7 must be valid indices of bytevector. For +c-bytevector-ieee-double-native-set!, _k_ must be a multiple of 8. + +These procedures store an IEEE-754 double-precision representation of x into +elements _k_ through _k_ + 7 of bytevector, andreturn unspecified values. + + +(**string->c-utf8** _string_) + +Returns a newly allocated (unless empty) c-bytevector that contains the +UTF-8 encoding of the given string. + +(**c-utf8->string** _c-bytevector_) + +Returns a newly allocated (unless empty) string whose character sequence is +encoded by the given c-bytevector. ### Environment variables diff --git a/foreign/c.sld b/foreign/c.sld index bb64728..9b1cd9d 100644 --- a/foreign/c.sld +++ b/foreign/c.sld @@ -226,6 +226,9 @@ c-free call-with-address-of + bytevector->c-bytevector + c-bytevector->bytevector + ;; TODO endianness native-endianness make-c-bytevector @@ -265,30 +268,35 @@ c-bytevector-u32-native-set! c-bytevector-s32-native-set! - c-bytevector-s64-set! - c-bytevector-s64-ref - c-bytevector-s64-native-set! - c-bytevector-s64-native-ref - c-bytevector-u64-set! c-bytevector-u64-ref - c-bytevector-u64-native-set! + c-bytevector-s64-ref + c-bytevector-s64-native-ref c-bytevector-u64-native-ref + c-bytevector-u64-set! + c-bytevector-s64-set! + c-bytevector-u64-native-set! + c-bytevector-s64-native-set! - c-bytevector-ieee-single-set! - c-bytevector-ieee-single-native-set! - c-bytevector-ieee-single-ref c-bytevector-ieee-single-native-ref + c-bytevector-ieee-single-ref - c-bytevector-ieee-double-set! - c-bytevector-ieee-double-native-set! - c-bytevector-ieee-double-ref c-bytevector-ieee-double-native-ref + c-bytevector-ieee-double-ref - bytevector->c-bytevector - c-bytevector->bytevector + c-bytevector-ieee-single-native-set! + c-bytevector-ieee-single-set! + + c-bytevector-ieee-double-native-set! + c-bytevector-ieee-double-set! string->c-utf8 + ;; TODO string->c-utf16 + ;; TODO string->c-utf32 + c-utf8->string + ;; TODO c-utf16->string + ;; TODO c-utf32->string + ;c-string-length ;; TODO Documentation, Testing