From 6abf49fc23763011c84da790a20048fead58b8d0 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Mon, 8 Sep 2025 13:51:33 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=B5=D1=82=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/app.d | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/source/app.d b/source/app.d index b237e59..da65d21 100644 --- a/source/app.d +++ b/source/app.d @@ -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++;