Introduction
AutoC is a collection of Ruby modules dedicated to the task of automatic generation of C source code.
Currently AutoC consists of two parts:
-
AutoC::Code - generic C multi-source module generator.
-
AutoC::Collection - strongly-typed data structure generators similar to the C++ STL container classes.
Avaliable data container generators
-
Vector<E>
-
List<E>
-
Queue<E>
-
HashSet<E>
-
HashMap<K,E>
-
TreeSet<E>
-
TreeMap<K,E>
Available miscellaneous generated types
-
String
Availability
AutoC is an open-source software. The complete source code is available in the code repository. Binary distributions can be downloaded from the SourceForge download page. The Ruby GEM can be obtained from the RubyGems download page or fetched directly via
$ gem install autoc
Documentation
A complete documentation is available in HTML form browseable online.
Quick start
Here is a sample usage of AutoC to create a strongly-typed list container for int data type similar to the C++'s std::forward_list<int> template class.
Install the AutoC gem into the Ruby runtime
$ gem install autoc
Create a Ruby script `int_list.rb` containing the appropriate definitions.
require "autoc"
AutoC::Module.generate!(:Containers) do |m|
m << AutoC::List.new(:IntList, :type => "int")
end
Call Ruby to generate the C source code.
$ ruby int_list.rb
This will emit the module definition header file `containers_auto.h` accompanied by the module implementation source file `containers_auto.c`.
Create a C source code `main.c` which uses the generated module.
#include <stdio.h>
#include "containers_auto.h"
int main(int argc, char** argv) {
IntList list;
IntListCtor(&list);
IntListPush(&list, 1);
IntListPush(&list, 2);
IntListPush(&list, 3);
printf("size=%d\n", IntListSize(&list));
IntListDtor(&list);
return 0;
}
The code above creates a list of integers data container on stack, puts three integer values into it, prints the container’s size and finally destroys the container.
Build the sample executable.
$ cc -o runme main.c containers_auto.c
The END
Happy hacking and have fun!
Oleg A. Khlybov <fougas@mail.ru>