[Dynamite] Thoughts

Guy Slater guy@ebi.ac.uk
Fri, 24 Mar 2000 19:46:44 +0000 (GMT)


On Wed, 22 Mar 2000, Ian Holmes wrote:

> I kind of like "edl" as a file extension actually.

I'm not so sure about this.  Could .edl cause problems with orbit-idl
or whatever ?  It may look like we have made up a new idl, rather
than we are just using a compliant subset.

Guy.
--

> more random thoughts on templates...
> 
> The IDL definition includes the full C++ preprocessor.
> So I think we should define EDL to be our restricted IDL + a special set
> of macros:
> 
> 	#define EuclidArray(X,T) typedef sequence<X> T;
> 	#define EuclidSet(X,T) interface T { long cmp(X a, X b); ... more GTree-like methods ... };
> 	etc
> 
> These #defines all expand to real, typesafe IDL that maps directly to the
> objects we provide when run through the C preprocessor so we are
> effectively doing generic programming with macros.
> 
> sequence<X> is a special case because it seems to ask to be treated as an
> in-memory, sized object (like a struct) rather than an anonymous pointer
> (like an interface). We cannot provide this directly because we can't
> overload the "=" operator in C.
> 
> I think the best we can do is implement it as a pseudo-interface CTYPE
> (where CTYPE is a unique C name derived from the scoped IDL type T in
> EuclidArray(X,T)). We provide a copy constructor & an assign method:
> 
>   CTYPE CTYPE_new_copy (CTYPE ctype);  // makes a copy & returns a pointer to it
>   void CTYPE_copy_from (CTYPE ctype, CTYPE vector_to_copy_from);
> 
> Both of these are methods, so the first argument "CTYPE ctype" is like a
> "this" pointer. They copy the actual X's.
> 
> There is an issue about whether to use GLib's GArray or GPtrArray for the
> underlying representation of a sequence<X>. GArray is more efficient for
> interfaces, GPtrArray (sometimes) for structs (because interfaces are
> already pointers). It would be nice if the euclid compiler could work this
> out but that will have to wait until I have a couple of afternoons to
> spare. Until then I think we should try to use different macros for the
> two in the IDL, i.e.
> 
> 	#define EuclidArray(X,T)    typedef sequence<X> T;
> 	#define EuclidPtrArray(X,T) typedef sequence<X> T;
> 
> 	EuclidArray(InterfaceX,T);
> 	EuclidPtrArray(StructY,U);
> 
> rather than
> 
> 	typedef sequence<InterfaceX> T;
> 	typedef sequence<StructY> U;
> 
> nb both EuclidArray & EuclidPtrArray typedef to the same thing, and we
> offer the same methods on them in "module_idl.h" (i.e. get functions that
> return X's rather than X*'s).
> 
> Ian
> 
> -- 
> Ian Holmes  ....  Howard Hughes Medical Institute  ....  ihh@fruitfly.org
> 
> 
> 
> _______________________________________________
> Dynamite mailing list  -  Dynamite@bioperl.org
> http://www.bioperl.org/mailman/listinfo/dynamite
>