Детализация вывод
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-битных чисел)
 | 
			
		||||
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++;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue