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