Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/Common/dummy.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 119 - (show annotations) (download) (as text)
Fri Oct 8 15:41:45 2010 UTC (13 years, 7 months ago) by kamoya
File MIME type: text/x-c++src
File size: 7318 byte(s)
avoid ARRAYSIZE macro
1 #include "dummy.h"
2
3 #include <cassert>
4 #include <cstdarg>
5 #include <cstdio>
6 #include <stdexcept>
7 #include <vector>
8 #include <iomanip>
9 #include <array>
10
11 #if defined(_WINDOWS)
12 #include <windows.h>
13 #include <shlwapi.h>
14 #if defined(_MSC_VER)
15 #pragma comment(lib, "shlwapi.lib")
16 #endif
17 #else
18 #include <iconv.h>
19
20 #define SYSTEM_CHARSET "EUC-JP"
21 #define WIDE_CHARSET "utf-16"
22
23 static iconv_t ic_c2w = 0, ic_w2c = 0;
24 #endif
25 #include <tchar.h>
26
27 #include "NsmTypes.h"
28
29 #ifdef WINCE
30 struct tm *__cdecl localtime(const time_t *t)
31 {
32 static struct tm y;
33 FILETIME uTm, lTm;
34 SYSTEMTIME pTm;
35 __int64 t64;
36 t64 = *t;
37 t64 = (t64 + 11644473600)*10000000;
38 uTm.dwLowDateTime = static_cast<DWORD>(t64 & 0xFFFFFFFF);
39 uTm.dwHighDateTime= static_cast<DWORD>(t64 >> 32);
40 FileTimeToLocalFileTime(&uTm,&lTm);
41 FileTimeToSystemTime(&lTm,&pTm);
42 y.tm_year = pTm.wYear - 1900;
43 y.tm_mon = pTm.wMonth - 1;
44 y.tm_wday = pTm.wDayOfWeek;
45 y.tm_mday = pTm.wDay;
46 y.tm_hour = pTm.wHour;
47 y.tm_min = pTm.wMinute;
48 y.tm_sec = pTm.wSecond;
49 return &y;
50 }
51
52 #endif
53
54 std::wstring c2w(const std::string &src)
55 {
56 #ifdef _WINDOWS
57 int bufSize = MultiByteToWideChar(CP_THREAD_ACP, 0, src.c_str(), -1, NULL, 0);
58 std::vector<wchar_t> buf(bufSize);
59 MultiByteToWideChar(CP_THREAD_ACP, 0, src.c_str(), -1, &buf[0], bufSize);
60 return &buf[0];
61 #else
62 // (void)src;
63 // assert(0);
64 if (!ic_c2w) {
65 ic_c2w = iconv_open(WIDE_CHARSET, SYSTEM_CHARSET);
66 }
67 std::vector<wchar_t> buf(src.size() * 3); // [TODO] ���������������[�E�E�E
68 std::vector<char> src_buf(src.size() + 1);
69 memcpy(&src_buf[0], src.c_str(), sizeof(char) * src.size());
70 size_t in = src.size(), out = src.size() * 3;
71 char *s_in = (char*)&src_buf[0], *s_out = (char*)&buf[0];
72 iconv(ic_c2w, &s_in, &in, &s_out, &out);
73 return &buf[0];
74 #endif
75 }
76
77 std::string w2c(const std::wstring &src)
78 {
79 #ifdef _WINDOWS
80 int bufSize = WideCharToMultiByte(CP_THREAD_ACP, 0, src.c_str(), -1, NULL, 0, NULL, NULL);
81 std::vector<char> buf(bufSize);
82 WideCharToMultiByte(CP_THREAD_ACP, 0, src.c_str(), -1, &buf[0], bufSize, NULL, NULL);
83 return &buf[0];
84 #else
85 // (void)src;
86 // assert(0);
87 if (!ic_w2c) {
88 ic_w2c = iconv_open(SYSTEM_CHARSET, WIDE_CHARSET);
89 }
90 std::vector<char> buf(src.size() * 3); // [TODO] ���������������[�E�E�E
91 std::vector<wchar_t> src_buf(src.size() + 1);
92 memcpy(&src_buf[0], src.c_str(), sizeof(wchar_t) * src.size());
93 size_t in = src.size(), out = src.size() * 3;
94 char *s_in = (char*)&src_buf[0], *s_out = (char*)&buf[0];
95 iconv(ic_w2c, &s_in, &in, &s_out, &out);
96 return &buf[0];
97 #endif
98 }
99
100 /*
101 [TODO]
102 �������������A���r�����K�v���������_�~�[�������Q
103 �����I���������K�v����
104 */
105
106 Regnessem::tstring PtrToHex(const void* value)
107 {
108 Regnessem::tstringstream strm;
109 strm << std::hex << std::setfill(TEXT('0')) << std::setw(sizeof(void*) * 2) << value;
110 return strm.str();
111 }
112
113 Regnessem::tstring TimeToStr(std::time_t t)
114 {
115 std::array<TCHAR, 16> buffer;
116 #if defined(_MSC_VER) && !defined(WINCE)
117 tm tmp;
118 localtime_s(&tmp, &t);
119
120 _tcsftime(buffer.data(), std::tuple_size<decltype(buffer)>::value, TEXT("%H:%M:%S"), &tmp);
121 #else
122 _tcsftime(buffer.data(), std::tuple_size<decltype(buffer)>::value, TEXT("%H:%M:%S"), localtime(&t));
123 #endif
124 return buffer.data();
125 }
126
127 Regnessem::tstring ExtractFileName(const Regnessem::tstring &fileName)
128 {
129 #ifdef _WINDOWS
130 LPCTSTR result = PathFindFileName(fileName.c_str());
131
132 if(!PathIsFileSpec(result))
133 return Regnessem::tstring();
134
135 return result;
136 #else
137 tstring::size_type pos = fileName.find_last_of(TEXT("\\/"));
138 return pos == tstring::npos ? fileName : fileName.substr( pos+1 );
139 #endif
140 }
141
142 Regnessem::tstring ExtractFilePath(const Regnessem::tstring &fileName)
143 {
144 #ifdef _WINDOWS
145 std::vector<TCHAR> buff(fileName.size() + 2);
146
147 #ifdef _MSC_VER
148 fileName._Copy_s(&buff[0], buff.size(), fileName.size());
149 #else
150 fileName.copy(&buff[0], fileName.size());
151 #endif
152
153 PathRemoveFileSpec(&buff[0]);
154 PathAddBackslash(&buff[0]);
155
156 return &buff[0];
157 #else
158 tstring::size_type pos = fileName.find_last_of(TEXT("\\/"));
159 return pos == tstring::npos ? TEXT(".\\") : fileName.substr(0,pos+1 );
160 #endif
161 }
162
163 bool ForceDirectories(const Regnessem::tstring &dirPath)
164 {
165 for(LPCTSTR begin = dirPath.c_str(), p = PathFindNextComponent(begin); p != NULL; p = PathFindNextComponent(p))
166 {
167 const Regnessem::tstring work = dirPath.substr(0, p - begin);
168 const DWORD attr = GetFileAttributes(work.c_str());
169 if(attr == INVALID_FILE_ATTRIBUTES)
170 {
171 if(!CreateDirectory(work.c_str(), NULL))
172 return false;
173 }
174 else if((attr & FILE_ATTRIBUTE_DIRECTORY) == 0)
175 return false;
176 }
177
178 return true;
179 }
180
181 std::string formatA(const char* fmt, ...)
182 {
183 std::vector<char> buffer;
184 va_list ls;
185 va_start(ls,fmt);
186
187 try
188 {
189 #if defined(_MSC_VER) && !defined(WINCE)
190 int length = _vscprintf(fmt, ls) + 1;
191 if(length < 1)
192 throw std::invalid_argument("error");
193 buffer.resize(length);
194 int result = _vsprintf_p(&buffer.front(),length,fmt,ls);
195 #else
196 int length;
197 buffer.resize(8192);
198 #if defined(_MSC_VER) && defined(WINCE)
199 int result = _vsnprintf(&buffer.front(),8192,fmt,ls);
200 #else
201 int result = vsnprintf(&buffer.front(),8192,fmt,ls);
202 #endif
203 length = result;
204 #endif
205 if(result < 0)
206 throw std::invalid_argument("error");
207 buffer[length-1] = '\0';
208 }
209 catch(...)
210 {
211 va_end(ls);
212 throw;
213 }
214
215 va_end(ls);
216 return &buffer.front();
217 }
218
219 Regnessem::tstring format(const TCHAR*fmt,...)
220 {
221 class AutoVaList
222 {
223 public:
224 va_list List;
225 ~AutoVaList()
226 {
227 va_end(List);
228 }
229 };
230
231 AutoVaList ls;
232
233 va_start(ls.List, fmt);
234
235 #if defined(_MSC_VER) && !defined(WINCE)
236 int length = _vsctprintf(fmt, ls.List) + 1;
237 if(length < 1)
238 return fmt;
239
240 std::vector<TCHAR> buffer(length);
241 int result = _vstprintf_s(buffer.data(), buffer.size(), fmt, ls.List);
242 #else
243 std::array<TCHAR, 8192> buffer;
244 int result = _vsntprintf(buffer.data(), buffer.size(), fmt, ls.List);
245 buffer.back() = TCHAR();
246 #endif
247 if(result < 0)
248 return fmt;
249
250 return buffer.data();
251 }
252
253 #if defined(WINCE)
254 LONG_PTR GetWindowLongPtr(
255 HWND hWnd, // �E�B���h�E���n���h��
256 int nIndex // ���������l���I�t�Z�b�g
257 )
258 {
259 switch (nIndex) {
260 case GWLP_WNDPROC:
261 nIndex = GWL_WNDPROC;
262 break;
263 case GWLP_HINSTANCE:
264 return (LONG_PTR)GetModuleHandle(NULL);
265 break;
266 case GWLP_HWNDPARENT:
267 return (LONG_PTR)GetParent(hWnd);
268 break;
269 case GWLP_USERDATA:
270 nIndex = GWL_USERDATA;
271 break;
272 case GWLP_ID:
273 nIndex = GWL_ID;
274 break;
275 }
276 return (LONG_PTR)GetWindowLong(hWnd, nIndex);
277 }
278
279 LONG_PTR SetWindowLongPtr(
280 HWND hWnd, // �E�B���h�E���n���h��
281 int nIndex, // ���X�����l���I�t�Z�b�g
282 LONG_PTR dwNewLong // �V�����l
283 )
284 {
285 switch (nIndex) {
286 case GWLP_WNDPROC:
287 nIndex = GWL_WNDPROC;
288 break;
289 case GWLP_HINSTANCE:
290 return (LONG_PTR)GetModuleHandle(NULL);
291 break;
292 case GWLP_HWNDPARENT:
293 {
294 HWND hPrevWnd = GetParent(hWnd);
295 SetParent(hWnd, (HWND)dwNewLong);
296 return (LONG_PTR)hPrevWnd;
297 }
298 break;
299 case GWLP_USERDATA:
300 nIndex = GWL_USERDATA;
301 break;
302 case GWLP_ID:
303 nIndex = GWL_ID;
304 break;
305 }
306 return (LONG_PTR)SetWindowLong(hWnd, nIndex, dwNewLong);
307 }
308 #endif

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26