In Ruby, GridFlow defines a namespace (module) called GridFlow. Most of the constants it defines are part of that namespace.
Ruby does not have the same concept of object as PD. In GridFlow, object classes may
inherit features from other object classes, and also there is no concept of inlet nor outlet, which are instead
provided by
In this document (and in many others) the phrase "a Potato" will be a shorthand for "an object of the class called Potato", which is often used in modern software design and is a nice convention borrowed from biology.
A FObject is normally in two or three parts: a (Ruby) GridFlow::FObject that is the central part; a (C++) FObject; a (C++) BFObject. The GridFlow::FObject is created as a RData kind of box (T_DATA) using Ruby-C's Data_Make_Struct on a GridObject. This is how most Ruby-C programs inherit from Ruby classes. Note that Ruby's boxed objects have a maximum of five fields, and they're usually taken, so additional fields have to be outside of it. This is why RData exists.
So basically you have a C++ FObject that is "part of" a GridFlow::FObject and they point to each other using "peer pointers". The BFObject links back to the RData box through a pointer called peer.
This class is much like PureData's abstractions.
This is a container for objects. Its proper objects are numbered starting with zero. The wire list is given in terms of those numbers: (sourceobject,sourceinlet,destobject,destinlet). There is a pseudo-object numbered #-1 which map to the container's own inlets and outlets.
wrapper for struct usb_dev_handle
wrapper for struct usb_device and struct usb_device_descriptor
wrapper for struct usb_config_descriptor, struct usb_interface
wrapper for struct usb_interface_descriptor
wrapper for struct usb_endpoint_descriptor
for i in 0...n, for j in 0...an, as[j] := f(as[j],bs[i*an+j]);
(this is likefor j in 0...an: bs[j] := f(as[j],bs[j]);
for i in 1...n: for j in 0...an: bs[j] := f(bs[(i-1)*an+j],bs[i*an+j]);
(this is like