- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
#define PS *p++!=*s++ /* Body of inner unrolled matching loop. */
#define ITEMMAX 16 /* Maximum number of bytes in an expanded item. */
{const char *p_src=p_src_first;
char *p_dst=p_dst_first;
const char *p_src_post=p_src_first+src_len;
char *p_dst_post=p_dst_first+src_len;
const char *p_src_max1=p_src_post-ITEMMAX,*p_src_max16=p_src_post-16*ITEMMAX;
const char *hash[4096];
char *p_control; short int control=0,control_bits=0;
*p_dst=FLAG_COMPRESS; p_dst+=FLAG_BYTES; p_control=p_dst; p_dst+=2;
while (TRUE)
{const char *p,*s; short int unroll=16,len,index; int offset;
if (p_dst>p_dst_post) goto overrun;
if (p_src>p_src_max16)
{unroll=1;
if (p_src>p_src_max1)
{if (p_src==p_src_post) break; goto literal;}}
begin_unrolled_loop:
index=((40543*((((p_src[0]<<4)^p_src[1])<<4)^p_src[2]))>>4) & 0xFFF;
p=hash[index];
hash[index]=s=p_src;
offset=s-p;
if (offset>4095 || p<p_src_first || offset==0 || PS || PS || PS)
{literal: *p_dst++=*p_src++; control>>=1; control_bits++;}
else
{int dummyVal = PS || PS || PS || PS || PS || PS || PS ||
PS || PS || PS || PS || PS || PS || s++; len=s-p_src-1;
dummyVal = dummyVal;
*p_dst++=(char)(((offset&0xF00)>>4)+(len-1)); *p_dst++=(char)(offset&0xFF);
p_src+=len; control=(control>>1)|0x8000; control_bits++;}
/*end_unrolled_loop:*/ if (--unroll) goto begin_unrolled_loop;
if (control_bits==16)
{*p_control=control&0xFF; *(p_control+1)=control>>8;
p_control=p_dst; p_dst+=2; control=control_bits=0;}
}
control>>=16-control_bits;
*p_control++=control&0xFF; *p_control++=control>>8;
if (p_control==p_dst) p_dst-=2;
*p_dst_len=(p_dst-p_dst_first);
return;
overrun: fast_copy(p_src_first,p_dst_first+FLAG_BYTES,src_len);
*p_dst_first=FLAG_COPY; *p_dst_len=src_len+FLAG_BYTES;
j123123 16.10.2017 18:24 # +2
А это интересно нахуя?
наверное это чтоб компилятор не писал ворнинг на то, что вот переменную проинициализировали, но никак не используют потом
Antervis 16.10.2017 19:26 # 0
> А это интересно нахуя?
j123123 17.10.2017 00:16 # 0
С той PS || PS || PS хренью как раз все достаточно очевидно. Только зачем ее куда-то присваивать? Можно ж и без "int dummyVal =" обойтись, тупо сделать PS || PS || PS ...
vistefan 17.10.2017 09:28 # 0
Возможно, сейчас придет Борманд и (используя позикс) напишет код, в котором строка val = val; имеет эффект.
inho 17.10.2017 18:57 # 0
bormand 17.10.2017 19:14 # 0
Оставим это читателю в качестве упражнения.
1024-- 17.10.2017 19:39 # 0