On 14-Feb-09, at 11:58 PM, lowly coder wrote:
question 1:
Is it possible to write gambit code to produce the equiv of: int foo[200]; ?
the current best I have in mind is: (let ((foo (malloc (* 200 8)))) ... )
question 2: suppose I have:
(c-define-type bar "bar")
is there a way to create equiv of: bar foo[200]; ?
again, current best I have in mind is: (let ((foo (malloc (* 200 sizeof_bar)))) ... )
question 3:
in question 1, is there a way to access foo[i] ?
question 4:
in question 2, is there a way to access foo[i] ?
thanks!
Here's how I would do it: (c-declare #<<end-of-c-declare #include <stdlib.h> int *malloc_int_array( int len ) { return ___CAST( int*, malloc( len * sizeof(int) ) ); } /* for pure but slow version: int int_array_ref( int *array, int i ) { return array[i]; } void int_array_set( int *array, int i, int val ) { array[i] = val; } */ end-of-c-declare ) (c-define-type int* (pointer int)) (define malloc-int-array (c-lambda (int) int* "malloc_int_array")) ; pure but slow version: ; ;(define int-array-ref ; (c-lambda (int* int) int "int_array_ref")) ; ;(define int-array-set! ; (c-lambda (int* int int) void "int_array_set")) ; faster version: (define int-array-ref (c-lambda (int* int) int "___result = ___arg1[___arg2];")) (define int-array-set! (c-lambda (int* int int) void "___arg1[___arg2] = ___arg3;")) ;; test it: (define a (malloc-int-array 5)) (int-array-set! a 1 111) (int-array-set! a 2 222) (pp (+ (int-array-ref a 1) (int-array-ref a 2))) ;; 333