The OneDimCellLoop iterates over all cells in order from 0 to sizeX.
The TwoDimCellLoop iterates over all cells from left to right, then from top to bottom.
The SparseCellLoop offers common code for loops that only calculate those fields, where the neighbours have changed in the last step.
This is based on a list of positions called sparse_list as well as a mask of booleans called sparse_mask, that only internally gets used to make sure, that no fields are enlisted more than once.
The sparse_list is duplicated into the property prev_sparse_list, from which reads are performed. All entries in the sparse_list arrays are valid up to the first -1.
For the pure-py version, a normal python set is used.
It requires an ActivityRecord for the was_active flag.
Adds the activity mask and position list to the target attributes.
Calculate how big the mask and list have to be.
The current strategy is to just allocate one field for each field of the configuration.