ooxml_crypt 0.1.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 (264) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +58 -0
  5. data/Rakefile +12 -0
  6. data/bin/console +15 -0
  7. data/bin/setup +8 -0
  8. data/ext/ooxml_crypt/extconf.rb +18 -0
  9. data/ext/ooxml_crypt/ooxml_crypt.c +27 -0
  10. data/ext/ooxml_crypt/ooxml_crypt.h +7 -0
  11. data/lib/ooxml_crypt/version.rb +5 -0
  12. data/lib/ooxml_crypt.rb +75 -0
  13. data/vendor/cybozulib/.github/workflows/main.yml +12 -0
  14. data/vendor/cybozulib/.gitignore +5 -0
  15. data/vendor/cybozulib/CMakeLists.txt +6 -0
  16. data/vendor/cybozulib/COPYRIGHT +27 -0
  17. data/vendor/cybozulib/Makefile +26 -0
  18. data/vendor/cybozulib/bin/libeay32.dll +0 -0
  19. data/vendor/cybozulib/bin/libmecab.dll +0 -0
  20. data/vendor/cybozulib/bin/ssleay32.dll +0 -0
  21. data/vendor/cybozulib/common.mk +116 -0
  22. data/vendor/cybozulib/common.props +25 -0
  23. data/vendor/cybozulib/cybozulib.sln +286 -0
  24. data/vendor/cybozulib/debug.props +14 -0
  25. data/vendor/cybozulib/include/cybozu/array.hpp +197 -0
  26. data/vendor/cybozulib/include/cybozu/atoi.hpp +238 -0
  27. data/vendor/cybozulib/include/cybozu/atomic.hpp +146 -0
  28. data/vendor/cybozulib/include/cybozu/base64.hpp +210 -0
  29. data/vendor/cybozulib/include/cybozu/benchmark.hpp +212 -0
  30. data/vendor/cybozulib/include/cybozu/bfd.hpp +105 -0
  31. data/vendor/cybozulib/include/cybozu/bit_operation.hpp +139 -0
  32. data/vendor/cybozulib/include/cybozu/bitvector.hpp +358 -0
  33. data/vendor/cybozulib/include/cybozu/condition_variable.hpp +113 -0
  34. data/vendor/cybozulib/include/cybozu/condition_variable_cs.hpp +74 -0
  35. data/vendor/cybozulib/include/cybozu/config.hpp +392 -0
  36. data/vendor/cybozulib/include/cybozu/critical_section.hpp +60 -0
  37. data/vendor/cybozulib/include/cybozu/crypto.hpp +321 -0
  38. data/vendor/cybozulib/include/cybozu/csucvector.hpp +624 -0
  39. data/vendor/cybozulib/include/cybozu/csv.hpp +294 -0
  40. data/vendor/cybozulib/include/cybozu/data_type.hpp +27 -0
  41. data/vendor/cybozulib/include/cybozu/endian.hpp +224 -0
  42. data/vendor/cybozulib/include/cybozu/env.hpp +63 -0
  43. data/vendor/cybozulib/include/cybozu/event.hpp +122 -0
  44. data/vendor/cybozulib/include/cybozu/exception.hpp +253 -0
  45. data/vendor/cybozulib/include/cybozu/file.hpp +626 -0
  46. data/vendor/cybozulib/include/cybozu/fmindex.hpp +291 -0
  47. data/vendor/cybozulib/include/cybozu/format.hpp +93 -0
  48. data/vendor/cybozulib/include/cybozu/frequency.hpp +264 -0
  49. data/vendor/cybozulib/include/cybozu/hash.hpp +67 -0
  50. data/vendor/cybozulib/include/cybozu/inttype.hpp +174 -0
  51. data/vendor/cybozulib/include/cybozu/itoa.hpp +336 -0
  52. data/vendor/cybozulib/include/cybozu/json.hpp +120 -0
  53. data/vendor/cybozulib/include/cybozu/line_stream.hpp +149 -0
  54. data/vendor/cybozulib/include/cybozu/link_libeay32.hpp +21 -0
  55. data/vendor/cybozulib/include/cybozu/link_mpir.hpp +18 -0
  56. data/vendor/cybozulib/include/cybozu/link_ssleay32.hpp +19 -0
  57. data/vendor/cybozulib/include/cybozu/log.hpp +237 -0
  58. data/vendor/cybozulib/include/cybozu/minixml.hpp +452 -0
  59. data/vendor/cybozulib/include/cybozu/mmap.hpp +143 -0
  60. data/vendor/cybozulib/include/cybozu/mutex.hpp +144 -0
  61. data/vendor/cybozulib/include/cybozu/nlp/mecab.hpp +96 -0
  62. data/vendor/cybozulib/include/cybozu/nlp/plsi.hpp +315 -0
  63. data/vendor/cybozulib/include/cybozu/nlp/random.hpp +74 -0
  64. data/vendor/cybozulib/include/cybozu/nlp/sparse.hpp +529 -0
  65. data/vendor/cybozulib/include/cybozu/nlp/svd.hpp +486 -0
  66. data/vendor/cybozulib/include/cybozu/nlp/tfidf.hpp +226 -0
  67. data/vendor/cybozulib/include/cybozu/nlp/top_score.hpp +75 -0
  68. data/vendor/cybozulib/include/cybozu/option.hpp +743 -0
  69. data/vendor/cybozulib/include/cybozu/parallel.hpp +88 -0
  70. data/vendor/cybozulib/include/cybozu/pcg.hpp +72 -0
  71. data/vendor/cybozulib/include/cybozu/process.hpp +324 -0
  72. data/vendor/cybozulib/include/cybozu/quit_signal_handler.hpp +66 -0
  73. data/vendor/cybozulib/include/cybozu/random_generator.hpp +144 -0
  74. data/vendor/cybozulib/include/cybozu/regex.hpp +463 -0
  75. data/vendor/cybozulib/include/cybozu/select8.hpp +279 -0
  76. data/vendor/cybozulib/include/cybozu/serializer.hpp +363 -0
  77. data/vendor/cybozulib/include/cybozu/sha1.hpp +209 -0
  78. data/vendor/cybozulib/include/cybozu/sha2.hpp +506 -0
  79. data/vendor/cybozulib/include/cybozu/siphash.hpp +105 -0
  80. data/vendor/cybozulib/include/cybozu/socket.hpp +785 -0
  81. data/vendor/cybozulib/include/cybozu/ssl.hpp +203 -0
  82. data/vendor/cybozulib/include/cybozu/stacktrace.hpp +291 -0
  83. data/vendor/cybozulib/include/cybozu/stream.hpp +269 -0
  84. data/vendor/cybozulib/include/cybozu/string.hpp +1746 -0
  85. data/vendor/cybozulib/include/cybozu/string_operation.hpp +365 -0
  86. data/vendor/cybozulib/include/cybozu/sucvector.hpp +378 -0
  87. data/vendor/cybozulib/include/cybozu/test.hpp +373 -0
  88. data/vendor/cybozulib/include/cybozu/thread.hpp +229 -0
  89. data/vendor/cybozulib/include/cybozu/time.hpp +281 -0
  90. data/vendor/cybozulib/include/cybozu/tls.hpp +115 -0
  91. data/vendor/cybozulib/include/cybozu/unordered_map.hpp +13 -0
  92. data/vendor/cybozulib/include/cybozu/unordered_set.hpp +13 -0
  93. data/vendor/cybozulib/include/cybozu/v128.hpp +376 -0
  94. data/vendor/cybozulib/include/cybozu/wavelet_matrix.hpp +345 -0
  95. data/vendor/cybozulib/include/cybozu/xorshift.hpp +189 -0
  96. data/vendor/cybozulib/include/cybozu/zlib.hpp +325 -0
  97. data/vendor/cybozulib/include/sais.hxx +364 -0
  98. data/vendor/cybozulib/misc/make_select8tbl.cpp +26 -0
  99. data/vendor/cybozulib/mk.bat +37 -0
  100. data/vendor/cybozulib/readme.md +29 -0
  101. data/vendor/cybozulib/release.props +12 -0
  102. data/vendor/cybozulib/sample/Makefile +30 -0
  103. data/vendor/cybozulib/sample/csucvector_smpl.cpp +42 -0
  104. data/vendor/cybozulib/sample/data/svd/org/test1.S +4 -0
  105. data/vendor/cybozulib/sample/data/svd/org/test1.U +4 -0
  106. data/vendor/cybozulib/sample/data/svd/org/test1.V +6 -0
  107. data/vendor/cybozulib/sample/data/svd/test1 +4 -0
  108. data/vendor/cybozulib/sample/data/svd/test2 +4 -0
  109. data/vendor/cybozulib/sample/desymbol.cpp +127 -0
  110. data/vendor/cybozulib/sample/exception_smpl.cpp +46 -0
  111. data/vendor/cybozulib/sample/fmindex_smpl.cpp +231 -0
  112. data/vendor/cybozulib/sample/log_smpl.cpp +19 -0
  113. data/vendor/cybozulib/sample/mecab_smpl.cpp +37 -0
  114. data/vendor/cybozulib/sample/option2_smpl.cpp +68 -0
  115. data/vendor/cybozulib/sample/option_smpl.cpp +42 -0
  116. data/vendor/cybozulib/sample/plsi_smpl.cpp +207 -0
  117. data/vendor/cybozulib/sample/proj/exception_smpl.vcproj +184 -0
  118. data/vendor/cybozulib/sample/proj/mecab_smpl.vcproj +184 -0
  119. data/vendor/cybozulib/sample/proj/ssl_smpl/ssl_smpl.vcxproj +85 -0
  120. data/vendor/cybozulib/sample/proj/ssl_smpl.vcproj +347 -0
  121. data/vendor/cybozulib/sample/proj/stacktrace_smpl/stacktrace_smpl.vcxproj +85 -0
  122. data/vendor/cybozulib/sample/proj/svd_smpl.vcproj +184 -0
  123. data/vendor/cybozulib/sample/quit_signal_handler.cpp +30 -0
  124. data/vendor/cybozulib/sample/serializer_smpl.cpp +196 -0
  125. data/vendor/cybozulib/sample/socket_smpl.cpp +82 -0
  126. data/vendor/cybozulib/sample/ssl_smpl.cpp +39 -0
  127. data/vendor/cybozulib/sample/stacktrace_smpl.cpp +52 -0
  128. data/vendor/cybozulib/sample/svd_bench_smpl.cpp +143 -0
  129. data/vendor/cybozulib/sample/svd_smpl.cpp +94 -0
  130. data/vendor/cybozulib/sample/wm_bench_smpl.cpp +182 -0
  131. data/vendor/cybozulib/sample/zlib_smpl.cpp +41 -0
  132. data/vendor/cybozulib/src/Makefile +8 -0
  133. data/vendor/cybozulib/src/base/Makefile +19 -0
  134. data/vendor/cybozulib/test/Makefile +12 -0
  135. data/vendor/cybozulib/test/base/Makefile +37 -0
  136. data/vendor/cybozulib/test/base/array_test.cpp +173 -0
  137. data/vendor/cybozulib/test/base/atoi_test.cpp +774 -0
  138. data/vendor/cybozulib/test/base/atomic_test.cpp +49 -0
  139. data/vendor/cybozulib/test/base/base64_test.cpp +113 -0
  140. data/vendor/cybozulib/test/base/bit_operation_test.cpp +134 -0
  141. data/vendor/cybozulib/test/base/bitvector_test.cpp +204 -0
  142. data/vendor/cybozulib/test/base/condition_variable_cs_test.cpp +92 -0
  143. data/vendor/cybozulib/test/base/condition_variable_test.cpp +88 -0
  144. data/vendor/cybozulib/test/base/config_test.cpp +236 -0
  145. data/vendor/cybozulib/test/base/crypto_test.cpp +122 -0
  146. data/vendor/cybozulib/test/base/csucvector_test.cpp +63 -0
  147. data/vendor/cybozulib/test/base/csv_test.cpp +182 -0
  148. data/vendor/cybozulib/test/base/data/a.xml +26 -0
  149. data/vendor/cybozulib/test/base/endian_test.cpp +56 -0
  150. data/vendor/cybozulib/test/base/env_test.cpp +22 -0
  151. data/vendor/cybozulib/test/base/event_test.cpp +41 -0
  152. data/vendor/cybozulib/test/base/file_test.cpp +233 -0
  153. data/vendor/cybozulib/test/base/fmindex_test.cpp +118 -0
  154. data/vendor/cybozulib/test/base/format_test.cpp +12 -0
  155. data/vendor/cybozulib/test/base/frequency_test.cpp +104 -0
  156. data/vendor/cybozulib/test/base/itoa_test.cpp +522 -0
  157. data/vendor/cybozulib/test/base/line_stream_test.cpp +208 -0
  158. data/vendor/cybozulib/test/base/mecab_test.cpp +41 -0
  159. data/vendor/cybozulib/test/base/minixml_test.cpp +103 -0
  160. data/vendor/cybozulib/test/base/mmap_test.cpp +15 -0
  161. data/vendor/cybozulib/test/base/option_test.cpp +487 -0
  162. data/vendor/cybozulib/test/base/parallel_test.cpp +48 -0
  163. data/vendor/cybozulib/test/base/proj/array_test/array_test.vcxproj +86 -0
  164. data/vendor/cybozulib/test/base/proj/atoi_test/atoi_test.vcxproj +86 -0
  165. data/vendor/cybozulib/test/base/proj/atomic_test/atomic_test.vcxproj +86 -0
  166. data/vendor/cybozulib/test/base/proj/base64_test/base64_test.vcxproj +86 -0
  167. data/vendor/cybozulib/test/base/proj/condition_variable_cs_test/condition_variable_cs_test.vcxproj +86 -0
  168. data/vendor/cybozulib/test/base/proj/condition_variable_test/condition_variable_test.vcxproj +86 -0
  169. data/vendor/cybozulib/test/base/proj/config_test/config_test.vcxproj +86 -0
  170. data/vendor/cybozulib/test/base/proj/csv_test/csv_test.vcxproj +86 -0
  171. data/vendor/cybozulib/test/base/proj/endian_test/endian_test.vcxproj +86 -0
  172. data/vendor/cybozulib/test/base/proj/env_test/env_test.vcxproj +86 -0
  173. data/vendor/cybozulib/test/base/proj/event_test/event_test.vcxproj +86 -0
  174. data/vendor/cybozulib/test/base/proj/file_test/file_test.vcxproj +86 -0
  175. data/vendor/cybozulib/test/base/proj/itoa_test/itoa_test.vcxproj +86 -0
  176. data/vendor/cybozulib/test/base/proj/mecab_test/mecab_test.vcxproj +88 -0
  177. data/vendor/cybozulib/test/base/proj/minixml_test/minixml_test.vcxproj +86 -0
  178. data/vendor/cybozulib/test/base/proj/mmap_test/mmap_test.vcxproj +86 -0
  179. data/vendor/cybozulib/test/base/proj/serializer_test/serializer_test.vcxproj +86 -0
  180. data/vendor/cybozulib/test/base/proj/sha1_test/sha1_test.vcxproj +86 -0
  181. data/vendor/cybozulib/test/base/proj/stream_test/stream_test.vcxproj +86 -0
  182. data/vendor/cybozulib/test/base/proj/string_operation_test/string_operation_test.vcxproj +86 -0
  183. data/vendor/cybozulib/test/base/proj/string_test/string_test.vcxproj +86 -0
  184. data/vendor/cybozulib/test/base/proj/thread_test/thread_test.vcxproj +86 -0
  185. data/vendor/cybozulib/test/base/proj/time_test/time_test.vcxproj +86 -0
  186. data/vendor/cybozulib/test/base/proj/tls_test/tls_test.vcxproj +86 -0
  187. data/vendor/cybozulib/test/base/proj/zlib_test/zlib_test.vcxproj +86 -0
  188. data/vendor/cybozulib/test/base/random_generator_test.cpp +28 -0
  189. data/vendor/cybozulib/test/base/regex_test.cpp +74 -0
  190. data/vendor/cybozulib/test/base/serializer_test.cpp +483 -0
  191. data/vendor/cybozulib/test/base/sha1_test.cpp +61 -0
  192. data/vendor/cybozulib/test/base/sha2_test.cpp +191 -0
  193. data/vendor/cybozulib/test/base/siphash_test.cpp +33 -0
  194. data/vendor/cybozulib/test/base/socket_test.cpp +76 -0
  195. data/vendor/cybozulib/test/base/stream_test.cpp +101 -0
  196. data/vendor/cybozulib/test/base/string_operation_test.cpp +340 -0
  197. data/vendor/cybozulib/test/base/string_test.cpp +1705 -0
  198. data/vendor/cybozulib/test/base/sucvector_test.cpp +312 -0
  199. data/vendor/cybozulib/test/base/thread_test.cpp +62 -0
  200. data/vendor/cybozulib/test/base/time_test.cpp +164 -0
  201. data/vendor/cybozulib/test/base/tls_test.cpp +50 -0
  202. data/vendor/cybozulib/test/base/wavelet_matrix_test.cpp +145 -0
  203. data/vendor/cybozulib/test/base/zlib_test.cpp +371 -0
  204. data/vendor/cybozulib/test/nlp/Makefile +27 -0
  205. data/vendor/cybozulib/test/nlp/proj/random_test.vcproj +184 -0
  206. data/vendor/cybozulib/test/nlp/proj/sparse_test.vcproj +184 -0
  207. data/vendor/cybozulib/test/nlp/proj/svd_test.vcproj +184 -0
  208. data/vendor/cybozulib/test/nlp/random_test.cpp +62 -0
  209. data/vendor/cybozulib/test/nlp/sparse_test.cpp +347 -0
  210. data/vendor/cybozulib/test/nlp/svd_test.cpp +234 -0
  211. data/vendor/cybozulib/test/nlp/top_score_test.cpp +40 -0
  212. data/vendor/cybozulib/tool/create_vcproj.py +186 -0
  213. data/vendor/cybozulib/tool/vcproj_tmpl.py +185 -0
  214. data/vendor/msoffice/COPYRIGHT +27 -0
  215. data/vendor/msoffice/Makefile +29 -0
  216. data/vendor/msoffice/bin/64/msoc.dll +0 -0
  217. data/vendor/msoffice/bin/64/msocsample.exe +0 -0
  218. data/vendor/msoffice/bin/64/msoffice-crypt.exe +0 -0
  219. data/vendor/msoffice/bin/msoc.dll +0 -0
  220. data/vendor/msoffice/bin/msocsample.exe +0 -0
  221. data/vendor/msoffice/bin/msoffice-crypt.exe +0 -0
  222. data/vendor/msoffice/common.mk +71 -0
  223. data/vendor/msoffice/common.props +26 -0
  224. data/vendor/msoffice/debug.props +14 -0
  225. data/vendor/msoffice/include/attack.hpp +211 -0
  226. data/vendor/msoffice/include/cfb.hpp +777 -0
  227. data/vendor/msoffice/include/crypto_util.hpp +450 -0
  228. data/vendor/msoffice/include/custom_sha1.hpp +342 -0
  229. data/vendor/msoffice/include/decode.hpp +240 -0
  230. data/vendor/msoffice/include/encode.hpp +221 -0
  231. data/vendor/msoffice/include/make_dataspace.hpp +316 -0
  232. data/vendor/msoffice/include/msoc.h +129 -0
  233. data/vendor/msoffice/include/resource.hpp +7 -0
  234. data/vendor/msoffice/include/standard_encryption.hpp +145 -0
  235. data/vendor/msoffice/include/uint32vec.hpp +179 -0
  236. data/vendor/msoffice/include/util.hpp +212 -0
  237. data/vendor/msoffice/lib/.emptydir +0 -0
  238. data/vendor/msoffice/misc/decrypt-xls.vbs +46 -0
  239. data/vendor/msoffice/mk.bat +1 -0
  240. data/vendor/msoffice/mkdll.bat +3 -0
  241. data/vendor/msoffice/msoc.def +13 -0
  242. data/vendor/msoffice/msocsample.py +178 -0
  243. data/vendor/msoffice/msoffice12.sln +31 -0
  244. data/vendor/msoffice/readme.md +110 -0
  245. data/vendor/msoffice/release.props +28 -0
  246. data/vendor/msoffice/src/Makefile +19 -0
  247. data/vendor/msoffice/src/attack.cpp +124 -0
  248. data/vendor/msoffice/src/cfb_test.cpp +77 -0
  249. data/vendor/msoffice/src/minisample.c +54 -0
  250. data/vendor/msoffice/src/msocdll.cpp +276 -0
  251. data/vendor/msoffice/src/msocsample.c +136 -0
  252. data/vendor/msoffice/src/msoffice-crypt.cpp +219 -0
  253. data/vendor/msoffice/src/proj/attack/attack.vcxproj +88 -0
  254. data/vendor/msoffice/src/proj/main/msoffice-crypt.vcxproj +88 -0
  255. data/vendor/msoffice/src/sha1.cpp +234 -0
  256. data/vendor/msoffice/test/Makefile +20 -0
  257. data/vendor/msoffice/test/cfb_test.cpp +74 -0
  258. data/vendor/msoffice/test/hash_test.cpp +59 -0
  259. data/vendor/msoffice/test/proj/cfb/cfb_test.vcxproj +90 -0
  260. data/vendor/msoffice/test/proj/hash/hash_test.vcxproj +90 -0
  261. data/vendor/msoffice/test/sampl.bat +8 -0
  262. data/vendor/msoffice/test_all.py +46 -0
  263. data/vendor/update +4 -0
  264. metadata +351 -0
@@ -0,0 +1,281 @@
1
+ #pragma once
2
+ /**
3
+ @file
4
+ @brief tiny time class
5
+
6
+ @author MITSUNARI Shigeo(@herumi)
7
+ */
8
+ #include <ctime>
9
+ #include <cybozu/exception.hpp>
10
+ #include <cybozu/atoi.hpp>
11
+ #include <cybozu/itoa.hpp>
12
+ #ifdef _WIN32
13
+ #include <sys/timeb.h>
14
+ #else
15
+ #include <sys/time.h>
16
+ #endif
17
+
18
+ namespace cybozu {
19
+
20
+ /**
21
+ time struct with time_t and msec
22
+ @note time MUST be latesr than 1970/1/1
23
+ */
24
+ class Time {
25
+ static const uint64_t epochBias = 116444736000000000ull;
26
+ std::time_t time_;
27
+ int msec_;
28
+ public:
29
+ explicit Time(std::time_t time = 0, int msec = 0)
30
+ : time_(time)
31
+ , msec_(msec)
32
+ {
33
+ }
34
+ explicit Time(bool doSet)
35
+ {
36
+ if (doSet) setCurrentTime();
37
+ }
38
+ Time& setTime(std::time_t time, int msec = 0)
39
+ {
40
+ time_ = time;
41
+ msec_ = msec;
42
+ return *this;
43
+ }
44
+ /*
45
+ Windows FILETIME is defined as
46
+ struct FILETILME {
47
+ DWORD dwLowDateTime;
48
+ DWORD dwHighDateTime;
49
+ };
50
+ the value represents the number of 100-nanosecond intervals since January 1, 1601 (UTC).
51
+ */
52
+ void setByFILETIME(uint32_t low, uint32_t high)
53
+ {
54
+ const uint64_t fileTime = (((uint64_t(high) << 32) | low) - epochBias) / 10000;
55
+ time_ = fileTime / 1000;
56
+ msec_ = fileTime % 1000;
57
+ }
58
+ /*
59
+ DWORD is defined as unsigned long in windows
60
+ */
61
+ template<class dword>
62
+ void getFILETIME(dword& low, dword& high) const
63
+ {
64
+ const uint64_t fileTime = (time_ * 1000 + msec_) * 10000 + epochBias;
65
+ low = dword(fileTime);
66
+ high = dword(fileTime >> 32);
67
+ }
68
+ explicit Time(const std::string& in)
69
+ {
70
+ fromString(in);
71
+ }
72
+ explicit Time(const char *in)
73
+ {
74
+ fromString(in, in + strlen(in));
75
+ }
76
+ const std::time_t& getTime() const { return time_; }
77
+ int getMsec() const { return msec_; }
78
+ double getTimeSec() const { return time_ + msec_ * 1e-3; }
79
+ void addSec(int sec) { time_ += sec; }
80
+ bool operator<(const Time& rhs) const { return (time_ < rhs.time_) || (time_ == rhs.time_ && msec_ < rhs.msec_); }
81
+ // bool operator<=(const Time& rhs) const { return (*this < rhs) || (*this == rhs); }
82
+ // bool operator>(const Time& rhs) const { return rhs < *this; }
83
+ bool operator==(const Time& rhs) const { return (time_ == rhs.time_) && (msec_ == rhs.msec_); }
84
+ bool operator!=(const Time& rhs) const { return !(*this == rhs); }
85
+ /**
86
+ set time from string such as
87
+ 2009-Jan-23T02:53:44Z
88
+ 2009-Jan-23T02:53:44.078Z
89
+ 2009-01-23T02:53:44Z
90
+ 2009-01-23T02:53:44.078Z
91
+ @note 'T' may be ' '. '-' may be '/'. last char 'Z' is omissible
92
+ */
93
+ void fromString(bool *pb, const std::string& in) { fromString(pb, &in[0], &in[0] + in.size()); }
94
+ void fromString(const std::string& in) { fromString(0, in); }
95
+
96
+ void fromString(bool *pb, const char *begin, const char *end)
97
+ {
98
+ const size_t len = end - begin;
99
+ if (len >= 19) {
100
+ const char *p = begin;
101
+ struct tm tm;
102
+ int num;
103
+ bool b;
104
+ tm.tm_year = getNum(&b, p, 4, 1970, 3000) - 1900;
105
+ if (!b) goto ERR;
106
+ p += 4;
107
+ char sep = *p++;
108
+ if (sep != '-' && sep != '/') goto ERR;
109
+
110
+ p = getMonth(&num, p);
111
+ if (p == 0) goto ERR;
112
+ tm.tm_mon = num;
113
+ if (*p++ != sep) goto ERR;
114
+
115
+ tm.tm_mday = getNum(&b, p, 2, 1, 31);
116
+ if (!b) goto ERR;
117
+ p += 2;
118
+ if (*p != ' ' && *p != 'T') goto ERR;
119
+ p++;
120
+
121
+ tm.tm_hour = getNum(&b, p, 2, 0, 23);
122
+ if (!b) goto ERR;
123
+ p += 2;
124
+ if (*p++ != ':') goto ERR;
125
+
126
+ tm.tm_min = getNum(&b, p, 2, 0, 59);
127
+ if (!b) goto ERR;
128
+ p += 2;
129
+ if (*p++ != ':') goto ERR;
130
+
131
+ tm.tm_sec = getNum(&b, p, 2, 0, 59);
132
+ if (!b) goto ERR;
133
+ p += 2;
134
+
135
+ if (p == end) {
136
+ msec_ = 0;
137
+ } else if (p + 1 == end && *p == 'Z') {
138
+ msec_ = 0;
139
+ p++;
140
+ } else if (*p == '.' && (p + 4 == end || (p + 5 == end && *(p + 4) == 'Z'))) {
141
+ msec_ = getNum(&b, p + 1, 3, 0, 999);
142
+ if (!b) goto ERR;
143
+ // p += 4;
144
+ } else {
145
+ goto ERR;
146
+ }
147
+ #ifdef _WIN32
148
+ time_ = _mkgmtime64(&tm);
149
+ if (time_ == -1) goto ERR;
150
+ #else
151
+ time_ = timegm(&tm);
152
+ #endif
153
+ if (pb) {
154
+ *pb = true;
155
+ }
156
+ return;
157
+ }
158
+ ERR:
159
+ if (pb) {
160
+ *pb = false;
161
+ return;
162
+ }
163
+ throw cybozu::Exception("time::fromString") << std::string(begin, 24);
164
+ }
165
+ void fromString(const char *begin, const char *end) { fromString(0, begin, end); }
166
+
167
+ /**
168
+ get current time with format
169
+ @param out [out] output string
170
+ @param format [in] foramt for strftime and append three digits for msec
171
+ @param appendMsec [in] appemd <mmm>
172
+ @param doClear (append to out if false)
173
+ @note ex. "%Y-%b-%d %H:%M:%S." to get 2009-Jan-23 02:53:44.078
174
+ */
175
+ void toString(std::string& out, const char *format, bool appendMsec = true, bool doClear = true) const
176
+ {
177
+ if (doClear) out.clear();
178
+ char buf[128];
179
+ struct tm tm;
180
+ #ifdef _WIN32
181
+ bool isOK = _gmtime64_s(&tm, &time_) == 0;
182
+ #else
183
+ bool isOK = gmtime_r(&time_, &tm) != 0;
184
+ #endif
185
+ if (!isOK) throw cybozu::Exception("time::toString") << time_;
186
+ #ifdef __GNUC__
187
+ #pragma GCC diagnostic push
188
+ #pragma GCC diagnostic ignored "-Wformat-nonliteral"
189
+ #endif
190
+ if (std::strftime(buf, sizeof(buf), format, &tm) == 0) {
191
+ throw cybozu::Exception("time::toString::too long") << format << time_;
192
+ }
193
+ #ifdef __GNUC__
194
+ #pragma GCC diagnostic pop
195
+ #endif
196
+ out += buf;
197
+ if (appendMsec) {
198
+ out += cybozu::itoaWithZero(msec_, 3);
199
+ }
200
+ }
201
+
202
+ /**
203
+ get current time such as 2009-01-23 02:53:44.078
204
+ @param out [out] sink string
205
+ */
206
+ void toString(std::string& out, bool appendMsec = true, bool doClear = true) const
207
+ {
208
+ const char *format = appendMsec ? "%Y-%m-%d %H:%M:%S." : "%Y-%m-%d %H:%M:%S";
209
+ toString(out, format, appendMsec, doClear);
210
+ }
211
+ std::string toString(bool appendMsec = true) const { std::string out; toString(out, appendMsec); return out; }
212
+ /**
213
+ get current time
214
+ */
215
+ Time& setCurrentTime()
216
+ {
217
+ #ifdef _WIN32
218
+ struct _timeb timeb;
219
+ _ftime_s(&timeb);
220
+ time_ = timeb.time;
221
+ msec_ = timeb.millitm;
222
+ #else
223
+ struct timeval tv;
224
+ gettimeofday(&tv, 0);
225
+ time_ = tv.tv_sec;
226
+ msec_ = tv.tv_usec / 1000;
227
+ #endif
228
+ return *this;
229
+ }
230
+ private:
231
+
232
+ int getNum(bool *b, const char *in, size_t len, int min, int max) const
233
+ {
234
+ int ret = cybozu::atoi(b, in, len);
235
+ if (min <= ret && ret <= max) {
236
+ return ret;
237
+ } else {
238
+ *b = false;
239
+ return 0;
240
+ }
241
+ }
242
+
243
+ /*
244
+ convert month-str to [0, 11]
245
+ @param ret [out] return idx
246
+ @param p [in] month-str
247
+ @retval next pointer or null
248
+ */
249
+ const char *getMonth(int *ret, const char *p) const
250
+ {
251
+ static const char monthTbl[12][4] = {
252
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
253
+ };
254
+
255
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(monthTbl); i++) {
256
+ if (memcmp(p, monthTbl[i], 3) == 0) {
257
+ *ret = (int)i;
258
+ return p + 3;
259
+ }
260
+ }
261
+ bool b;
262
+ *ret = getNum(&b, p, 2, 1, 12) - 1;
263
+ if (b) {
264
+ return p + 2;
265
+ } else {
266
+ return 0;
267
+ }
268
+ }
269
+ };
270
+
271
+ inline std::ostream& operator<<(std::ostream& os, const cybozu::Time& time)
272
+ {
273
+ return os << time.toString();
274
+ }
275
+
276
+ inline double GetCurrentTimeSec()
277
+ {
278
+ return cybozu::Time(true).getTimeSec();
279
+ }
280
+
281
+ } // cybozu
@@ -0,0 +1,115 @@
1
+ #pragma once
2
+ /**
3
+ @file
4
+ @brief thread local strage
5
+
6
+ @author MITSUNARI Shigeo(@herumi)
7
+ @author MITSUNARI Shigeo
8
+ */
9
+ #ifdef _MSC_VER
10
+ #ifndef WIN32_LEAN_AND_MEAN
11
+ #define WIN32_LEAN_AND_MEAN
12
+ #endif
13
+ #include <windows.h>
14
+ #define CYBOZU_TLS __declspec(thread)
15
+ #else
16
+ #include <pthread.h>
17
+ #include <limits.h>
18
+ #define CYBOZU_TLS __thread
19
+ #endif
20
+
21
+ namespace cybozu {
22
+
23
+ namespace tls {
24
+
25
+ #ifdef _WIN32
26
+
27
+ typedef DWORD TlsIndex;
28
+ const TlsIndex invalidTlsIndex = 0xFFFFFFFF;
29
+
30
+ inline TlsIndex Init()
31
+ {
32
+ return ::TlsAlloc();
33
+ }
34
+
35
+ inline void *GetValue(TlsIndex idx)
36
+ {
37
+ return ::TlsGetValue(idx);
38
+ }
39
+
40
+ inline bool SetValue(TlsIndex idx, void *val)
41
+ {
42
+ return ::TlsSetValue(idx, val) != 0;
43
+ }
44
+
45
+ inline bool Term(TlsIndex idx)
46
+ {
47
+ return ::TlsFree(idx) != 0;
48
+ }
49
+
50
+ #else
51
+
52
+ typedef pthread_key_t TlsIndex;
53
+ const TlsIndex invalidTlsIndex = PTHREAD_KEYS_MAX + 1;
54
+
55
+ inline TlsIndex Init()
56
+ {
57
+ pthread_key_t idx;
58
+ if (!::pthread_key_create(&idx, 0)) {
59
+ return idx;
60
+ }
61
+ return invalidTlsIndex;
62
+ }
63
+
64
+ inline void *GetValue(TlsIndex idx)
65
+ {
66
+ return ::pthread_getspecific(idx);
67
+ }
68
+
69
+ inline bool SetValue(TlsIndex idx, void *val)
70
+ {
71
+ return ::pthread_setspecific(idx, val) == 0;
72
+ }
73
+
74
+ inline bool Term(TlsIndex idx)
75
+ {
76
+ return ::pthread_key_delete(idx) == 0;
77
+ }
78
+
79
+ #endif
80
+
81
+ } // cybozu::tls
82
+
83
+ /**
84
+ Tls class
85
+ make Tls instance before creating thread
86
+ */
87
+ class Tls {
88
+ tls::TlsIndex idx_;
89
+ bool isValid() const
90
+ {
91
+ return idx_ != tls::invalidTlsIndex;
92
+ }
93
+ public:
94
+ Tls()
95
+ : idx_(tls::Init())
96
+ {
97
+ }
98
+ bool set(void *p)
99
+ {
100
+ return isValid() && tls::SetValue(idx_, p);
101
+ }
102
+ void *get() const
103
+ {
104
+ return isValid() ? tls::GetValue(idx_) : 0;
105
+ }
106
+ ~Tls()
107
+ {
108
+ if (isValid()) {
109
+ set(0);
110
+ tls::Term(idx_);
111
+ }
112
+ }
113
+ };
114
+
115
+ } // cybozu
@@ -0,0 +1,13 @@
1
+ #pragma once
2
+
3
+ #include <cybozu/inttype.hpp>
4
+
5
+ #ifdef CYBOZU_USE_BOOST
6
+ #include <boost/unordered_map.hpp>
7
+ #elif (CYBOZU_CPP_VERSION >= CYBOZU_CPP_VERSION_CPP11) || (defined __APPLE__)
8
+ #include <unordered_map>
9
+ #elif (CYBOZU_CPP_VERSION == CYBOZU_CPP_VERSION_TR1)
10
+ #include <list>
11
+ #include <tr1/unordered_map>
12
+ #endif
13
+
@@ -0,0 +1,13 @@
1
+ #pragma once
2
+
3
+ #include <cybozu/inttype.hpp>
4
+
5
+ #ifdef CYBOZU_USE_BOOST
6
+ #include <boost/unordered_set.hpp>
7
+ #elif (CYBOZU_CPP_VERSION >= CYBOZU_CPP_VERSION_CPP11) || defined(__APPLE__)
8
+ #include <unordered_set>
9
+ #elif (CYBOZU_CPP_VERSION == CYBOZU_CPP_VERSION_TR1)
10
+ #include <list>
11
+ #include <tr1/unordered_set>
12
+ #endif
13
+