mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-07-21 07:58:11 -07:00
global: opreturn part 3
This commit is contained in:
@@ -6,15 +6,23 @@
|
||||
*/
|
||||
export function packCells(cells, columns, rows) {
|
||||
const occupied = new Uint8Array(columns * rows);
|
||||
const cursors = new Uint32Array(columns + 1);
|
||||
const layouts = [];
|
||||
|
||||
for (const cell of cells) {
|
||||
const span = Math.min(cell.span, columns);
|
||||
const position = findPosition(occupied, columns, rows, span);
|
||||
const position = findPosition(
|
||||
occupied,
|
||||
columns,
|
||||
rows,
|
||||
span,
|
||||
cursors[span],
|
||||
);
|
||||
|
||||
if (position === null) return null;
|
||||
|
||||
fillCells(occupied, columns, position.x, position.y, span);
|
||||
cursors[span] = position.index + span;
|
||||
layouts.push({ x: position.x, y: position.y, span });
|
||||
}
|
||||
|
||||
@@ -26,14 +34,22 @@ export function packCells(cells, columns, rows) {
|
||||
* @param {number} columns
|
||||
* @param {number} rows
|
||||
* @param {number} span
|
||||
* @returns {{ x: number, y: number } | null}
|
||||
* @param {number} start
|
||||
* @returns {{ index: number, x: number, y: number } | null}
|
||||
*/
|
||||
function findPosition(occupied, columns, rows, span) {
|
||||
function findPosition(occupied, columns, rows, span, start) {
|
||||
const lastRow = rows - span;
|
||||
const lastColumn = columns - span;
|
||||
const startRow = Math.floor(start / columns);
|
||||
const startColumn = start % columns;
|
||||
|
||||
for (let y = 0; y <= lastRow; y += 1) {
|
||||
for (let x = 0; x <= columns - span; x += 1) {
|
||||
if (canPlace(occupied, columns, x, y, span)) return { x, y };
|
||||
for (let y = startRow; y <= lastRow; y += 1) {
|
||||
const firstColumn = y === startRow ? startColumn : 0;
|
||||
|
||||
for (let x = firstColumn; x <= lastColumn; x += 1) {
|
||||
if (canPlace(occupied, columns, x, y, span)) {
|
||||
return { index: y * columns + x, x, y };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user