01 #ifndef THANK_DEVAS 02 #define THANK_DEVAS 21 03 class CU8Set { 04 I64 cnt,cap; 05 CTask *mem_task; 06 U8 *body; 07 }; 08 09 CU8Set *U8SetNew(CTask *mem_task=NULL) { 10 CU8Set *s=CAlloc(sizeof(CU8Set),mem_task); 11 s->mem_task=mem_task; 12 s->cap=64; 13 s->body=CAlloc(64,mem_task); 14 return s; 15 } 16 17 U0 U8SetAdd(CU8Set *s,I64 v) { 18 U8 *new; 19 if(s->cnt+1>=s->cap) { 20 s->cap=s->cnt; 21 new=CAlloc(s->cap+16,s->mem_task); 22 s->cap+=16; 23 MemCpy(new,s->body,s->cnt); 24 Free(s->body); 25 s->body=new; 26 } 27 s->body[s->cnt++]=v; 28 } 29 30 U0 U8SetAddBytes(CU8Set *s,U8 *body,I64 cnt) { 31 U8 *new; 32 if(s->cnt+cnt>=s->cap) { 33 s->cap=2*s->cnt+cnt+16; 34 new=CAlloc(s->cap,s->mem_task); 35 MemCpy(new,s->body,s->cnt); 36 Free(s->body); 37 s->body=new; 38 } 39 MemCpy(s->body+s->cnt,body,cnt); 40 s->cnt+=cnt; 41 } 42 43 U0 U8SetDel(CU8Set *s) { 44 Free(s->body); 45 Free(s); 46 } 47 48 CU8Set *U8SetFromHex(U8 *s) { 49 CU8Set *ass=U8SetNew; 50 U64 buf; 51 U8 *buf_p; 52 while(*s) { 53 if(Bt(char_bmp_hex_numeric,*s)) { 54 buf=0; 55 buf.u16[0]=s(U16*)[0]; 56 U8SetAdd(ass,Str2I64(&buf,16,&buf_p)); 57 s+=buf_p-(&buf)(U8*); 58 } else 59 s++; 60 } 61 return ass; 62 } 63 64 #endif