transactd 2.4.5 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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