Детализация вывод

This commit is contained in:
Alexander Zhirov 2025-09-08 13:51:33 +03:00
parent 0a8359cfe7
commit 6abf49fc23
Signed by: alexander
GPG key ID: C8D8BE544A27C511

View file

@ -4,6 +4,36 @@ import std.string;
// Статическая таблица Gear (256 случайных 64-битных чисел)
mixin(import("gear.d"));
void printDetails(const ubyte[] src, const ulong fingerprint, const size_t i, const size_t mask) {
// Отпечаток со сдвигом
ulong fpOffset = fingerprint << 1;
// Номер байта
short charByte = src[i];
// Значение gear
ulong gearValue = gear[charByte];
// Итоговый fingerprint
ulong fpResult = fpOffset + gearValue;
writefln(
"\tОтпечаток = %d\n" ~
"\tОтпечаток со сдвигом (умножение на 2) = %d\n" ~
"\tПолучение байта (0-255) согласно индексу %d из исходной строки = %d\n" ~
"\tПолучение значения из таблицы gear согласно номеру байта = %d\n" ~
"\tСумма отпечатка со сдвигом с полученным значением из таблицы gear = %d\n" ~
"\tБитовое представление текущей маски = %b\n" ~
"\tБитовое представление итогового отпечатка = %b\n" ~
"\tРезультат наложения маски и отпечатка = %b\n",
fingerprint,
fpOffset,
i, charByte,
gearValue,
fpResult,
mask,
fpResult,
fpResult & mask
);
}
// Функция FastCDC с отладочной информацией
ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize,
size_t normalSize, ulong maskS, ulong maskL, size_t chunkNumber, bool debugEnabled)
@ -61,6 +91,7 @@ ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize,
// Цикл до normalSize (строгая маска)
while (i < normalSize)
{
printDetails(src, fingerprint, i, maskS);
fingerprint = (fingerprint << 1) + gear[src[i]];
ulong masked = fingerprint & maskS;
if (debugEnabled)
@ -83,6 +114,7 @@ ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize,
// Цикл после (слабая маска)
while (i < n)
{
printDetails(src, fingerprint, i, maskL);
fingerprint = (fingerprint << 1) + gear[src[i]];
ulong masked = fingerprint & maskL;
if (debugEnabled)
@ -213,15 +245,16 @@ void main()
{
size_t remaining = totalLength - offset;
// Включаем отладку только для первых двух чанков
// debugEnabled = chunkNumber <= 2;
debugEnabled = chunkNumber <= 2;
size_t chunkSize = fastcdc(data[offset .. $], remaining, minSize, maxSize,
normalSize, maskS, maskL, chunkNumber, debugEnabled);
// Вывод размера чанка и его содержимого
writefln("Чанк %d: %d байт", chunkNumber, chunkSize);
string chunkContent = cast(string) data[offset .. offset + chunkSize];
writefln("Содержимое: %s\n", chunkContent.length > 50 ? chunkContent[0 .. 50] ~ "..."
: chunkContent);
// writefln("Содержимое: %s\n", chunkContent.length > 50 ? chunkContent[0 .. 50] ~ "..."
// : chunkContent);
writefln("Содержимое: %s\n", chunkContent);
offset += chunkSize;
chunkNumber++;