Indexed Properties

Jancy also supports indexed properties, which are properties with array semantics. Accessors for such properties accept additional index arguments, but unlike a real array index, a property index doesn’t have to be of the integer type, nor does it mean index exclusively – it is up to the developer how to use it.

Simple indexed property declaration syntax:

int g_x[2];

int indexed property g_simpleProp (unsigned i);

// here the index argument is really used as the array index

int g_simpleProp.get(unsigned i) {
    return g_x[i];
}

g_simpleProp.set(
    unsigned i,
    int x
) {
    g_x[i] = x;
}

A similar property declared using full syntax:

property g_prop {
    int m_x[2][2];

    // more than one index argument could be used

    int get(
        unsigned i,
        unsigned j
    ) {
        return m_x[i][j];
    }

    set(
        unsigned i,
        unsigned j,
        int x
    ) {
        m_x[i][j] = x;
    }

    // setters of indexed property can be overloaded

    set(
        unsigned i,
        unsigned j,
        double x
    ) {
        m_x[i][j] = (int) x;
    }
}

Accessing indexed properties looks like accessing arrays

int indexed property g_prop (
    unsigned i,
    unsigned j
);

void foo() {
    int value = g_prop[10][20];

    // ...

    g_prop[30][40] = 100;

    // ...
}