QuakeGod
2021-07-29 3b04f942bd51c0453cbb64167cbdb7de69159bd5
提交 | 用户 | age
4b03ae 1 #pragma once
Q 2 #ifndef _FUNCTIONS_HPP_
3 #define _FUNCTIONS_HPP_
4
5 static int AnsiToW(CStringA & Src, CStringW & Dest)
6 {
7     int j,l;
8     l=Src.GetLength();
9     j=MultiByteToWideChar(CP_ACP,0,Src,l,Dest.GetBuffer(l),l);
10     Dest.ReleaseBuffer(j);
11     return 0;
12 }
13 static int WToAnsi(CStringW & Src, CStringA & Dest)
14 {
15     int j,l;
16     l=Src.GetLength();
17     j=WideCharToMultiByte(CP_ACP,0,Src,l,Dest.GetBuffer(l*2),l*2,NULL,0);
18     Dest.ReleaseBuffer(j);
19     return 0;
20 }
21 inline int AnsiToT(CStringA & Src, CString & Dest)
22 {
23 #ifdef UNICODE
24     AnsiToW(Src,Dest);
25 #else
26         Dest=Src;
27 #endif
28     return 0;
29 }
30 static int TToAnsi(CString & Src, CStringA & Dest)
31 {
32 #ifdef UNICODE
33     WToAnsi(Src,Dest);
34 #else
35     Dest=Src;
36 #endif
37     return 0;
38 }
39 static int TToW(CString & Src, CStringW & Dest)
40 {
41 #ifdef UNICODE
42     Dest=Src;
43 #else
44     AnsiToW(Src,Dest);
45 #endif
46     return 0;
47 }
48 static int WToT(CStringW & Src, CString & Dest)
49 {
50 #ifdef UNICODE
51     Dest=Src;
52 #else
53     WToAnsi(Src,Dest);
54 #endif
55     return 0;
56 }
57
58 inline double GetTickCountmS()
59 {
60     LARGE_INTEGER perfreq;
61     LARGE_INTEGER percounter1;    //,percounter2;
62     double time1;    //,time2,timeinter1;
63     QueryPerformanceFrequency(&perfreq);
64     QueryPerformanceCounter(&percounter1);
65 //    percounter1.QuadPart=rdtsc();
66 /*    _asm {
67             RDTSC;
68             mov percounter1.LowPart,eax;
69             mov    percounter1.HighPart,edx;
70     }
71 */    
72     time1=(double)percounter1.QuadPart/perfreq.QuadPart  ;
73 //    time2=(double)percounter2.QuadPart/perfreq.QuadPart  ;
74 //    timeinter1=time2-time1;
75     return (time1*1000);
76 };
77 /*
78 template <class ST>
79 int Split(ST s1,ST divider, ST resultstr[])
80 {
81     int i,j,k,l;
82     //    CString s2;
83     k=0;
84     i=0;
85     l=s1.GetLength();
86     for (i=0;k<l&&i<1024;i++)
87     {
88         j=s1.Find(divider,k);
89         if (j==-1) 
90         {
91             resultstr[i]=s1.Mid(k);
92             i++;
93             break;
94         }
95         resultstr[i]=s1.Mid(k,j-k);
96         //        s2.Format(_T("%d %d %d \r\n"),i,j,k);
97         //        ::SysLog(s2);
98         k=j+divider.GetLength();
99     }
100     return i;
101 }
102 */
103 //template int Split<CStringA>(CStringA a,CStringA b,CStringA c[]);
104 ///*
105 static inline int Xtoi(const char * hexstr)
106 {
107     int i,j,k;
108     unsigned char ch;
109     k=0;j=0;
110     int len=(int)strlen(hexstr);
111     for (i=0;i<len;i++)
112     {
113         ch=hexstr[i];
114         if (ch>='0'&&ch<='9')
115         {
116             k=ch-'0';
117             j=j*16+k;
118             continue;
119         }
120         if (ch>='A'&&ch<='F')
121         {
122             k=ch-'A'+10;
123             j=j*16+k;
124             continue;
125         }
126         if (ch>='a'&&ch<='f')
127         {
128             k=ch-'a'+10;
129             j=j*16+k;
130             continue;
131         }
132         if (ch==' '||ch=='    ')
133         {
134             continue;
135         }
136         break;
137     }
138     return j;
139 }
140 static inline int Xtoi(CString hexstr)
141 {
142     int i,j,k;
143     TCHAR ch;
144     k=0;j=0;
145     int len=hexstr.GetLength();
146     for (i=0;i<len;i++)
147     {
148         ch=hexstr[i];
149         if (ch>=_T('0')&&ch<=_T('9'))
150         {
151             k=ch-_T('0');
152             j=j*16+k;
153             continue;
154         }
155         if (ch>=_T('A')&&ch<=_T('F'))
156         {
157             k=ch-_T('A')+10;
158             j=j*16+k;
159             continue;
160         }
161         if (ch>=_T('a')&&ch<=_T('f'))
162         {
163             k=ch-_T('a')+10;
164             j=j*16+k;
165             continue;
166         }
167         if (ch==_T(' ')||ch==_T('    '))
168         {
169             continue;
170         }
171         break;
172     }
173     return j;
174 }
175 inline int Split(CString s1,CString divider,CString resultstr[])
176 {
177     int i,j,k,l;
178 //    CString s2;
179     k=0;
180     i=0;
181     l=s1.GetLength();
182     for (i=0;k<l&&i<1024;i++)
183     {
184         j=s1.Find(divider,k);
185         if (j==-1) 
186         {
187             resultstr[i]=s1.Mid(k);
188             i++;
189             break;
190         }
191         resultstr[i]=s1.Mid(k,j-k);
192 //        s2.Format(_T("%d %d %d \r\n"),i,j,k);
193 //        ::SysLog(s2);
194         k=j+divider.GetLength();
195     }
196     return i;
197 }
198
199 inline int Split(CStringA s1,CStringA divider,CStringA resultstr[])
200 {
201     int i,j,k,l;
202     //    CString s2;
203     k=0;
204     i=0;
205     l=s1.GetLength();
206     for (i=0;k<l&&i<2048;i++)
207     {
208         j=s1.Find(divider,k);
209         if (j==-1) 
210         {
211             resultstr[i]=s1.Mid(k);
212             i++;
213             break;
214         }
215         resultstr[i]=s1.Mid(k,j-k);
216         //        s2.Format(_T("%d %d %d \r\n"),i,j,k);
217         //        ::SysLog(s2);
218         k=j+divider.GetLength();
219     }
220     return i;
221 }
222 //*/
223 inline WCHAR* ToWChar(char * str) 
224
225     //在GDI+中,有关字符的参数类型全部都是WCHAR类型的 
226     //该函数是将传统字符串进行转换 
227
228     static WCHAR buffer[1024]; 
229     wmemset(buffer,0,1024);
230     //_wcsset(buffer,0); 
231     MultiByteToWideChar(CP_ACP,0,str,(int)strlen(str),buffer,1024);
232     //LPCSTR
233     //WideCharToMultiByte(
234     return buffer; 
235
236
237
238 inline void X_aligned_memcpy_sse2(void* dest, const void* src, const unsigned long size_t)
239 {
240 /*
241     __asm
242     {
243         mov esi, src;    //src pointer
244         mov edi, dest;   //dest pointer
245
246         mov ebx, size_t; //ebx is our counter 
247         shr ebx, 7;      //divide by 128 (8 * 128bit registers)
248
249 loop_copy:
250         prefetchnta 128[ESI]; //SSE2 prefetch
251         prefetchnta 160[ESI];
252         prefetchnta 192[ESI];
253         prefetchnta 224[ESI];
254
255         movdqa xmm0, 0[ESI]; //move data from src to registers
256         movdqa xmm1, 16[ESI];
257         movdqa xmm2, 32[ESI];
258         movdqa xmm3, 48[ESI];
259         movdqa xmm4, 64[ESI];
260         movdqa xmm5, 80[ESI];
261         movdqa xmm6, 96[ESI];
262         movdqa xmm7, 112[ESI];
263
264         movntdq 0[EDI], xmm0; //move data from registers to dest
265         movntdq 16[EDI], xmm1;
266         movntdq 32[EDI], xmm2;
267         movntdq 48[EDI], xmm3;
268         movntdq 64[EDI], xmm4;
269         movntdq 80[EDI], xmm5;
270         movntdq 96[EDI], xmm6;
271         movntdq 112[EDI], xmm7;
272
273         add esi, 128;
274         add edi, 128;
275         dec ebx;
276
277         jnz loop_copy; //loop please
278         sfence
279 //loop_copy_end:
280     }
281 */
282 }
283 //*/
284 #endif //_FUNCTIONS_HPP_