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
    );

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

    // ...

    g_prop [30] [40] = 100;

    // ...
}