DOCUMENTATION TUTORIALS DOWNLOAD NEWS CONTRIBUTE

Developing Types

GAML provides a given number of built-in simple types (int, bool…) and more complex ones (path, graph…). Developing a new type allows, then, to add a new data structure to GAML.

Implementation

Developing a new type requiers the implementation of 2 Java files:

The data structure file

The class representing the data structure is a Java class annotated by:

It can contain setter and/or getter for each of its attributes. Setters and getters are methods annotated by the @getter or @setter annotations.

@getter(IKeyword.COLOR_RED)
public Integer red() {
	return super.getRed();
}

In addition it is recommended that this class implements the IValue interface. It provides a clean way to give a string representation of the type and thus eases good serialization of the object. To this purpose the following method needs to be implemented:

public abstract String stringValue(IScope scope) throws GamaRuntimeException;

The type file

The class representing the type is a Java class such that:

Example (from GamaFloatType.java):

@type(name = IKeyword.FLOAT, id = IType.FLOAT, wraps = { Double.class, double.class }, kind = ISymbolKind.Variable.NUMBER)

Inheritance from the GamaType<T> class

Each java class aiming at implement a type should inherit from the GamaType abstract class. Example (from GamaColorType.java):

public class GamaColorType extends GamaType<GamaColor>

This class imposes to implement the three following methods (with the example of the GamaColorType):

Remark: for each type, an unary operator is created with the exact name of the type. It can be used to cast any expression in the given type. This operator calls the previous cast method.

Annotations

@type

It provides information necessary to the processor to identify a type.

This annotation contains:

All these annotations are defined in the file GamlAnnotations.java.