<?php namespace App\Tables; use App\Models\Row; use MightyPork\Utils\Utils; /** * Generates a sequence of string codes for internal naming of columns * * Produces database-unique lowercase identifiers for created or proposed columns. * Column identifiers are used in row objects to uniquely identify data even if the * revision header (columns object) is modified, such as reordering, changing name, * adding new column in concurrent proposals, etc. * * Thanks to this uniqueness, it could even be possible to compare or merge forks * of the same table. */ class ColumnNumerator extends BaseNumerator { const ALPHABET = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; /** * Create numerator for the given number of columns * * @param int $capacity - how many */ public function __construct($capacity) { parent::__construct(Row::allocateColIDs($capacity)); } protected function getKey($index) { return Utils::alphabetEncode($index, self::ALPHABET); } }