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.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +58 -0
- data/Rakefile +12 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/ext/ooxml_crypt/extconf.rb +18 -0
- data/ext/ooxml_crypt/ooxml_crypt.c +27 -0
- data/ext/ooxml_crypt/ooxml_crypt.h +7 -0
- data/lib/ooxml_crypt/version.rb +5 -0
- data/lib/ooxml_crypt.rb +75 -0
- data/vendor/cybozulib/.github/workflows/main.yml +12 -0
- data/vendor/cybozulib/.gitignore +5 -0
- data/vendor/cybozulib/CMakeLists.txt +6 -0
- data/vendor/cybozulib/COPYRIGHT +27 -0
- data/vendor/cybozulib/Makefile +26 -0
- data/vendor/cybozulib/bin/libeay32.dll +0 -0
- data/vendor/cybozulib/bin/libmecab.dll +0 -0
- data/vendor/cybozulib/bin/ssleay32.dll +0 -0
- data/vendor/cybozulib/common.mk +116 -0
- data/vendor/cybozulib/common.props +25 -0
- data/vendor/cybozulib/cybozulib.sln +286 -0
- data/vendor/cybozulib/debug.props +14 -0
- data/vendor/cybozulib/include/cybozu/array.hpp +197 -0
- data/vendor/cybozulib/include/cybozu/atoi.hpp +238 -0
- data/vendor/cybozulib/include/cybozu/atomic.hpp +146 -0
- data/vendor/cybozulib/include/cybozu/base64.hpp +210 -0
- data/vendor/cybozulib/include/cybozu/benchmark.hpp +212 -0
- data/vendor/cybozulib/include/cybozu/bfd.hpp +105 -0
- data/vendor/cybozulib/include/cybozu/bit_operation.hpp +139 -0
- data/vendor/cybozulib/include/cybozu/bitvector.hpp +358 -0
- data/vendor/cybozulib/include/cybozu/condition_variable.hpp +113 -0
- data/vendor/cybozulib/include/cybozu/condition_variable_cs.hpp +74 -0
- data/vendor/cybozulib/include/cybozu/config.hpp +392 -0
- data/vendor/cybozulib/include/cybozu/critical_section.hpp +60 -0
- data/vendor/cybozulib/include/cybozu/crypto.hpp +321 -0
- data/vendor/cybozulib/include/cybozu/csucvector.hpp +624 -0
- data/vendor/cybozulib/include/cybozu/csv.hpp +294 -0
- data/vendor/cybozulib/include/cybozu/data_type.hpp +27 -0
- data/vendor/cybozulib/include/cybozu/endian.hpp +224 -0
- data/vendor/cybozulib/include/cybozu/env.hpp +63 -0
- data/vendor/cybozulib/include/cybozu/event.hpp +122 -0
- data/vendor/cybozulib/include/cybozu/exception.hpp +253 -0
- data/vendor/cybozulib/include/cybozu/file.hpp +626 -0
- data/vendor/cybozulib/include/cybozu/fmindex.hpp +291 -0
- data/vendor/cybozulib/include/cybozu/format.hpp +93 -0
- data/vendor/cybozulib/include/cybozu/frequency.hpp +264 -0
- data/vendor/cybozulib/include/cybozu/hash.hpp +67 -0
- data/vendor/cybozulib/include/cybozu/inttype.hpp +174 -0
- data/vendor/cybozulib/include/cybozu/itoa.hpp +336 -0
- data/vendor/cybozulib/include/cybozu/json.hpp +120 -0
- data/vendor/cybozulib/include/cybozu/line_stream.hpp +149 -0
- data/vendor/cybozulib/include/cybozu/link_libeay32.hpp +21 -0
- data/vendor/cybozulib/include/cybozu/link_mpir.hpp +18 -0
- data/vendor/cybozulib/include/cybozu/link_ssleay32.hpp +19 -0
- data/vendor/cybozulib/include/cybozu/log.hpp +237 -0
- data/vendor/cybozulib/include/cybozu/minixml.hpp +452 -0
- data/vendor/cybozulib/include/cybozu/mmap.hpp +143 -0
- data/vendor/cybozulib/include/cybozu/mutex.hpp +144 -0
- data/vendor/cybozulib/include/cybozu/nlp/mecab.hpp +96 -0
- data/vendor/cybozulib/include/cybozu/nlp/plsi.hpp +315 -0
- data/vendor/cybozulib/include/cybozu/nlp/random.hpp +74 -0
- data/vendor/cybozulib/include/cybozu/nlp/sparse.hpp +529 -0
- data/vendor/cybozulib/include/cybozu/nlp/svd.hpp +486 -0
- data/vendor/cybozulib/include/cybozu/nlp/tfidf.hpp +226 -0
- data/vendor/cybozulib/include/cybozu/nlp/top_score.hpp +75 -0
- data/vendor/cybozulib/include/cybozu/option.hpp +743 -0
- data/vendor/cybozulib/include/cybozu/parallel.hpp +88 -0
- data/vendor/cybozulib/include/cybozu/pcg.hpp +72 -0
- data/vendor/cybozulib/include/cybozu/process.hpp +324 -0
- data/vendor/cybozulib/include/cybozu/quit_signal_handler.hpp +66 -0
- data/vendor/cybozulib/include/cybozu/random_generator.hpp +144 -0
- data/vendor/cybozulib/include/cybozu/regex.hpp +463 -0
- data/vendor/cybozulib/include/cybozu/select8.hpp +279 -0
- data/vendor/cybozulib/include/cybozu/serializer.hpp +363 -0
- data/vendor/cybozulib/include/cybozu/sha1.hpp +209 -0
- data/vendor/cybozulib/include/cybozu/sha2.hpp +506 -0
- data/vendor/cybozulib/include/cybozu/siphash.hpp +105 -0
- data/vendor/cybozulib/include/cybozu/socket.hpp +785 -0
- data/vendor/cybozulib/include/cybozu/ssl.hpp +203 -0
- data/vendor/cybozulib/include/cybozu/stacktrace.hpp +291 -0
- data/vendor/cybozulib/include/cybozu/stream.hpp +269 -0
- data/vendor/cybozulib/include/cybozu/string.hpp +1746 -0
- data/vendor/cybozulib/include/cybozu/string_operation.hpp +365 -0
- data/vendor/cybozulib/include/cybozu/sucvector.hpp +378 -0
- data/vendor/cybozulib/include/cybozu/test.hpp +373 -0
- data/vendor/cybozulib/include/cybozu/thread.hpp +229 -0
- data/vendor/cybozulib/include/cybozu/time.hpp +281 -0
- data/vendor/cybozulib/include/cybozu/tls.hpp +115 -0
- data/vendor/cybozulib/include/cybozu/unordered_map.hpp +13 -0
- data/vendor/cybozulib/include/cybozu/unordered_set.hpp +13 -0
- data/vendor/cybozulib/include/cybozu/v128.hpp +376 -0
- data/vendor/cybozulib/include/cybozu/wavelet_matrix.hpp +345 -0
- data/vendor/cybozulib/include/cybozu/xorshift.hpp +189 -0
- data/vendor/cybozulib/include/cybozu/zlib.hpp +325 -0
- data/vendor/cybozulib/include/sais.hxx +364 -0
- data/vendor/cybozulib/misc/make_select8tbl.cpp +26 -0
- data/vendor/cybozulib/mk.bat +37 -0
- data/vendor/cybozulib/readme.md +29 -0
- data/vendor/cybozulib/release.props +12 -0
- data/vendor/cybozulib/sample/Makefile +30 -0
- data/vendor/cybozulib/sample/csucvector_smpl.cpp +42 -0
- data/vendor/cybozulib/sample/data/svd/org/test1.S +4 -0
- data/vendor/cybozulib/sample/data/svd/org/test1.U +4 -0
- data/vendor/cybozulib/sample/data/svd/org/test1.V +6 -0
- data/vendor/cybozulib/sample/data/svd/test1 +4 -0
- data/vendor/cybozulib/sample/data/svd/test2 +4 -0
- data/vendor/cybozulib/sample/desymbol.cpp +127 -0
- data/vendor/cybozulib/sample/exception_smpl.cpp +46 -0
- data/vendor/cybozulib/sample/fmindex_smpl.cpp +231 -0
- data/vendor/cybozulib/sample/log_smpl.cpp +19 -0
- data/vendor/cybozulib/sample/mecab_smpl.cpp +37 -0
- data/vendor/cybozulib/sample/option2_smpl.cpp +68 -0
- data/vendor/cybozulib/sample/option_smpl.cpp +42 -0
- data/vendor/cybozulib/sample/plsi_smpl.cpp +207 -0
- data/vendor/cybozulib/sample/proj/exception_smpl.vcproj +184 -0
- data/vendor/cybozulib/sample/proj/mecab_smpl.vcproj +184 -0
- data/vendor/cybozulib/sample/proj/ssl_smpl/ssl_smpl.vcxproj +85 -0
- data/vendor/cybozulib/sample/proj/ssl_smpl.vcproj +347 -0
- data/vendor/cybozulib/sample/proj/stacktrace_smpl/stacktrace_smpl.vcxproj +85 -0
- data/vendor/cybozulib/sample/proj/svd_smpl.vcproj +184 -0
- data/vendor/cybozulib/sample/quit_signal_handler.cpp +30 -0
- data/vendor/cybozulib/sample/serializer_smpl.cpp +196 -0
- data/vendor/cybozulib/sample/socket_smpl.cpp +82 -0
- data/vendor/cybozulib/sample/ssl_smpl.cpp +39 -0
- data/vendor/cybozulib/sample/stacktrace_smpl.cpp +52 -0
- data/vendor/cybozulib/sample/svd_bench_smpl.cpp +143 -0
- data/vendor/cybozulib/sample/svd_smpl.cpp +94 -0
- data/vendor/cybozulib/sample/wm_bench_smpl.cpp +182 -0
- data/vendor/cybozulib/sample/zlib_smpl.cpp +41 -0
- data/vendor/cybozulib/src/Makefile +8 -0
- data/vendor/cybozulib/src/base/Makefile +19 -0
- data/vendor/cybozulib/test/Makefile +12 -0
- data/vendor/cybozulib/test/base/Makefile +37 -0
- data/vendor/cybozulib/test/base/array_test.cpp +173 -0
- data/vendor/cybozulib/test/base/atoi_test.cpp +774 -0
- data/vendor/cybozulib/test/base/atomic_test.cpp +49 -0
- data/vendor/cybozulib/test/base/base64_test.cpp +113 -0
- data/vendor/cybozulib/test/base/bit_operation_test.cpp +134 -0
- data/vendor/cybozulib/test/base/bitvector_test.cpp +204 -0
- data/vendor/cybozulib/test/base/condition_variable_cs_test.cpp +92 -0
- data/vendor/cybozulib/test/base/condition_variable_test.cpp +88 -0
- data/vendor/cybozulib/test/base/config_test.cpp +236 -0
- data/vendor/cybozulib/test/base/crypto_test.cpp +122 -0
- data/vendor/cybozulib/test/base/csucvector_test.cpp +63 -0
- data/vendor/cybozulib/test/base/csv_test.cpp +182 -0
- data/vendor/cybozulib/test/base/data/a.xml +26 -0
- data/vendor/cybozulib/test/base/endian_test.cpp +56 -0
- data/vendor/cybozulib/test/base/env_test.cpp +22 -0
- data/vendor/cybozulib/test/base/event_test.cpp +41 -0
- data/vendor/cybozulib/test/base/file_test.cpp +233 -0
- data/vendor/cybozulib/test/base/fmindex_test.cpp +118 -0
- data/vendor/cybozulib/test/base/format_test.cpp +12 -0
- data/vendor/cybozulib/test/base/frequency_test.cpp +104 -0
- data/vendor/cybozulib/test/base/itoa_test.cpp +522 -0
- data/vendor/cybozulib/test/base/line_stream_test.cpp +208 -0
- data/vendor/cybozulib/test/base/mecab_test.cpp +41 -0
- data/vendor/cybozulib/test/base/minixml_test.cpp +103 -0
- data/vendor/cybozulib/test/base/mmap_test.cpp +15 -0
- data/vendor/cybozulib/test/base/option_test.cpp +487 -0
- data/vendor/cybozulib/test/base/parallel_test.cpp +48 -0
- data/vendor/cybozulib/test/base/proj/array_test/array_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/atoi_test/atoi_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/atomic_test/atomic_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/base64_test/base64_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/condition_variable_cs_test/condition_variable_cs_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/condition_variable_test/condition_variable_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/config_test/config_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/csv_test/csv_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/endian_test/endian_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/env_test/env_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/event_test/event_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/file_test/file_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/itoa_test/itoa_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/mecab_test/mecab_test.vcxproj +88 -0
- data/vendor/cybozulib/test/base/proj/minixml_test/minixml_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/mmap_test/mmap_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/serializer_test/serializer_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/sha1_test/sha1_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/stream_test/stream_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/string_operation_test/string_operation_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/string_test/string_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/thread_test/thread_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/time_test/time_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/tls_test/tls_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/proj/zlib_test/zlib_test.vcxproj +86 -0
- data/vendor/cybozulib/test/base/random_generator_test.cpp +28 -0
- data/vendor/cybozulib/test/base/regex_test.cpp +74 -0
- data/vendor/cybozulib/test/base/serializer_test.cpp +483 -0
- data/vendor/cybozulib/test/base/sha1_test.cpp +61 -0
- data/vendor/cybozulib/test/base/sha2_test.cpp +191 -0
- data/vendor/cybozulib/test/base/siphash_test.cpp +33 -0
- data/vendor/cybozulib/test/base/socket_test.cpp +76 -0
- data/vendor/cybozulib/test/base/stream_test.cpp +101 -0
- data/vendor/cybozulib/test/base/string_operation_test.cpp +340 -0
- data/vendor/cybozulib/test/base/string_test.cpp +1705 -0
- data/vendor/cybozulib/test/base/sucvector_test.cpp +312 -0
- data/vendor/cybozulib/test/base/thread_test.cpp +62 -0
- data/vendor/cybozulib/test/base/time_test.cpp +164 -0
- data/vendor/cybozulib/test/base/tls_test.cpp +50 -0
- data/vendor/cybozulib/test/base/wavelet_matrix_test.cpp +145 -0
- data/vendor/cybozulib/test/base/zlib_test.cpp +371 -0
- data/vendor/cybozulib/test/nlp/Makefile +27 -0
- data/vendor/cybozulib/test/nlp/proj/random_test.vcproj +184 -0
- data/vendor/cybozulib/test/nlp/proj/sparse_test.vcproj +184 -0
- data/vendor/cybozulib/test/nlp/proj/svd_test.vcproj +184 -0
- data/vendor/cybozulib/test/nlp/random_test.cpp +62 -0
- data/vendor/cybozulib/test/nlp/sparse_test.cpp +347 -0
- data/vendor/cybozulib/test/nlp/svd_test.cpp +234 -0
- data/vendor/cybozulib/test/nlp/top_score_test.cpp +40 -0
- data/vendor/cybozulib/tool/create_vcproj.py +186 -0
- data/vendor/cybozulib/tool/vcproj_tmpl.py +185 -0
- data/vendor/msoffice/COPYRIGHT +27 -0
- data/vendor/msoffice/Makefile +29 -0
- data/vendor/msoffice/bin/64/msoc.dll +0 -0
- data/vendor/msoffice/bin/64/msocsample.exe +0 -0
- data/vendor/msoffice/bin/64/msoffice-crypt.exe +0 -0
- data/vendor/msoffice/bin/msoc.dll +0 -0
- data/vendor/msoffice/bin/msocsample.exe +0 -0
- data/vendor/msoffice/bin/msoffice-crypt.exe +0 -0
- data/vendor/msoffice/common.mk +71 -0
- data/vendor/msoffice/common.props +26 -0
- data/vendor/msoffice/debug.props +14 -0
- data/vendor/msoffice/include/attack.hpp +211 -0
- data/vendor/msoffice/include/cfb.hpp +777 -0
- data/vendor/msoffice/include/crypto_util.hpp +450 -0
- data/vendor/msoffice/include/custom_sha1.hpp +342 -0
- data/vendor/msoffice/include/decode.hpp +240 -0
- data/vendor/msoffice/include/encode.hpp +221 -0
- data/vendor/msoffice/include/make_dataspace.hpp +316 -0
- data/vendor/msoffice/include/msoc.h +129 -0
- data/vendor/msoffice/include/resource.hpp +7 -0
- data/vendor/msoffice/include/standard_encryption.hpp +145 -0
- data/vendor/msoffice/include/uint32vec.hpp +179 -0
- data/vendor/msoffice/include/util.hpp +212 -0
- data/vendor/msoffice/lib/.emptydir +0 -0
- data/vendor/msoffice/misc/decrypt-xls.vbs +46 -0
- data/vendor/msoffice/mk.bat +1 -0
- data/vendor/msoffice/mkdll.bat +3 -0
- data/vendor/msoffice/msoc.def +13 -0
- data/vendor/msoffice/msocsample.py +178 -0
- data/vendor/msoffice/msoffice12.sln +31 -0
- data/vendor/msoffice/readme.md +110 -0
- data/vendor/msoffice/release.props +28 -0
- data/vendor/msoffice/src/Makefile +19 -0
- data/vendor/msoffice/src/attack.cpp +124 -0
- data/vendor/msoffice/src/cfb_test.cpp +77 -0
- data/vendor/msoffice/src/minisample.c +54 -0
- data/vendor/msoffice/src/msocdll.cpp +276 -0
- data/vendor/msoffice/src/msocsample.c +136 -0
- data/vendor/msoffice/src/msoffice-crypt.cpp +219 -0
- data/vendor/msoffice/src/proj/attack/attack.vcxproj +88 -0
- data/vendor/msoffice/src/proj/main/msoffice-crypt.vcxproj +88 -0
- data/vendor/msoffice/src/sha1.cpp +234 -0
- data/vendor/msoffice/test/Makefile +20 -0
- data/vendor/msoffice/test/cfb_test.cpp +74 -0
- data/vendor/msoffice/test/hash_test.cpp +59 -0
- data/vendor/msoffice/test/proj/cfb/cfb_test.vcxproj +90 -0
- data/vendor/msoffice/test/proj/hash/hash_test.vcxproj +90 -0
- data/vendor/msoffice/test/sampl.bat +8 -0
- data/vendor/msoffice/test_all.py +46 -0
- data/vendor/update +4 -0
- 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
|
+
|