Hello, Rory,
Using your aStruct.h, the code below works for me. I believe the problem with
the original code is name clash between your bigloo struct and pointer
declarations. The struct declaration creates a type named myStruct* which masks
your pointer type declaration using the same name.
Best Regards,Joe
(module cstructarrays (main main) (extern (include "aStruct.h")
(type myStruct (struct (elt1::int "elt1") (elt2::int
"elt2") (elt3::int "elt3") )
"myStruct") (type myStructArr (pointer myStruct) "myStruct*")))
(define (main args) (let ((arr (make-myStructArr 4))) (do ((i 0 (+ i
1))) ((= i 4)) (myStruct*-elt1-set! (myStructArr-ref arr i) i)) (do
((i 0 (+ i 1))) ((= i 4)) (print (myStruct*-elt1 (myStructArr-ref arr
i))))))
From: Rory Mulvaney <[email protected]>
To: [email protected]
Sent: Tuesday, October 13, 2015 8:22 AM
Subject: [bigloo] how to allocate an array of C structs?
Bigloo community,
I don't see a way to allocate an array of C structs. If I have a C struct
called "myStruct", I think I should be able to use (make-myStruct* 3) to
return a pointer to a newly-allocated array of 3 myStructs. However, it
seems the only way to allocate a new C struct is to allocate them 1 at a
time, using (myStruct* elt1 elt2 elt3).
http://www-sop.inria.fr/members/Manuel.Serrano/bigloo/doc/bigloo-28.html#The-C-interface
(see sections on Struct and Union types and section on C pointers)
This is what I have:
[aStruct.h:
typedef struct myStruct {
int elt1;
int elt2;
int elt3;
} myStruct;
]//end of aStruct.h
(module aStruct
(main testAStruct)
(extern
(include "aStruct.h")
(type myStruct (struct
(elt1::int "elt1")
(elt2::int "elt2")
(elt3::int "elt3")
) "myStruct")
;; automatically defined
;; (type myStruct* (pointer myStruct) "myStruct*")
)
)
(define (testAStruct argv)
; doesn't work
; (make-myStruct* 3)
; works
(myStruct* 1 2 3)
)
Thanks and regards,
Rory