Детализация вывод
This commit is contained in:
parent
0a8359cfe7
commit
6abf49fc23
1 changed files with 36 additions and 3 deletions
39
source/app.d
39
source/app.d
|
@ -4,6 +4,36 @@ import std.string;
|
||||||
// Статическая таблица Gear (256 случайных 64-битных чисел)
|
// Статическая таблица Gear (256 случайных 64-битных чисел)
|
||||||
mixin(import("gear.d"));
|
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 с отладочной информацией
|
// Функция FastCDC с отладочной информацией
|
||||||
ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize,
|
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)
|
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 (строгая маска)
|
// Цикл до normalSize (строгая маска)
|
||||||
while (i < normalSize)
|
while (i < normalSize)
|
||||||
{
|
{
|
||||||
|
printDetails(src, fingerprint, i, maskS);
|
||||||
fingerprint = (fingerprint << 1) + gear[src[i]];
|
fingerprint = (fingerprint << 1) + gear[src[i]];
|
||||||
ulong masked = fingerprint & maskS;
|
ulong masked = fingerprint & maskS;
|
||||||
if (debugEnabled)
|
if (debugEnabled)
|
||||||
|
@ -83,6 +114,7 @@ ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize,
|
||||||
// Цикл после (слабая маска)
|
// Цикл после (слабая маска)
|
||||||
while (i < n)
|
while (i < n)
|
||||||
{
|
{
|
||||||
|
printDetails(src, fingerprint, i, maskL);
|
||||||
fingerprint = (fingerprint << 1) + gear[src[i]];
|
fingerprint = (fingerprint << 1) + gear[src[i]];
|
||||||
ulong masked = fingerprint & maskL;
|
ulong masked = fingerprint & maskL;
|
||||||
if (debugEnabled)
|
if (debugEnabled)
|
||||||
|
@ -213,15 +245,16 @@ void main()
|
||||||
{
|
{
|
||||||
size_t remaining = totalLength - offset;
|
size_t remaining = totalLength - offset;
|
||||||
// Включаем отладку только для первых двух чанков
|
// Включаем отладку только для первых двух чанков
|
||||||
// debugEnabled = chunkNumber <= 2;
|
debugEnabled = chunkNumber <= 2;
|
||||||
size_t chunkSize = fastcdc(data[offset .. $], remaining, minSize, maxSize,
|
size_t chunkSize = fastcdc(data[offset .. $], remaining, minSize, maxSize,
|
||||||
normalSize, maskS, maskL, chunkNumber, debugEnabled);
|
normalSize, maskS, maskL, chunkNumber, debugEnabled);
|
||||||
|
|
||||||
// Вывод размера чанка и его содержимого
|
// Вывод размера чанка и его содержимого
|
||||||
writefln("Чанк %d: %d байт", chunkNumber, chunkSize);
|
writefln("Чанк %d: %d байт", chunkNumber, chunkSize);
|
||||||
string chunkContent = cast(string) data[offset .. offset + chunkSize];
|
string chunkContent = cast(string) data[offset .. offset + chunkSize];
|
||||||
writefln("Содержимое: %s\n", chunkContent.length > 50 ? chunkContent[0 .. 50] ~ "..."
|
// writefln("Содержимое: %s\n", chunkContent.length > 50 ? chunkContent[0 .. 50] ~ "..."
|
||||||
: chunkContent);
|
// : chunkContent);
|
||||||
|
writefln("Содержимое: %s\n", chunkContent);
|
||||||
|
|
||||||
offset += chunkSize;
|
offset += chunkSize;
|
||||||
chunkNumber++;
|
chunkNumber++;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue