chibi-scheme/lib/srfi/160/uvprims.stub

170 lines
4.8 KiB
Text

(define-c-const int
SEXP_U1
SEXP_S8
SEXP_U8
SEXP_S16
SEXP_U16
SEXP_S32
SEXP_U32
SEXP_S64
SEXP_U64
SEXP_F32
SEXP_F64
SEXP_C64
SEXP_C128)
(c-declare "
int uvector_of(sexp uv, int etype) {
return sexp_uvectorp(uv) && sexp_uvector_type(uv) == etype;
}
int u1vector_ref(sexp uv, int i) {
return sexp_bit_ref(uv, i);
}
void u1vector_set(sexp uv, int i, int b) {
sexp_bit_set(uv, i, b);
}
signed char s8vector_ref(signed char* uv, int i) {
return uv[i];
}
void s8vector_set(signed char* uv, int i, signed char v) {
uv[i] = v;
}
unsigned short u16vector_ref(unsigned short* uv, int i) {
return uv[i];
}
void u16vector_set(unsigned short* uv, int i, unsigned short v) {
uv[i] = v;
}
short s16vector_ref(short* uv, int i) {
return uv[i];
}
void s16vector_set(short* uv, int i, short v) {
uv[i] = v;
}
unsigned int u32vector_ref(unsigned int* uv, int i) {
return uv[i];
}
void u32vector_set(unsigned int* uv, int i, unsigned int v) {
uv[i] = v;
}
int s32vector_ref(int* uv, int i) {
return uv[i];
}
void s32vector_set(int* uv, int i, int v) {
uv[i] = v;
}
unsigned long u64vector_ref(unsigned long* uv, int i) {
return uv[i];
}
void u64vector_set(unsigned long* uv, int i, unsigned long v) {
uv[i] = v;
}
long s64vector_ref(long* uv, int i) {
return uv[i];
}
void s64vector_set(long* uv, int i, long v) {
uv[i] = v;
}
float f32vector_ref(float* uv, int i) {
return uv[i];
}
void f32vector_set(float* uv, int i, float v) {
uv[i] = v;
}
double f64vector_ref(double* uv, int i) {
return uv[i];
}
void f64vector_set(double* uv, int i, double v) {
uv[i] = v;
}
sexp c64vector_ref(sexp ctx, float* uv, int i) {
sexp_gc_var3(real, imag, res);
sexp_gc_preserve3(ctx, real, imag, res);
real = sexp_make_flonum(ctx, uv[i*2]);
imag = sexp_make_flonum(ctx, uv[i*2 + 1]);
res = sexp_make_complex(ctx, real, imag);
sexp_gc_release3(ctx);
return res;
}
void c64vector_set(float* uv, int i, sexp v) {
uv[i*2] = sexp_to_double(sexp_real_part(v));
uv[i*2 + 1] = sexp_to_double(sexp_imag_part(v));
}
sexp c128vector_ref(sexp ctx, double* uv, int i) {
sexp_gc_var3(real, imag, res);
sexp_gc_preserve3(ctx, real, imag, res);
real = sexp_make_flonum(ctx, uv[i*2]);
imag = sexp_make_flonum(ctx, uv[i*2 + 1]);
res = sexp_make_complex(ctx, real, imag);
sexp_gc_release3(ctx);
return res;
}
void c128vector_set(double* uv, int i, sexp v) {
uv[i*2] = sexp_to_double(sexp_real_part(v));
uv[i*2 + 1] = sexp_to_double(sexp_imag_part(v));
}
")
(define-c int (uvector-length "sexp_uvector_length") (uvector))
(define-c int (u1vector? "uvector_of") (uvector (value SEXP_U1 int)))
(define-c int (s8vector? "uvector_of") (uvector (value SEXP_S8 int)))
(define-c int (u16vector? "uvector_of") (uvector (value SEXP_U16 int)))
(define-c int (s16vector? "uvector_of") (uvector (value SEXP_S16 int)))
(define-c int (u32vector? "uvector_of") (uvector (value SEXP_U32 int)))
(define-c int (s32vector? "uvector_of") (uvector (value SEXP_S32 int)))
(define-c int (u64vector? "uvector_of") (uvector (value SEXP_U64 int)))
(define-c int (s64vector? "uvector_of") (uvector (value SEXP_S64 int)))
(define-c int (f32vector? "uvector_of") (uvector (value SEXP_F32 int)))
(define-c int (f64vector? "uvector_of") (uvector (value SEXP_F64 int)))
(define-c int (c64vector? "uvector_of") (uvector (value SEXP_C64 int)))
(define-c int (c128vector? "uvector_of") (uvector (value SEXP_C128 int)))
(define-c int u1vector-ref (sexp int))
(define-c void (u1vector-set! "u1vector_set") (sexp int int))
(define-c signed-char s8vector-ref (s8vector int))
(define-c void (s8vector-set! "s8vector_set") (s8vector int signed-char))
(define-c unsigned-short u16vector-ref (u16vector int))
(define-c void (u16vector-set! "u16vector_set") (u16vector int unsigned-short))
(define-c short s16vector-ref (s16vector int))
(define-c void (s16vector-set! "s16vector_set") (s16vector int short))
(define-c unsigned-int u32vector-ref (u32vector int))
(define-c void (u32vector-set! "u32vector_set") (u32vector int unsigned-int))
(define-c int s32vector-ref (s32vector int))
(define-c void (s32vector-set! "s32vector_set") (s32vector int int))
(define-c unsigned-long u64vector-ref (u64vector int))
(define-c void (u64vector-set! "u64vector_set") (u64vector int unsigned-long))
(define-c long s64vector-ref (s64vector int))
(define-c void (s64vector-set! "s64vector_set") (s64vector int long))
(define-c float f32vector-ref (f32vector int))
(define-c void (f32vector-set! "f32vector_set") (f32vector int float))
(define-c double f64vector-ref (f64vector int))
(define-c void (f64vector-set! "f64vector_set") (f64vector int double))
(define-c sexp c64vector-ref ((value ctx sexp) c64vector int))
(define-c void (c64vector-set! "c64vector_set") (c64vector int sexp))
(define-c sexp c128vector-ref ((value ctx sexp) c128vector int))
(define-c void (c128vector-set! "c128vector_set") (c128vector int sexp))