transactd 2.4.5 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/CMakeLists.txt +1 -1
  3. data/README-JA.md +52 -529
  4. data/README.md +52 -523
  5. data/bin/common/tdclc_32_3_0.dll +0 -0
  6. data/bin/common/tdclc_64_3_0.dll +0 -0
  7. data/build/common/system.cmake +2 -1
  8. data/build/common/transactd_cl_common.cmake +3 -6
  9. data/build/swig/ruby/ruby.swg +85 -28
  10. data/build/swig/ruby/tdclrb_wrap.cpp +3195 -1578
  11. data/build/swig/tdcl.i +161 -5
  12. data/build/tdclc/CMakeLists.txt +1 -0
  13. data/build/tdclc/tdclc.cbproj +7 -1
  14. data/build/tdclc/tdclc.rc +4 -4
  15. data/build/tdclcpp/tdclcpp.rc +4 -4
  16. data/build/tdclcpp/tdclcpp_bc.cbproj +2 -5
  17. data/build/tdclrb/tdclrb.rc +4 -4
  18. data/source/bzs/db/blobStructs.h +1 -1
  19. data/source/bzs/db/engine/mysql/database.cpp +199 -74
  20. data/source/bzs/db/engine/mysql/database.h +47 -18
  21. data/source/bzs/db/engine/mysql/dbManager.cpp +1 -0
  22. data/source/bzs/db/engine/mysql/mysqlInternal.h +32 -8
  23. data/source/bzs/db/protocol/tdap/btrDate.cpp +110 -75
  24. data/source/bzs/db/protocol/tdap/btrDate.h +46 -21
  25. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +18 -18
  26. data/source/bzs/db/protocol/tdap/client/activeTable.h +25 -25
  27. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
  28. data/source/bzs/db/protocol/tdap/client/client.cpp +6 -5
  29. data/source/bzs/db/protocol/tdap/client/client.h +82 -15
  30. data/source/bzs/db/protocol/tdap/client/database.cpp +531 -142
  31. data/source/bzs/db/protocol/tdap/client/database.h +19 -6
  32. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +461 -408
  33. data/source/bzs/db/protocol/tdap/client/dbDef.h +11 -17
  34. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +61 -13
  35. data/source/bzs/db/protocol/tdap/client/field.cpp +1592 -1398
  36. data/source/bzs/db/protocol/tdap/client/field.h +110 -121
  37. data/source/bzs/db/protocol/tdap/client/fields.h +40 -10
  38. data/source/bzs/db/protocol/tdap/client/filter.h +69 -55
  39. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +296 -164
  40. data/source/bzs/db/protocol/tdap/client/groupQuery.h +77 -25
  41. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +31 -13
  42. data/source/bzs/db/protocol/tdap/client/memRecord.h +31 -21
  43. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
  44. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
  45. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +69 -24
  46. data/source/bzs/db/protocol/tdap/client/nsTable.h +3 -1
  47. data/source/bzs/db/protocol/tdap/client/recordset.cpp +1 -0
  48. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +46 -27
  49. data/source/bzs/db/protocol/tdap/client/request.h +2 -1
  50. data/source/bzs/db/protocol/tdap/client/serializer.cpp +44 -9
  51. data/source/bzs/db/protocol/tdap/client/serializer.h +1 -1
  52. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +182 -76
  53. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +23 -12
  54. data/source/bzs/db/protocol/tdap/client/stringConverter.h +8 -10
  55. data/source/bzs/db/protocol/tdap/client/table.cpp +172 -93
  56. data/source/bzs/db/protocol/tdap/client/table.h +112 -37
  57. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +17 -0
  58. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +0 -1
  59. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +0 -2
  60. data/source/bzs/db/protocol/tdap/client/trdormapi.h +1 -1
  61. data/source/bzs/db/protocol/tdap/fieldComp.h +698 -14
  62. data/source/bzs/db/protocol/tdap/myDateTime.cpp +723 -307
  63. data/source/bzs/db/protocol/tdap/myDateTime.h +294 -0
  64. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +164 -54
  65. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +6 -3
  66. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +133 -550
  67. data/source/bzs/db/protocol/tdap/mysql/request.h +6 -5
  68. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +217 -82
  69. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +1 -1
  70. data/source/bzs/db/protocol/tdap/tdapRequest.h +4 -9
  71. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +808 -17
  72. data/source/bzs/db/protocol/tdap/tdapSchema.h +656 -164
  73. data/source/bzs/db/protocol/tdap/tdapcapi.h +130 -28
  74. data/source/bzs/db/protocol/tdap/uri.h +40 -32
  75. data/source/bzs/db/transactd/connManager.cpp +1 -1
  76. data/source/bzs/db/transactd/transactd.cpp +7 -0
  77. data/source/bzs/env/compiler.h +107 -94
  78. data/source/bzs/env/crosscompile.cpp +24 -12
  79. data/source/bzs/env/crosscompile.h +75 -6
  80. data/source/bzs/env/mbcswchrLinux.cpp +2 -2
  81. data/source/bzs/env/tcharMinGW.h +4 -0
  82. data/source/bzs/example/changeSchema.cpp +22 -17
  83. data/source/bzs/example/queryData.cpp +4 -0
  84. data/source/bzs/netsvc/client/iconnection.h +3 -1
  85. data/source/bzs/netsvc/client/tcpClient.h +10 -3
  86. data/source/bzs/rtl/stringBuffers.cpp +7 -0
  87. data/source/bzs/test/tdclatl/bench_query_atl.js +6 -0
  88. data/source/bzs/test/tdclatl/bench_tdclatl.js +8 -1
  89. data/source/bzs/test/tdclatl/test_query_atl.js +22 -2
  90. data/source/bzs/test/tdclatl/test_v3.js +1017 -0
  91. data/source/bzs/test/tdclphp/transactd_Test.php +55 -21
  92. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +0 -5
  93. data/source/bzs/test/tdclphp/transactd_pool_Test.php +2 -0
  94. data/source/bzs/test/tdclphp/transactd_v3_Test.php +743 -0
  95. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -5
  96. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +2 -0
  97. data/source/bzs/test/tdclrb/transactd_spec.rb +39 -16
  98. data/source/bzs/test/tdclrb/transactd_v3_spec.rb +748 -0
  99. data/source/bzs/test/transactdBench/transactdBench.cpp +55 -58
  100. data/source/bzs/test/transactdBench/transactdBench2.cpp +1 -3
  101. data/source/bzs/test/trdclengn/testField.h +3305 -0
  102. data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +1050 -0
  103. data/source/bzs/test/trdclengn/test_trdclengn.cpp +112 -190
  104. data/source/bzs/test/trdclengn/testbase.h +137 -0
  105. data/source/global/ormsrcgen/srcgen.cpp +23 -12
  106. data/source/global/ormsrcgen/template/ormDataClass_template.h +2 -0
  107. data/source/global/querystmts/querystmts.cpp +2 -3
  108. data/source/global/tdclatl/Bitset.cpp +38 -0
  109. data/source/global/tdclatl/Bitset.h +63 -0
  110. data/source/global/tdclatl/Database.cpp +59 -18
  111. data/source/global/tdclatl/Database.h +7 -4
  112. data/source/global/tdclatl/DbDef.cpp +6 -6
  113. data/source/global/tdclatl/DbDef.h +2 -1
  114. data/source/global/tdclatl/Field.cpp +112 -0
  115. data/source/global/tdclatl/Field.h +19 -5
  116. data/source/global/tdclatl/FieldDef.cpp +137 -16
  117. data/source/global/tdclatl/FieldDef.h +18 -2
  118. data/source/global/tdclatl/FieldDefs.cpp +54 -1
  119. data/source/global/tdclatl/FieldDefs.h +3 -0
  120. data/source/global/tdclatl/GroupQuery.cpp +8 -8
  121. data/source/global/tdclatl/QueryBase.cpp +65 -0
  122. data/source/global/tdclatl/QueryBase.h +10 -0
  123. data/source/global/tdclatl/Record.cpp +33 -2
  124. data/source/global/tdclatl/Record.h +3 -1
  125. data/source/global/tdclatl/RecordsetQuery.cpp +42 -0
  126. data/source/global/tdclatl/RecordsetQuery.h +8 -0
  127. data/source/global/tdclatl/Table.cpp +127 -3
  128. data/source/global/tdclatl/Table.h +10 -1
  129. data/source/global/tdclatl/TableDef.cpp +41 -8
  130. data/source/global/tdclatl/TableDef.h +7 -2
  131. data/source/global/tdclatl/activeTable.cpp +40 -71
  132. data/source/global/tdclatl/resource.h +0 -0
  133. data/source/global/tdclatl/tdclatl.idl +222 -28
  134. data/source/linux/tchar.h +100 -96
  135. data/transactd.gemspec +2 -2
  136. metadata +13 -11
  137. data/BUILD_UNIX-JA.md +0 -161
  138. data/BUILD_WIN-JA.md +0 -326
  139. data/README_ORMSRCGEN-JA.md +0 -115
  140. data/README_ORMSRCGEN.md +0 -118
  141. data/RELEASE_NOTE-JA.md +0 -356
  142. data/RELEASE_NOTE.md +0 -360
  143. data/bin/common/tdclc_32_2_4.dll +0 -0
  144. data/bin/common/tdclc_64_2_4.dll +0 -0
  145. data/source/bzs/test/trdclengn/test_blob.cpp +0 -375
@@ -16,11 +16,14 @@
16
16
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
17
  02111-1307, USA.
18
18
  =================================================================*/
19
- #include <bzs/env/tstring.h>
19
+ #include "myDateTime.h"
20
+ #include <bzs/db/protocol/tdap/btrDate.h>
21
+ #include <string.h>
20
22
  #include <stdlib.h>
21
23
  #include <stdio.h>
22
24
  #include <time.h>
23
- #include <bzs/db/protocol/tdap/btrDate.h>
25
+ #include <algorithm>
26
+ #include <bzs/env/crosscompile.h>
24
27
 
25
28
  namespace bzs
26
29
  {
@@ -30,166 +33,118 @@ namespace protocol
30
33
  {
31
34
  namespace tdap
32
35
  {
33
-
34
- #pragma pack(push, 1)
35
- pragma_pack1;
36
-
36
+ #pragma warning(disable : 4996)
37
37
  #ifdef _WIN32
38
-
39
- const wchar_t wtime_format_ms[] = L"%02d:%02d:%02d.%u";
38
+ const wchar_t wtime_format_ms[] = L"%02d:%02d:%02d.%0*u";
40
39
  const wchar_t wtime_format[] = L"%02d:%02d:%02d";
41
- const wchar_t wdatetime_format_ms[] = L"%04d-%02d-%02d %02d:%02d:%02d.%u";
40
+ const wchar_t wdatetime_format_ms[] = L"%04d-%02d-%02d %02d:%02d:%02d.%0*u";
42
41
  const wchar_t wdatetime_format[] = L"%04d-%02d-%02d %02d:%02d:%02d";
43
- const wchar_t wdatetime_format_ms_i[] = L"%04d-%02d-%02d %02d:%02d:%02d.%u";
44
- const wchar_t wdatetime_format_i[] = L"%04d-%02d-%02d %02d:%02d:%02d";
45
-
46
- inline size_t _ttol_(const wchar_t* v)
47
- {
48
- return _wtol(v);
49
- }
50
- inline size_t _tcslen_(const wchar_t* v)
51
- {
52
- return wcslen(v);
53
- }
54
- inline wchar_t* _tcsncpy_(wchar_t* d, const wchar_t* s, size_t n)
55
- {
56
- return wcsncpy(d, s, n);
57
- }
58
-
59
42
  #endif
60
-
61
- const char time_format_ms[] = "%02d:%02d:%02d.%u";
43
+ const char time_format_ms[] = "%02d:%02d:%02d.%0*u";
62
44
  const char time_format[] = "%02d:%02d:%02d";
63
- const char datetime_format_ms[] = "%04d-%02d-%02d %02d:%02d:%02d.%u";
64
- const char datetime_format[] = "%04d-%02d-%02d %02d:%02d:%02d";
65
- const char datetime_format_ms_i[] = "%04d-%02d-%02d %02d:%02d:%02d.%u";
66
- const char datetime_format_i[] = "%04d-%02d-%02d %02d:%02d:%02d";
45
+ const char datetime_format_ms[] = "%04d-%02d-%02d %02d:%02d:%02d.%0*u";
46
+ const char datetime_format[] = "%04d-%02d-%02d %02d:%02d:%02d";
67
47
 
68
- inline size_t _ttol_(const char* v)
48
+ //-------------------------------------------------------------
49
+ void myDate::setValue(int v, bool btrDate_i)
69
50
  {
70
- return atol(v);
51
+ if (btrDate_i)
52
+ {
53
+ btrDate btrd;
54
+ btrd.i = v;
55
+ yy = btrd.yy;
56
+ mm = btrd.mm;
57
+ dd = btrd.dd;
58
+ tmp = 0;
59
+ }
60
+ else
61
+ i = v;
71
62
  }
72
- inline size_t _tcslen_(const char* v)
63
+
64
+ int myDate::getValue(bool btrDate_i)
73
65
  {
74
- return strlen(v);
66
+ if (btrDate_i)
67
+ {
68
+ btrDate btrd;
69
+ btrd.yy = yy;
70
+ btrd.mm = mm;
71
+ btrd.dd = dd;
72
+ return btrd.i;
73
+ }
74
+ return i;
75
75
  }
76
- inline char* _tcsncpy_(char* d, const char* s, size_t n)
76
+
77
+ char* myDate::toString(char* p, size_t size, bool w3_format)
77
78
  {
78
- return strncpy(d, s, n);
79
+ if (w3_format)
80
+ sprintf_s(p, size, "%04d/%02d/%02d", yy, mm, dd);
81
+ else
82
+ sprintf_s(p, size, "%04d-%02d-%02d", yy, mm, dd);
83
+ return p;
79
84
  }
80
85
 
81
- #pragma warning(disable : 4996)
82
- union myDate
86
+ myDate& myDate::operator=(const char* p)
83
87
  {
84
- struct
85
- {
86
- unsigned int dd : 5;
87
- unsigned int mm : 4;
88
- unsigned int yy : 15;
89
- unsigned int tmp : 8;
90
- };
91
-
92
- int i;
93
-
94
- inline void setValue(int v, bool btrvValue = false)
88
+ size_t len = strlen(p);
89
+ i = 0;
90
+ if (len > 3)
95
91
  {
96
- if (btrvValue)
92
+ yy = atol(p);
93
+ if (len > 6)
97
94
  {
98
- btrDate btrd;
99
- btrd.i = v;
100
- yy = btrd.yy;
101
- mm = btrd.mm;
102
- dd = btrd.dd;
103
- tmp = 0;
95
+ mm = atol(p + 5);
96
+ if (len > 9)
97
+ dd = atol(p + 8);
104
98
  }
105
- else
106
- i = v;
107
99
  }
100
+ return *this;
101
+ }
102
+
103
+ #ifdef _WIN32
104
+ wchar_t* myDate::toString(wchar_t* p, size_t size, bool w3_format)
105
+ {
106
+ if (w3_format)
107
+ swprintf_s(p, size, L"%04d/%02d/%02d", yy, mm, dd);
108
+ else
109
+ swprintf_s(p, size, L"%04d-%02d-%02d", yy, mm, dd);
110
+ return p;
111
+ }
108
112
 
109
- inline int getValue(bool btrvValue = false)
113
+ myDate& myDate::operator=(const wchar_t* p)
114
+ {
115
+ size_t len = wcslen(p);
116
+ i = 0;
117
+ if (len > 3)
110
118
  {
111
- if (btrvValue)
119
+ yy = _wtol(p);
120
+ if (len > 6)
112
121
  {
113
- btrDate btrd;
114
- btrd.yy = yy;
115
- btrd.mm = mm;
116
- btrd.dd = dd;
117
- return btrd.i;
122
+ mm = _wtol(p + 5);
123
+ if (len > 9)
124
+ dd = _wtol(p + 8);
118
125
  }
119
- return i;
120
- }
121
-
122
- inline char* toStr(char* p, bool btrvValue)
123
- {
124
- if (btrvValue)
125
- sprintf(p, "%04d/%02d/%02d", yy, mm, dd);
126
- else
127
- sprintf(p, "%04d-%02d-%02d", yy, mm, dd);
128
- return p;
129
- }
130
-
131
- #ifdef _WIN32
132
- inline wchar_t* toStr(wchar_t* p, bool btrvValue)
133
- {
134
- if (btrvValue)
135
- swprintf_s(p, 11, L"%04d/%02d/%02d", yy, mm, dd);
136
- else
137
- swprintf_s(p, 11, L"%04d-%02d-%02d", yy, mm, dd);
138
- return p;
139
126
  }
127
+ return *this;
128
+ }
140
129
  #endif
141
130
 
142
- template <class T> inline myDate& operator=(const T* p)
143
- {
144
- tmp = 0;
145
- yy = _ttol_(p);
146
- mm = _ttol_(p + 5);
147
- dd = _ttol_(p + 8);
148
- return *this;
149
- }
150
- };
151
131
 
152
- struct myTime
132
+ //-------------------------------------------------------------
133
+ void myTime::setValue(__int64 v, bool btrTime_i)
153
134
  {
154
-
155
- private:
156
- int m_dec;
157
-
158
- public:
159
- union
135
+ i64 = 0;
136
+ if (btrTime_i)
160
137
  {
161
- struct
162
- {
163
- unsigned __int64 ms : 24;
164
- unsigned __int64 ss : 6;
165
- unsigned __int64 nn : 6;
166
- unsigned __int64 hh : 10;
167
- unsigned __int64 unused : 1;
168
- unsigned __int64 sign : 1;
169
- unsigned __int64 tmp : 16;
170
- };
171
- __int64 i64;
172
- };
173
-
174
- public:
175
- inline myTime(int size) : m_dec((size - 3) * 2){};
176
-
177
- inline void setValue(__int64 v, bool btrvValue = false)
138
+ btrTime btrt;
139
+ btrt.i = (int)v;
140
+ hh = btrt.hh;
141
+ nn = btrt.nn;
142
+ ss = btrt.ss;
143
+ ms = btrt.uu * 10000;
144
+ return;
145
+ }
146
+ if (m_bigendian)
178
147
  {
179
-
180
- if (btrvValue)
181
- {
182
- btrTime btrt;
183
- btrt.i = (int)v;
184
- hh = btrt.hh;
185
- nn = btrt.nn;
186
- ss = btrt.ss;
187
- ms = btrt.uu * 10000;
188
- tmp = 0;
189
- sign = 1;
190
- unused = 0;
191
- return;
192
- }
193
148
  char* p = (char*)&i64;
194
149
  char* src = (char*)&v;
195
150
  if (m_dec)
@@ -197,16 +152,37 @@ public:
197
152
  p[0] = src[5];
198
153
  p[1] = src[4];
199
154
  p[2] = src[3];
200
- ms = ms >> (3 - m_dec / 2) * 8;
155
+ ms = ms >> (3 - ((m_dec + 1) / 2)) * 8;
156
+ ms /= ((m_dec % 2) ? 10 : 1);
201
157
  }
202
158
  p[3] = src[2];
203
159
  p[4] = src[1];
204
160
  p[5] = src[0];
161
+ sign = 0;
162
+ }else
163
+ {//DD�~24�~3600 + HH�~3600 + MM�~60 + SS
164
+ hh = v / 10000;
165
+ nn = (v % 10000) / 100;
166
+ ss = v % 100;
205
167
  }
168
+ }
206
169
 
207
- inline __int64 getValue(bool btrvValue = false)
170
+ __int64 myTime::getValue(bool btrTime_i)
171
+ {
172
+ if (btrTime_i)
173
+ {
174
+ btrTime btrt;
175
+ btrt.hh = hh;
176
+ btrt.nn = nn;
177
+ btrt.ss = ss;
178
+ btrt.uu = (char)(ms / 100000);
179
+ return btrt.i;
180
+ }
181
+
182
+ __int64 v = 0;
183
+ sign = 1;
184
+ if (m_bigendian)
208
185
  {
209
- __int64 v = 0;
210
186
  char* src = (char*)&i64;
211
187
  char* p = (char*)&v;
212
188
  p[2] = src[3];
@@ -214,107 +190,194 @@ public:
214
190
  p[0] = src[5];
215
191
  if (m_dec)
216
192
  {
217
- ms = ms << (3 - m_dec / 2) * 8;
193
+ ms = ms << (3 - ((m_dec + 1) / 2)) * 8;
194
+ ms *= ((m_dec % 2) ? 10 : 1);
218
195
  p[3] = src[2];
219
196
  p[4] = src[1];
220
197
  p[5] = src[0];
221
198
  }
222
- if (btrvValue)
223
- {
224
- btrTime btrt;
225
- btrt.hh = hh;
226
- btrt.nn = nn;
227
- btrt.ss = ss;
228
- btrt.uu = (char)(ms / 100000);
229
- return btrt.i;
230
- }
231
- return v;
232
- }
199
+ }else
200
+ v = (hh * 10000LL) + (nn * 100LL) + ss;
201
+ sign = 0;
202
+ return v;
203
+ }
233
204
 
234
- inline char* toStr(char* p)
205
+ char* myTime::toString(char* p, size_t size)
206
+ {
207
+ if (m_dec)
208
+ sprintf_s(p, size, time_format_ms, (int)hh, (int)nn, (int)ss,
209
+ m_dec, (unsigned int)ms);
210
+ else
211
+ sprintf_s(p, size, time_format, (int)hh, (int)nn, (int)ss);
212
+ return p;
213
+ }
214
+
215
+ myTime& myTime::operator=(const char* p)
216
+ {
217
+ i64 = 0;
218
+ size_t len = strlen(p);
219
+ if (len > 1)
235
220
  {
236
- if (m_dec)
237
- sprintf(p, time_format_ms, (int)hh, (int)nn, (int)ss,
238
- (unsigned int)ms);
239
- else
240
- sprintf(p, time_format, (int)hh, (int)nn, (int)ss);
241
- return p;
221
+ hh = atol(p);
222
+ if (len > 4)
223
+ {
224
+ nn = atol(p + 3);
225
+ if (len > 7)
226
+ {
227
+ ss = atol(p + 6);
228
+ if (m_dec && len > 9)
229
+ {
230
+ char tmp[10] = { 0x00 };
231
+ strncpy(tmp, p + 9, (size_t)m_dec);
232
+ ms = atol(tmp);
233
+ }
234
+ }
235
+ }
242
236
  }
237
+ return *this;
238
+ }
243
239
 
244
240
  #ifdef _WIN32
245
- inline wchar_t* toStr(wchar_t* p)
246
- {
247
- if (m_dec)
248
- swprintf_s(p, 17, wtime_format_ms, (int)hh, (int)nn, (int)ss,
249
- (unsigned int)ms);
250
- else
251
- swprintf_s(p, 9, wtime_format, (int)hh, (int)nn, (int)ss);
252
- return p;
253
- }
254
- #endif
241
+ wchar_t* myTime::toString(wchar_t* p, size_t size)
242
+ {
243
+ if (m_dec)
244
+ swprintf_s(p, size, wtime_format_ms, (int)hh, (int)nn, (int)ss,
245
+ m_dec, (unsigned int)ms);
246
+ else
247
+ swprintf_s(p, size, wtime_format, (int)hh, (int)nn, (int)ss);
248
+ return p;
249
+ }
255
250
 
256
- template <class T> inline myTime& operator=(const T* p)
251
+ myTime& myTime::operator=(const wchar_t* p)
252
+ {
253
+ i64 = 0;
254
+ size_t len = wcslen(p);
255
+ if (len > 1)
257
256
  {
258
- sign = 1;
259
- unused = 0;
260
- ms = 0;
261
- hh = _ttol_(p);
262
- nn = _ttol_(p + 3);
263
- ss = _ttol_(p + 6);
264
- if (m_dec && _tcslen_(p) > 9)
257
+ hh = _wtol(p);
258
+ if (len > 4)
265
259
  {
266
- T tmp[10] = { 0x00 };
267
- _tcsncpy_(tmp, p + 9, (size_t)m_dec);
268
- ms = _ttol_(tmp);
260
+ nn = _wtol(p + 3);
261
+ if (len > 7)
262
+ {
263
+ ss = _wtol(p + 6);
264
+ if (m_dec && len > 9)
265
+ {
266
+ wchar_t tmp[10] = { 0x00 };
267
+ wcsncpy(tmp, p + 9, (size_t)m_dec);
268
+ ms = _wtol(tmp);
269
+ }
270
+ }
269
271
  }
270
- return *this;
271
272
  }
272
- };
273
+ return *this;
274
+ }
275
+ #endif
276
+ //-------------------------------------------------------------
277
+ static int digit_logs[7] = {1, 10, 100, 1000, 10000, 100000, 1000000}; // digit 0 to 6
278
+ #define ZEROPOINT_SEC 3020400ULL
273
279
 
274
- struct myDateTime
280
+ void maTime::setValue(__int64 v, bool btrTime_i)
275
281
  {
276
- private:
277
- int m_dec;
278
-
279
- public:
280
- union
282
+ if (m_bigendian && !btrTime_i)
281
283
  {
282
- struct
283
- {
284
- unsigned __int64 ms : 24;
285
- unsigned __int64 ss : 6;
286
- unsigned __int64 nn : 6;
287
- unsigned __int64 hh : 5;
288
- unsigned __int64 dd : 5;
289
- unsigned __int64 yymm : 17; // yy*13+mm (yy 0-9999, mm 0-12)
290
- unsigned __int64 sign : 1;
291
- };
292
- __int64 i64;
293
- };
284
+ i64 = 0;
285
+ char* p = (char*)&i64;
286
+ char* src = (char*)&v;
287
+ p[0] = src[5];
288
+ p[1] = src[4];
289
+ p[2] = src[3];
290
+ p[3] = src[2];
291
+ p[4] = src[1];
292
+ p[5] = src[0];
293
+ i64 = i64 >> (3 - ((m_dec + 1) / 2)) * 8;
294
+ __int64 v = i64;
295
+ if (v)
296
+ v -= (ZEROPOINT_SEC * digit_logs[m_dec]);
297
+ ms = v % digit_logs[m_dec]; v /= digit_logs[m_dec];
298
+ ss = v % 60; v /= 60;
299
+ nn = v % 60; v /= 60;
300
+ hh = v % 24;
301
+ sign = 0;
302
+ }else
303
+ myTime::setValue(v, btrTime_i);
304
+ }
305
+
306
+ __int64 maTime::getValue(bool btrTime_i)
307
+ {
308
+ if (!m_bigendian || btrTime_i) return myTime::getValue(btrTime_i);
309
+ unsigned __int64 i64t = (((hh) * 60ULL + nn) * 60ULL + ss) * digit_logs[m_dec] + ms;
310
+ if (i64t)
311
+ i64t += ZEROPOINT_SEC * digit_logs[m_dec];
312
+
313
+ __int64 v = 0;
314
+ char* src = (char*)&i64t;
315
+ char* p = (char*)&v;
316
+ p[2] = src[3];
317
+ p[1] = src[4];
318
+ p[0] = src[5];
319
+ p[3] = src[2];
320
+ p[4] = src[1];
321
+ p[5] = src[0];
322
+ v = v >> (3 - ((m_dec + 1) / 2)) * 8;
323
+ return v;
324
+ }
294
325
 
295
- inline myDateTime(int size) : m_dec((size - 5) * 2){};
326
+ maTime& maTime::operator=(const char* p)
327
+ {
328
+ myTime::operator=(p);
329
+ return *this;
330
+ }
296
331
 
297
- inline void setValue(__int64 v)
332
+ #ifdef _WIN32
333
+ maTime& maTime::operator=(const wchar_t* p)
334
+ {
335
+ myTime::operator=(p);
336
+ return *this;
337
+ }
338
+ #endif
339
+ //-------------------------------------------------------------
340
+ void myDateTime::setValue(__int64 v)
341
+ {
342
+ i64 = 0;
343
+ if (m_bigendian)
298
344
  {
299
345
  char* p = (char*)&i64;
300
346
  char* src = (char*)&v;
301
- if (m_dec)
302
- {
303
- p[0] = src[7];
304
- p[1] = src[6];
305
- p[2] = src[5];
306
- ms = ms >> (3 - m_dec / 2) * 8;
307
- }
347
+
308
348
  p[3] = src[4];
309
349
  p[4] = src[3];
310
350
  p[5] = src[2];
311
351
  p[6] = src[1];
312
352
  p[7] = src[0];
353
+ if (i64 && m_dec)
354
+ {
355
+ p[0] = src[7];
356
+ p[1] = src[6];
357
+ p[2] = src[5];
358
+ ms = ms >> (3 - ((m_dec + 1) / 2)) * 8;
359
+ ms /= ((m_dec % 2) ? 10 : 1);
360
+ }
361
+
362
+ }else
363
+ { // YYYY�~10000 + MM�~100 + DD HH�~10000 + MM�~100 + SS
364
+ __int64 yy = v / 10000000000LL;
365
+ __int64 m = (v / 100000000LL) % 100;
366
+ yymm = yy*13 + m;
367
+ dd = (v / 1000000L) % 100;
368
+ hh = (v / 10000L) % 100;
369
+ nn = (v / 100L) % 100;
370
+ ss = v % 100;
313
371
  }
372
+ sign = 0;
373
+ }
314
374
 
315
- inline __int64 getValue()
375
+ __int64 myDateTime::getValue()
376
+ {
377
+ __int64 v = 0;
378
+ sign = 1;
379
+ if (m_bigendian)
316
380
  {
317
- __int64 v = 0;
318
381
  char* src = (char*)&i64;
319
382
  char* p = (char*)&v;
320
383
  p[4] = src[3];
@@ -322,97 +385,301 @@ public:
322
385
  p[2] = src[5];
323
386
  p[1] = src[6];
324
387
  p[0] = src[7];
325
- if (m_dec)
388
+ if (v && m_dec)
326
389
  {
327
- ms = ms << (3 - m_dec / 2) * 8;
390
+ ms = ms << (3 - ((m_dec + 1) / 2)) * 8;
391
+ ms *= ((m_dec % 2) ? 10 : 1);
328
392
  p[5] = src[2];
329
393
  p[6] = src[1];
330
394
  p[7] = src[0];
331
395
  }
332
- return v;
396
+
397
+ }else
398
+ { // YYYY�~10000 + MM�~100 + DD HH�~10000 + MM�~100 + SS
399
+ __int64 yy = yymm / 13;
400
+ __int64 m = yymm % 13;
401
+ v = (yy * 10000000000) + (m * 100000000LL) + (dd * 1000000LL) +
402
+ (hh * 10000LL) + (nn * 100LL) + ss;
333
403
  }
404
+ sign = 0;
405
+ return v;
406
+ }
407
+
408
+ myDateTime& myDateTime::operator=(const char* p)
409
+ {
410
+ size_t len = strlen(p);
411
+ i64 = 0;
334
412
 
335
- inline char* toStr(char* p)
413
+ if (len > 6)
336
414
  {
337
- if (m_dec)
338
- sprintf(p, datetime_format_ms, (int)(yymm / 13), (int)(yymm % 13),
339
- (int)dd, (int)hh, (int)nn, (int)ss, (unsigned int)ms);
340
- else
341
- sprintf(p, datetime_format, (int)(yymm / 13), (int)(yymm % 13),
342
- (int)dd, (int)hh, (int)nn, (int)ss);
343
- return p;
415
+ yymm = atol(p) * 13 + atol(p + 5);
416
+ if (len > 9)
417
+ {
418
+ dd = atol(p + 8);
419
+ if (len > 12)
420
+ {
421
+ hh = atol(p + 11);
422
+ if (len > 15)
423
+ {
424
+ nn = atol(p + 14);
425
+ if (len > 18)
426
+ {
427
+ ss = atol(p + 17);
428
+ if (m_dec && len > 20)
429
+ {
430
+ char tmp[10] = { 0x00 };
431
+ strncpy(tmp, p + 20, (size_t)m_dec);
432
+ ms = atol(tmp);
433
+ }
434
+ }
435
+ }
436
+ }
437
+ }
438
+ }
439
+ return *this;
440
+ }
441
+
442
+
443
+ void myDateTime::setTime(const char* p)
444
+ {
445
+ i64 = 0;
446
+ size_t len = strlen(p);
447
+ if (len > 1)
448
+ {
449
+ hh = atol(p);
450
+ if (len > 4)
451
+ {
452
+ nn = atol(p + 3);
453
+ if (len > 7)
454
+ {
455
+ ss = atol(p + 6);
456
+ if (m_dec && len > 9)
457
+ {
458
+ char tmp[10] = { 0x00 };
459
+ strncpy(tmp, p + 9, (size_t)m_dec);
460
+ ms = atol(tmp);
461
+ }
462
+ }
463
+ }
464
+ }
465
+ }
466
+
467
+
468
+ char* myDateTime::dateStr(char* p, size_t size) const
469
+ {
470
+ sprintf_s(p, size, "%04d-%02d-%02d", (int)(yymm / 13),
471
+ (int)(yymm % 13), (int)dd);
472
+ return p;
473
+ }
474
+
475
+ char* myDateTime::timeStr(char* p, size_t size) const
476
+ {
477
+ if (m_dec)
478
+ sprintf_s(p, size, time_format_ms, (int)hh, (int)nn, (int)ss,
479
+ m_dec, (unsigned int)ms);
480
+ else
481
+ sprintf_s(p, size, time_format, (int)hh, (int)nn, (int)ss);
482
+ return p;
483
+ }
484
+
485
+ char* myDateTime::toString(char* p, size_t size) const
486
+ {
487
+ if (m_dec)
488
+ {
489
+ sprintf_s(p, size, datetime_format_ms, (int)(yymm / 13), (int)(yymm % 13),
490
+ (int)dd, (int)hh, (int)nn, (int)ss, m_dec, (unsigned int)ms);
344
491
  }
492
+ else
493
+ sprintf_s(p, size, datetime_format, (int)(yymm / 13), (int)(yymm % 13),
494
+ (int)dd, (int)hh, (int)nn, (int)ss);
495
+ return p;
496
+ }
497
+
345
498
 
346
499
  #ifdef _WIN32
347
- inline wchar_t* toStr(wchar_t* p)
500
+
501
+
502
+ myDateTime& myDateTime::operator=(const wchar_t* p)
503
+ {
504
+ size_t len = wcslen(p);
505
+ i64 = 0;
506
+
507
+ if (len > 6)
348
508
  {
349
- if (m_dec)
350
- swprintf_s(p, 26, wdatetime_format_ms, (int)(yymm / 13),
351
- (int)(yymm % 13), (int)dd, (int)hh, (int)nn, (int)ss,
352
- (unsigned int)ms);
353
- else
354
- swprintf_s(p, 20, wdatetime_format, (int)(yymm / 13),
355
- (int)(yymm % 13), (int)dd, (int)hh, (int)nn, (int)ss);
356
- return p;
509
+ yymm = _wtol(p) * 13 + _wtol(p + 5);
510
+ if (len > 9)
511
+ {
512
+ dd = _wtol(p + 8);
513
+ if (len > 12)
514
+ {
515
+ hh = _wtol(p + 11);
516
+ if (len > 15)
517
+ {
518
+ nn = _wtol(p + 14);
519
+ if (len > 18)
520
+ {
521
+ ss = _wtol(p + 17);
522
+ if (m_dec && len > 20)
523
+ {
524
+ wchar_t tmp[10] = { 0x00 };
525
+ wcsncpy(tmp, p + 20, (size_t)m_dec);
526
+ ms = _wtol(tmp);
527
+ }
528
+ }
529
+ }
530
+ }
531
+ }
357
532
  }
358
- #endif
533
+ return *this;
534
+ }
359
535
 
360
- template <class T> myDateTime& operator=(const T* p)
536
+ void myDateTime::setTime(const wchar_t* p)
537
+ {
538
+ i64 = 0;
539
+ size_t len = wcslen(p);
540
+ if (len > 1)
361
541
  {
362
- sign = 1;
363
- ms = 0;
364
- yymm = _ttol_(p) * 13 + _ttol_(p + 5);
365
- dd = _ttol_(p + 8);
366
- hh = _ttol_(p + 11);
367
- nn = _ttol_(p + 14);
368
- ss = _ttol_(p + 17);
369
- if (m_dec && _tcslen_(p) > 20)
542
+ hh = _wtol(p);
543
+ if (len > 4)
370
544
  {
371
- T tmp[10] = { 0x00 };
372
- _tcsncpy_(tmp, p + 20, (size_t)m_dec);
373
- ms = _ttol_(tmp);
545
+ nn = _wtol(p + 3);
546
+ if (len > 7)
547
+ {
548
+ ss = _wtol(p + 6);
549
+ if (m_dec && len > 9)
550
+ {
551
+ wchar_t tmp[10] = { 0x00 };
552
+ wcsncpy(tmp, p + 9, (size_t)m_dec);
553
+ ms = _wtol(tmp);
554
+ }
555
+ }
374
556
  }
375
- return *this;
376
557
  }
377
- };
558
+ }
559
+
560
+ wchar_t* myDateTime::dateStr(wchar_t* p, size_t size) const
561
+ {
562
+ swprintf_s(p, size, L"%04d-%02d-%02d", (int)(yymm / 13),
563
+ (int)(yymm % 13), (int)dd);
564
+ return p;
565
+ }
566
+
567
+ wchar_t* myDateTime::timeStr(wchar_t* p, size_t size) const
568
+ {
569
+ if (m_dec)
570
+ swprintf_s(p, size, wtime_format_ms, (int)hh, (int)nn, (int)ss,
571
+ m_dec, (unsigned int)ms);
572
+ else
573
+ swprintf_s(p, size, wtime_format, (int)hh, (int)nn, (int)ss);
574
+ return p;
575
+ }
378
576
 
379
- struct myTimeStamp
577
+ wchar_t* myDateTime::toString(wchar_t* p, size_t size) const
380
578
  {
381
- private:
382
- int m_dec;
579
+ if (m_dec)
580
+ swprintf_s(p, size, wdatetime_format_ms, (int)(yymm / 13),
581
+ (int)(yymm % 13), (int)dd, (int)hh, (int)nn, (int)ss,
582
+ m_dec, (unsigned int)ms);
583
+ else
584
+ swprintf_s(p, size, wdatetime_format, (int)(yymm / 13),
585
+ (int)(yymm % 13), (int)dd, (int)hh, (int)nn, (int)ss);
586
+ return p;
587
+ }
383
588
 
384
- public:
385
- union
589
+ #endif
590
+ //-------------------------------------------------------------
591
+ void maDateTime::setValue(__int64 v)
592
+ {
593
+ if (m_bigendian)
386
594
  {
387
- struct
388
- {
389
- unsigned __int64 ms : 24;
390
- unsigned __int64 datetime : 32;
391
- unsigned __int64 tmp : 8;
392
- };
393
- __int64 i64;
394
- };
595
+ i64 = 0;
596
+ char* p = (char*)&i64;
597
+ char* src = (char*)&v;
598
+ p[3] = src[4];
599
+ p[4] = src[3];
600
+ p[5] = src[2];
601
+ p[6] = src[1];
602
+ p[7] = src[0];
603
+ p[0] = src[7];
604
+ p[1] = src[6];
605
+ p[2] = src[5];
606
+ i64 = i64 >> (3 - ((m_dec + 1) / 2)) * 8;
607
+ __int64 v = i64;
608
+ ms = v % digit_logs[m_dec]; v /= digit_logs[m_dec];
609
+ ss = v % 60; v /= 60;
610
+ nn = v % 60; v /= 60;
611
+ hh = v % 24; v /= 24;
612
+ dd = v % 32; v /= 32;
613
+ __int64 mm = v % 13; v /= 13;
614
+ __int64 yy = v;
615
+ yymm = yy*13 + mm;
616
+
617
+ }else
618
+ myDateTime::setValue(v);
619
+ }
395
620
 
396
- inline myTimeStamp(int size) : m_dec((size - 4) * 2){};
621
+ __int64 maDateTime::getValue()
622
+ {
623
+ if (!m_bigendian) return myDateTime::getValue();
624
+ unsigned __int64 i64t = (((((yymm) * 32ULL + dd) * 24ULL + hh) * 60ULL + nn) * 60ULL +
625
+ ss) * digit_logs[m_dec] + ms;
626
+ __int64 v;
627
+ char* src = (char*)&i64t;
628
+ char* p = (char*)&v;
629
+ p[4] = src[3];
630
+ p[3] = src[4];
631
+ p[2] = src[5];
632
+ p[1] = src[6];
633
+ p[0] = src[7];
634
+ p[5] = src[2];
635
+ p[6] = src[1];
636
+ p[7] = src[0];
637
+ v = v >> (3 - ((m_dec + 1) / 2)) * 8;
638
+ return v;
639
+ }
640
+
641
+ maDateTime& maDateTime::operator=(const char* p)
642
+ {
643
+ myDateTime::operator=(p);
644
+ return *this;
645
+ }
397
646
 
398
- inline void setValue(__int64 v)
647
+ #ifdef _WIN32
648
+ maDateTime& maDateTime::operator=(const wchar_t* p)
649
+ {
650
+ myDateTime::operator=(p);
651
+ return *this;
652
+ }
653
+ #endif
654
+
655
+ //-------------------------------------------------------------
656
+ void myTimeStamp::setValue(__int64 v)
657
+ {
658
+ i64 = 0;
659
+ if (m_bigendian)
399
660
  {
400
661
  char* p = (char*)&i64;
401
662
  char* src = (char*)&v;
402
- if (m_dec)
663
+ p[3] = src[3];
664
+ p[4] = src[2];
665
+ p[5] = src[1];
666
+ p[6] = src[0];
667
+ if (m_dec && datetime)
403
668
  {
404
669
  p[0] = src[6];
405
670
  p[1] = src[5];
406
671
  p[2] = src[4];
407
- ms = ms >> (3 - m_dec / 2) * 8;
672
+ ms = ms >> (3 - ((m_dec + 1) / 2)) * 8;
673
+ if (!m_mariadb)
674
+ ms /= ((m_dec % 2) ? 10 : 1);
408
675
  }
409
- p[3] = src[3];
410
- p[4] = src[2];
411
- p[5] = src[1];
412
- p[6] = src[0];
413
- }
676
+ }else
677
+ datetime = v;
678
+ }
414
679
 
415
- inline __int64 getValue()
680
+ __int64 myTimeStamp::getValue()
681
+ {
682
+ if (m_bigendian)
416
683
  {
417
684
  __int64 v = 0;
418
685
  char* src = (char*)&i64;
@@ -424,80 +691,229 @@ public:
424
691
  p[0] = src[6];
425
692
  if (m_dec)
426
693
  {
427
- ms = ms << (3 - m_dec / 2) * 8;
694
+ ms = ms << (3 - ((m_dec + 1) / 2)) * 8;
695
+ if (!m_mariadb)
696
+ ms *= ((m_dec % 2) ? 10 : 1);
428
697
  p[4] = src[2];
429
698
  p[5] = src[1];
430
699
  p[6] = src[0];
431
700
  }
432
701
  return v;
433
702
  }
703
+ return datetime;
704
+ }
434
705
 
435
- #ifdef _WIN32
436
- inline wchar_t* toStr(wchar_t* p)
706
+ char* myTimeStamp::toString(char* p, size_t size)
707
+ {
708
+ if (datetime)
437
709
  {
438
- struct tm* st;
439
710
  time_t v = (time_t)datetime;
440
- st = localtime(&v);
711
+ struct tm* st = localtime(&v);
441
712
 
442
713
  if (m_dec)
443
- swprintf_s(p, 26, wdatetime_format_ms_i, st->tm_year + 1900,
444
- st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min,
445
- st->tm_sec, (unsigned int)ms);
714
+ sprintf_s(p, size, datetime_format_ms, st->tm_year + 1900, st->tm_mon + 1,
715
+ st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec,
716
+ m_dec, (unsigned int)ms);
717
+ else
718
+ sprintf_s(p, size, datetime_format, st->tm_year + 1900, st->tm_mon + 1,
719
+ st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec);
720
+ }else
721
+ {
722
+ if (m_dec)
723
+ sprintf_s(p, size, datetime_format_ms, 0, 0, 0, 0, 0, 0, m_dec, 0);
446
724
  else
447
- swprintf_s(p, 20, wdatetime_format_i, st->tm_year + 1900,
448
- st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min,
449
- st->tm_sec);
450
- return p;
725
+ sprintf_s(p, size, datetime_format, 0, 0, 0, 0, 0, 0);
726
+
451
727
  }
452
- #endif
728
+ return p;
729
+ }
453
730
 
454
- inline char* toStr(char* p)
731
+ myTimeStamp& myTimeStamp::operator=(const char* p)
732
+ {
733
+ size_t len = strlen(p);
734
+ struct tm st;
735
+ memset(&st, 0, sizeof(tm));
736
+ i64 = 0;
737
+ if (len > 3)
738
+ {
739
+ st.tm_year = (int)atol(p) - 1900;
740
+ if (len > 6)
741
+ {
742
+ st.tm_mon = (int)atol(p + 5) - 1;
743
+ if (len > 9)
744
+ {
745
+ st.tm_mday = (int)atol(p + 8);
746
+ if (len > 12)
747
+ {
748
+ st.tm_hour = (int)atol(p + 11);
749
+ if (len > 15)
750
+ {
751
+ st.tm_min = (int)atol(p + 14);
752
+ if (len > 18)
753
+ {
754
+ st.tm_sec = (int)atol(p + 17);
755
+ if (m_dec && len > 20)
756
+ {
757
+ char tmp[10] = { 0x00 };
758
+ strncpy(tmp, p + 20, (size_t)m_dec);
759
+ ms = atol(tmp);
760
+ }
761
+ }
762
+ }
763
+ }
764
+ }
765
+ }
766
+ }
767
+ datetime = (__int64)mktime(&st);
768
+ return *this;
769
+ }
770
+
771
+ char* myTimeStamp::dateStr(char* p, size_t size) const
772
+ {
773
+ if (datetime)
455
774
  {
456
- struct tm* st;
457
775
  time_t v = (time_t)datetime;
458
- st = localtime(&v);
776
+ struct tm* st = localtime(&v);
777
+ sprintf_s(p, size, "%04d-%02d-%02d", st->tm_year + 1900, st->tm_mon + 1,st->tm_mday);
778
+ }else
779
+ sprintf_s(p, size, "%04d-%02d-%02d", 0, 0, 0);
780
+ return p;
781
+ }
782
+
783
+ char* myTimeStamp::timeStr(char* p, size_t size) const
784
+ {
785
+ if (datetime)
786
+ {
787
+ time_t v = (time_t)datetime;
788
+ struct tm* st = localtime(&v);
459
789
 
460
790
  if (m_dec)
461
- sprintf(p, datetime_format_ms_i, st->tm_year + 1900, st->tm_mon + 1,
462
- st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec,
463
- (unsigned int)ms);
791
+ sprintf_s(p, size, time_format_ms, st->tm_hour, st->tm_min, st->tm_sec,
792
+ m_dec, (unsigned int)ms);
464
793
  else
465
- sprintf(p, datetime_format_i, st->tm_year + 1900, st->tm_mon + 1,
466
- st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec);
467
- return p;
794
+ sprintf_s(p, size, time_format, st->tm_hour, st->tm_min, st->tm_sec);
795
+ }else
796
+ {
797
+ if (m_dec)
798
+ sprintf_s(p, size, time_format_ms, 0, 0, 0, m_dec, 0);
799
+ else
800
+ sprintf_s(p, size, time_format, 0, 0, 0);
468
801
  }
469
- };
470
- inline int btrdateToMydate(int btrd)
802
+ return p;
803
+ }
804
+
805
+ #ifdef _WIN32
806
+ #pragma warning(disable : 4477)
807
+ wchar_t* myTimeStamp::toString(wchar_t* p, size_t size)
471
808
  {
472
- myDate myd;
473
- myd.setValue(btrd, true);
474
- return myd.getValue(true);
809
+ if (datetime)
810
+ {
811
+ time_t v = (time_t)datetime;
812
+ errno = 0;
813
+ struct tm* st = localtime(&v);
814
+ if (st == NULL)
815
+ {
816
+ swprintf_s(p, size, L"er:%d %s", errno, _tcserror(errno));
817
+ return p;
818
+ }
819
+ if (m_dec)
820
+ swprintf_s(p, size, wdatetime_format_ms, st->tm_year + 1900,
821
+ st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min,
822
+ st->tm_sec, m_dec, (unsigned int)ms);
823
+ else
824
+ swprintf_s(p, size, wdatetime_format, st->tm_year + 1900,
825
+ st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min,
826
+ st->tm_sec);
827
+ }else
828
+ {
829
+ if (m_dec)
830
+ swprintf_s(p, size, wdatetime_format_ms, 0, 0, 0, 0, 0, 0, m_dec, 0);
831
+ else
832
+ swprintf_s(p, size, wdatetime_format, 0, 0, 0, 0, 0, 0);
833
+ }
834
+ return p;
475
835
  }
836
+ #pragma warning(default : 4477)
476
837
 
477
- inline __int64 btrtimeToMytime(int btrt)
838
+ myTimeStamp& myTimeStamp::operator=(const wchar_t* p)
478
839
  {
479
- myTime myt(4);
480
- myt.setValue(btrt, true);
481
- return myt.getValue(true);
840
+ size_t len = wcslen(p);
841
+ struct tm st;
842
+ memset(&st, 0, sizeof(tm));
843
+ i64 = 0;
844
+ if (len > 3)
845
+ {
846
+ st.tm_year = (int)_wtol(p) - 1900;
847
+ if (len > 6)
848
+ {
849
+ st.tm_mon = (int)_wtol(p + 5) - 1;
850
+ if (len > 9)
851
+ {
852
+ st.tm_mday = (int)_wtol(p + 8);
853
+ if (len > 12)
854
+ {
855
+ st.tm_hour = (int)_wtol(p + 11);
856
+ if (len > 15)
857
+ {
858
+ st.tm_min = (int)_wtol(p + 14);
859
+ if (len > 18)
860
+ {
861
+ st.tm_sec = (int)_wtol(p + 17);
862
+ if (m_dec && len > 20)
863
+ {
864
+ wchar_t tmp[10] = { 0x00 };
865
+ wcsncpy(tmp, p + 20, (size_t)m_dec);
866
+ ms = _wtol(tmp);
867
+ }
868
+ }
869
+ }
870
+ }
871
+ }
872
+ }
873
+ }
874
+ datetime = (__int64)mktime(&st);
875
+ return *this;
482
876
  }
483
877
 
484
- inline int mydateToBtrdate(int mydate)
878
+ wchar_t* myTimeStamp::dateStr(wchar_t* p, size_t size) const
485
879
  {
486
- myDate myd;
487
- myd.setValue(mydate);
488
- return myd.getValue(true);
880
+ if (datetime)
881
+ {
882
+ time_t v = (time_t)datetime;
883
+ struct tm* st = localtime(&v);
884
+ swprintf_s(p, size, L"%04d-%02d-%02d", st->tm_year + 1900, st->tm_mon + 1,st->tm_mday);
885
+ }else
886
+ swprintf_s(p, size, L"%04d-%02d-%02d", 0, 0, 0);
887
+ return p;
489
888
  }
490
889
 
491
- inline int mytimeToBtrtime(__int64 mytime, int size)
890
+ wchar_t* myTimeStamp::timeStr(wchar_t* p, size_t size) const
492
891
  {
493
- myTime myt(size);
494
- myt.setValue(mytime);
495
- return (int)myt.getValue(true);
892
+ if (datetime)
893
+ {
894
+ time_t v = (time_t)datetime;
895
+ struct tm* st = localtime(&v);
896
+
897
+ if (m_dec)
898
+ swprintf_s(p, size, wtime_format_ms, st->tm_hour, st->tm_min, st->tm_sec,
899
+ m_dec, (unsigned int)ms);
900
+ else
901
+ swprintf_s(p, size, wtime_format, st->tm_hour, st->tm_min, st->tm_sec);
902
+ }else
903
+ {
904
+ if (m_dec)
905
+ swprintf_s(p, size, wtime_format_ms, 0, 0, 0, m_dec, 0);
906
+ else
907
+ swprintf_s(p, size, wtime_format, 0, 0, 0);
908
+ }
909
+ return p;
496
910
  }
497
- #pragma warning(default : 4996)
911
+ #endif
912
+
913
+
914
+
915
+ #pragma warning(default : 4996)
498
916
 
499
- #pragma pack(pop)
500
- pragma_pop;
501
917
 
502
918
  } // namespace tdap
503
919
  } // namespace protocol