phpday 2025 - Call For Papers

QuickHashStringIntHash::loadFromFile

(No version information available, might only be in Git)

QuickHashStringIntHash::loadFromFileСоздаёт хеш из файла

Описание

public static QuickHashStringIntHash::loadFromFile(string $filename, int $size = 0, int $options = 0): QuickHashStringIntHash

Этот фабричный метод создаёт новый хеш из файла определения на диске. Формат файла состоит из сигнатуры 'QH\0x21\0', количества элементов в виде 32-битного целого числа со знаком в системном порядке байтов, 32-битного целого числа без знака, которое содержит количество следующих за ним данных элемента в символах. Данные этого элемента содержат все строки. Далее следует другое 32-битное целое число со знаком, которое содержит количество списков бакетов. После заголовка и строк следуют элементы. Они упорядочены по списку бакетов, поэтому для восстановления хеша ключи не нужно хешировать. Для каждого списка бакетов хранится следующая информация (все как 32-битные целые числа): индекс списка бакетов, количество элементов в этом списке, а затем парами по два 32-битных целых числа без знака — элементы, где первый — индекс в строковом списке, который содержит ключи, а второй — значение. Пример может выглядеть вот так:

Пример #1 Формат файла QuickHash StringIntHash

00000000  51 48 21 00 02 00 00 00  09 00 00 00 40 00 00 00  |QH!.........@...|
00000010  4f 4e 45 00 4e 49 4e 45  00 07 00 00 00 01 00 00  |ONE.NINE........|
00000020  00 00 00 00 00 01 00 00  00 2f 00 00 00 01 00 00  |........./......|
00000030  00 04 00 00 00 03 00 00  00                       |.........|
00000039

Пример #2 Формат файла QuickHash IntHash

header signature ('QH'; key type: 2; value type: 1; filler: \0x00)
00000000  51 48 21 00

number of elements:
00000004  02 00 00 00

length of string values (9 characters):
00000008  09 00 00 00

number of hash bucket lists (this is configured for hashes as argument to the
constructor normally, 64 in this case):
0000000C  40 00 00 00

string values:
00000010  4f 4e 45 00 4e 49 4e 45  00

bucket lists:
  bucket list 1 (with key 7, and 1 element):
    header:
    07 00 00 00 01 00 00 00
    elements (key index: 0 ('ONE'), value = 0):
    00 00 00 00 01 00 00 00
  bucket list 2 (with key 0x2f, and 1 element):
    header:
    2f 00 00 00 01 00 00 00
    elements (key index: 4 ('NINE'), value = 3):
    04 00 00 00 03 00 00 00

Список параметров

filename

Имя файла, из которого нужно считать хеш.

size

Количество списков бакетов для настройки. Метод автоматически округлит заданное число в бо́льшую сторону до следующей степени числа 2. Число также автоматически ограничивается значениями от 4 до 4 194 304.

options

Те же параметры, которые принимает конструктор класса; за исключением того, что параметр size игнорируется. Размер считывается из формата файла (в отличие от классов QuickHashIntHash и QuickHashIntStringHash, где он автоматически вычисляется из количества записей в хеше).

Возвращаемые значения

Метод возвращает новый объект QuickHashStringIntHash.

Примеры

Пример #3 Пример использования метода QuickHashStringIntHash::loadFromFile()

<?php

$file
= dirname(__FILE__) . "/simple.hash.string";

$hash = QuickHashStringIntHash::loadFromFile(
$file,
QuickHashStringIntHash::DO_NOT_USE_ZEND_ALLOC
);

foreach (
range(0, 0x0f) as $key) {
$i = 48712 + $key * 1631;
$k = base_convert($i, 10, 36);
echo
$k, ' => ', $hash->get($k), "\n";
}

?>

Вывод приведённого примера будет похож на:

11l4 => 48712
12uf => 50343
143q => 51974
15d1 => 53605
16mc => 55236
17vn => 56867
194y => 58498
1ae9 => 60129
1bnk => 61760
1cwv => 63391
1e66 => 65022
1ffh => 66653
1gos => 68284
1hy3 => 69915
1j7e => 71546
1kgp => 73177

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top