[ANN] CGenerator is now a gem

CGenerator is a framework for dynamically generating and loading C extensions from Ruby programs. Includes CShadow module for defining classes in terms of C structs with accessors and inheritance.

It's been in use for almost 8 years.

Installation:
   gem install cgen
or download at http://rubyforge.org/projects/cgen

Example:

require 'cgen/cshadow'

class Complex < Numeric
   include CShadow

   shadow_attr_accessor :re => "double re"
   shadow_attr_accessor :im => "double im"

   def initialize re, im
     self.re = re
     self.im = im
   end

   define_c_method(:abs) {
     include "<math.h>"
     returns "rb_float_new(sqrt(pow(shadow->re, 2) + pow(shadow->im, 2)))"
   }

   define_c_method(:scale!) {
     c_array_args {
       optional :factor
       default :factor => "INT2NUM(10)"
       typecheck :factor => Numeric
     }
     body %{
       shadow->re *= NUM2DBL(factor);
       shadow->im *= NUM2DBL(factor);
     }
     returns "self"
   }
end

Complex.commit

z = Complex.new 5, 1.3
p z # ==> #<Complex:0xb7dc0098 re=5.0, im=1.3>
puts z.abs # ==> 5.1662365412358
z.scale! 3.0 # float
p [z.re, z.im] # ==> [15.0, 3.9]
z.scale! 3 # int
p [z.re, z.im] # ==> [45.0, 11.7]
z.scale! # use default value
p [z.re, z.im] # ==> [450.0, 117]

···

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407