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;
// ...
}