Next: , Up: Infix Binary Operators


2.8.1 Infix Operator Definition Example

An operator named `@' and computing the absolute difference between its two real value operands may be defined as:

const struct x1f4_operator_type diff = {
    "@",
    difference,
    0230,
    X1f4_E4_REAL,
    real2,
    0,
    1,
    NULL,
    NULL
};

See struct x1f4_operator_type.

The name field of the operator definition specifies the name of the operator: `@'.

The operator field selects the routine performing the operator logic, a certain difference function.

The priority field specifies the operator evaluation priority - higher the number, lower the priority.

The type field specifies that the operator return type is real, hence it translates X1f4_E4_REAL.

See Symbolic Types.

The args field specifies the types of the operator arguments and is assumed defined as:

int real2[] = { X1f4_E4_REAL, X1f4_E4_REAL };

The flags field specifies pretty much nothing in this operator definition, hence is 0.

The length field specifies the operator name length, 1.

The obscure operator definition extensions go undefined here, hence extension1 and extension2 are NULL.

The difference function realizes the absolute difference of two real values.

int
difference(void *context, void *output, void **input)
{
    X1f4_E4_REAL a, b, *out;

    a = *(X1f4_E4_REAL *) input[0];
    b = *(X1f4_E4_REAL *) input[1];

    out = output;
    *out = fabs(a - b);

    return 0;
}