public void InitHeaders(int ncolumns) { rootHeader = new ColumnHeader(); for (int i = 0; i<ncolumns; i++) { ColumnHeader header = new ColumnHeader(); columnHeaders.Add(header); // embedding the header to the list among other headers header.left = rootHeader.left; header.right = rootHeader; rootHeader.left.right = header; rootHeader.left = header; } }
// uncover void Restore(ColumnHeader colHeader) { //Iterate all the nodes in the column for (Node row = colHeader.up; row != colHeader; row = row.up) { //Reconnect vertically (add the row) for (Node col = row.left; col != row; col = col.left) { col.header.count++; col.down.up = col; col.up.down = col; } } //Reconnect the header colHeader.right.left = colHeader; colHeader.left.right = colHeader; }
// cover void Remove(ColumnHeader colHeader) { // Remove the header colHeader.right.left = colHeader.left; colHeader.left.right = colHeader.right; // Iterate all the nodes in the column going down for (Node row = colHeader.down; row != colHeader; row = row.down) { // Remove the rows for every node for (Node col = row.right; col != row; col = col.right) { // Removing the items col.down.up = col.up; col.up.down = col.down; col.header.count--; } } }