A type that is is defined without functors or a procedure that is defined without rules must be implemented in C.
Abstract types may be implemented as values of type long or as pointers.
For example, if a Gentle specification contains the declaration
'type' IDENTthis type may be implemented in a C module as
typedef struct IDENTSTRUCT *IDENT;which defines values of type IDENT as references to structures.
Abstract procedures are implemented by C routines that take long arguments as input parameters and use (long *) arguments to realize output parameters.
For example, if a Gentle specifications defines a procedure as
'action' Max (INT, INT -> INT)it may be implemented in C as
void Max (x, y, ref_result) long x; long y; long *ref_result; { *ref_result = (x > y ? x : y); }The Gentle type INT corresponds to the C type long. Gentle terms and the type POS may also be treated as long. The Gentle type STRING corresponds to (char *).
A 'condition' must be implemented as a function returning int that yields 1 if the call succeeds and 0 if it fails.
For example, a procedure introduced by
'condition' HasMeaning (IDENT -> MEANING)may be implemented by
int HasMeaning (id, ref_meaning) IDENT id; long *ref_meaning; { if (id->meaning == 0) return 0; *ref_meaning = id->meaning; return 1; }