1. Is there a way to associate a prop:custom-write to _cpointers or instances of ctypes defined using define-cstruct? I want to expose C data type instances as opaque values, whose printed representation constructs them; e.g. I want this to happen:

    > (mpfr-exp (mpfr 1))
    (mpfr #e2.718281828459045235360287471352662497759)

where mpfr constructs instances of _mpfr_t from Racket reals. As it is, I'm defining a struct wrapper, which seems like a pointless indirection.

2. There are a few cases where MPFR (the C library) allocates arrays and returns pointers to them. I want to interpret them as strings, lists, and vectors, but I also have to call "special free" functions to deallocate the memory. This is the way I'm doing it (simplified):

(define gimme-string
  (get-ffi-obj 'gimme_string libmpfr (_fun -> _pointer)))

@c{
    char* cstr_id(char* p)
    {
        return p;
    }
}

(define cstr->string
  (get-ffi-obj-from-this 'cstr_id (_fun _pointer -> _string)))

(define cstr (gimme-string))
(define str (cstr->string cstr))
(special-free cstr)


It's silly. But I can't figure out another way to have the FFI library interpret a char* pointer as a string AND give me access to the pointer itself so I can free the memory. I get the impression that it's possible, but I don't know the right incantations yet.

Neil T

(About the @c{...} syntax and get-ffi-obj-from-this: it means what you think it does. I'm using a version of Jay's superc package, modified to work on Linux. Yes, it's awesome.)

_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to