This works :)
38 (define (get-fullscreen-modes) 39 (define get-fullscreen-modes* 40 (c-lambda () sfml:Vector<VideoMode>* 41 "___result_voidstar = new std::vectorsf::VideoMode(sf::VideoMode::getFullscreenModes());")) 42 (define vector-video-mode-length 43 (c-lambda (sfml:Vector<VideoMode>*) size_t 44 "___result = ___arg1->size();")) 45 (define vector-video-mode-ref 46 (c-lambda (sfml:Vector<VideoMode>* size_t) sfml:VideoMode* 47 "___result_voidstar = new sf::VideoMode(___arg1->at(___arg2));")) 48 49 (let* ((modes (get-fullscreen-modes*)) 50 (size (vector-video-mode-length modes)) 51 (result (make-vector size))) 52 (let loop ((i 0)) 53 (cond 54 ((< i size) 55 (vector-set! result i (vector-video-mode-ref modes i)) 56 (loop (+ i 1))) 57 (else 58 result)))))
Is it also possible to accomplish the same directly from a c-lambda that returns a scheme-object?
Am 16.08.2013 09:54, schrieb Mikael:
Perhaps make a c-define-type for std::vector<VideoMode>* that you return the return value of .getFullscreenModes() as, and then make a -length and -ref procedure for this type.
Remember that for c-define-type :s that do not have a release procedure specified, there is *no* deallocation (such as free() etc.) invoked at their scheme-world GC.
2013/8/16 Chris Mueller <ruunsmail@gmail.com mailto:ruunsmail@gmail.com>
Hi, i'm currently coding a gambit binding for sfml and could need some adivces for a specific ffi problem from you. Assume we have a class VideoMode with the following constructor: class VideoMode { public: VideoMode(int width, int height, int bbp); # ... } I have defined an interface to scheme with: ;; Release hook is ignored for this example (c-define-type VideoMode* (pointer "VideoMode")) ;; Scheme's construction wrapper for VideoMode (define video-mode (c-lambda (int int int) VideoMode* "___result_voidstar = new VideoMode(___arg1, ___arg2, ___arg3);")) Now assume a function that retrieves all supporting video-modes in C++: std::vector<VideoMode> getFullscreenModes(); I would like to write now a scheme-function (with c-lambda) that iterators through all elements from this std::vector and constructs/returns a scheme-vector with foreign-objects of type (pointer "VideoMode"). How does the c-lambda code look like for this small issue? (Or how would you cope this problem alternatively?) Chris _______________________________________________ Gambit-list mailing list Gambit-list@iro.umontreal.ca <mailto:Gambit-list@iro.umontreal.ca> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list