webruby 0.2.2 → 0.2.4
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 +4 -4
- data/lib/webruby/config.rb +4 -9
- data/lib/webruby/rake/files.rake +2 -2
- data/modules/emscripten/AUTHORS +9 -1
- data/modules/emscripten/CONTRIBUTING.markdown +5 -0
- data/modules/emscripten/ChangeLog +435 -0
- data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
- data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
- data/modules/emscripten/em++ +0 -2
- data/modules/emscripten/emcc +92 -32
- data/modules/emscripten/emlink.py +16 -13
- data/modules/emscripten/emmake +1 -1
- data/modules/emscripten/emrun +918 -0
- data/modules/emscripten/emrun.bat +2 -0
- data/modules/emscripten/emscripten.py +545 -20
- data/modules/emscripten/src/analyzer.js +6 -1
- data/modules/emscripten/src/compiler.js +25 -16
- data/modules/emscripten/src/emrun_postjs.js +20 -0
- data/modules/emscripten/{tests → src}/hello_world.js +0 -0
- data/modules/emscripten/src/intertyper.js +45 -16
- data/modules/emscripten/src/jsifier.js +78 -48
- data/modules/emscripten/src/library.js +381 -96
- data/modules/emscripten/src/library_browser.js +50 -53
- data/modules/emscripten/src/library_egl.js +66 -24
- data/modules/emscripten/src/library_fs.js +122 -90
- data/modules/emscripten/src/library_gl.js +739 -353
- data/modules/emscripten/src/library_glfw.js +9 -3
- data/modules/emscripten/src/library_glut.js +10 -5
- data/modules/emscripten/src/library_idbfs.js +14 -14
- data/modules/emscripten/src/library_memfs.js +65 -41
- data/modules/emscripten/src/library_nodefs.js +61 -9
- data/modules/emscripten/src/library_openal.js +4 -4
- data/modules/emscripten/src/library_path.js +9 -13
- data/modules/emscripten/src/library_sdl.js +301 -64
- data/modules/emscripten/src/library_sockfs.js +7 -5
- data/modules/emscripten/src/modules.js +62 -22
- data/modules/emscripten/src/parseTools.js +135 -102
- data/modules/emscripten/src/postamble.js +3 -4
- data/modules/emscripten/src/preamble.js +49 -29
- data/modules/emscripten/src/proxyClient.js +1 -1
- data/modules/emscripten/src/proxyWorker.js +10 -10
- data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
- data/modules/emscripten/src/runtime.js +32 -8
- data/modules/emscripten/src/settings.js +25 -8
- data/modules/emscripten/src/shell.html +6 -3
- data/modules/emscripten/src/shell.js +13 -11
- data/modules/emscripten/src/simd.js +602 -432
- data/modules/emscripten/src/struct_info.json +22 -2
- data/modules/emscripten/src/utility.js +32 -17
- data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
- data/modules/emscripten/system/include/compat/ctype.h +17 -0
- data/modules/emscripten/system/include/compat/wchar.h +23 -0
- data/modules/emscripten/system/include/compat/wctype.h +23 -0
- data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
- data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
- data/modules/emscripten/system/include/emscripten/vector.h +29 -1
- data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
- data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
- data/modules/emscripten/system/include/libcxx/__config +95 -17
- data/modules/emscripten/system/include/libcxx/__debug +25 -4
- data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
- data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
- data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
- data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
- data/modules/emscripten/system/include/libcxx/__locale +21 -19
- data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
- data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
- data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
- data/modules/emscripten/system/include/libcxx/__tree +35 -26
- data/modules/emscripten/system/include/libcxx/__tuple +15 -15
- data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
- data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
- data/modules/emscripten/system/include/libcxx/algorithm +121 -110
- data/modules/emscripten/system/include/libcxx/array +15 -15
- data/modules/emscripten/system/include/libcxx/bitset +4 -4
- data/modules/emscripten/system/include/libcxx/chrono +51 -17
- data/modules/emscripten/system/include/libcxx/cmath +25 -23
- data/modules/emscripten/system/include/libcxx/codecvt +21 -18
- data/modules/emscripten/system/include/libcxx/complex +48 -7
- data/modules/emscripten/system/include/libcxx/cstddef +1 -1
- data/modules/emscripten/system/include/libcxx/cstdio +8 -1
- data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
- data/modules/emscripten/system/include/libcxx/cwchar +1 -1
- data/modules/emscripten/system/include/libcxx/deque +26 -12
- data/modules/emscripten/system/include/libcxx/dynarray +311 -0
- data/modules/emscripten/system/include/libcxx/exception +4 -4
- data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
- data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
- data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
- data/modules/emscripten/system/include/libcxx/forward_list +33 -7
- data/modules/emscripten/system/include/libcxx/fstream +4 -4
- data/modules/emscripten/system/include/libcxx/functional +200 -170
- data/modules/emscripten/system/include/libcxx/future +83 -39
- data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
- data/modules/emscripten/system/include/libcxx/iomanip +147 -0
- data/modules/emscripten/system/include/libcxx/ios +24 -16
- data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
- data/modules/emscripten/system/include/libcxx/istream +13 -8
- data/modules/emscripten/system/include/libcxx/iterator +108 -417
- data/modules/emscripten/system/include/libcxx/limits +8 -4
- data/modules/emscripten/system/include/libcxx/list +28 -8
- data/modules/emscripten/system/include/libcxx/locale +153 -390
- data/modules/emscripten/system/include/libcxx/map +280 -100
- data/modules/emscripten/system/include/libcxx/memory +49 -97
- data/modules/emscripten/system/include/libcxx/mutex +2 -2
- data/modules/emscripten/system/include/libcxx/new +43 -14
- data/modules/emscripten/system/include/libcxx/numeric +2 -2
- data/modules/emscripten/system/include/libcxx/optional +697 -0
- data/modules/emscripten/system/include/libcxx/ostream +17 -8
- data/modules/emscripten/system/include/libcxx/queue +5 -5
- data/modules/emscripten/system/include/libcxx/random +53 -51
- data/modules/emscripten/system/include/libcxx/ratio +11 -11
- data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/include/libcxx/regex +23 -20
- data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
- data/modules/emscripten/system/include/libcxx/set +166 -2
- data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
- data/modules/emscripten/system/include/libcxx/sstream +4 -4
- data/modules/emscripten/system/include/libcxx/stack +3 -3
- data/modules/emscripten/system/include/libcxx/streambuf +5 -5
- data/modules/emscripten/system/include/libcxx/string +372 -324
- data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
- data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
- data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
- data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
- data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
- data/modules/emscripten/system/include/libcxx/system_error +14 -8
- data/modules/emscripten/system/include/libcxx/thread +7 -8
- data/modules/emscripten/system/include/libcxx/tuple +29 -88
- data/modules/emscripten/system/include/libcxx/type_traits +253 -209
- data/modules/emscripten/system/include/libcxx/typeindex +3 -3
- data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
- data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
- data/modules/emscripten/system/include/libcxx/utility +20 -20
- data/modules/emscripten/system/include/libcxx/valarray +23 -23
- data/modules/emscripten/system/include/libcxx/vector +114 -91
- data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
- data/modules/emscripten/system/lib/libcextra.symbols +7 -0
- data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
- data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
- data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
- data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
- data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
- data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
- data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
- data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
- data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
- data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
- data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
- data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
- data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
- data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
- data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
- data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
- data/modules/emscripten/system/lib/libcxx/symbols +187 -168
- data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
- data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
- data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
- data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
- data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
- data/modules/emscripten/tools/cache.py +5 -7
- data/modules/emscripten/tools/cache.pyc +0 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
- data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
- data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
- data/modules/emscripten/tools/file_packager.py +93 -50
- data/modules/emscripten/tools/js-optimizer.js +98 -48
- data/modules/emscripten/tools/js_optimizer.py +4 -4
- data/modules/emscripten/tools/js_optimizer.pyc +0 -0
- data/modules/emscripten/tools/jsrun.py +1 -1
- data/modules/emscripten/tools/jsrun.pyc +0 -0
- data/modules/emscripten/tools/response_file.py +6 -0
- data/modules/emscripten/tools/response_file.pyc +0 -0
- data/modules/emscripten/tools/settings_template_readonly.py +2 -0
- data/modules/emscripten/tools/shared.py +88 -34
- data/modules/emscripten/tools/shared.pyc +0 -0
- data/modules/emscripten/tools/split.py +21 -13
- data/modules/mruby/build_config.rb +7 -1
- data/modules/mruby/doc/compile/README.md +5 -9
- data/modules/mruby/include/mrbconf.h +5 -2
- data/modules/mruby/include/mruby/array.h +1 -0
- data/modules/mruby/include/mruby/compile.h +2 -4
- data/modules/mruby/include/mruby/dump.h +7 -16
- data/modules/mruby/include/mruby/hash.h +1 -1
- data/modules/mruby/include/mruby/irep.h +14 -2
- data/modules/mruby/include/mruby/khash.h +8 -7
- data/modules/mruby/include/mruby/string.h +1 -0
- data/modules/mruby/include/mruby/value.h +5 -2
- data/modules/mruby/include/mruby.h +12 -13
- data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
- data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
- data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
- data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
- data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
- data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
- data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
- data/modules/mruby/mrblib/numeric.rb +99 -33
- data/modules/mruby/src/array.c +11 -4
- data/modules/mruby/src/backtrace.c +2 -2
- data/modules/mruby/src/class.c +49 -30
- data/modules/mruby/src/codegen.c +131 -79
- data/modules/mruby/src/debug.c +1 -1
- data/modules/mruby/src/dump.c +213 -163
- data/modules/mruby/src/error.c +17 -17
- data/modules/mruby/src/error.h +1 -1
- data/modules/mruby/src/etc.c +10 -0
- data/modules/mruby/src/gc.c +35 -17
- data/modules/mruby/src/hash.c +5 -5
- data/modules/mruby/src/kernel.c +36 -14
- data/modules/mruby/src/load.c +238 -296
- data/modules/mruby/src/numeric.c +18 -98
- data/modules/mruby/src/object.c +3 -5
- data/modules/mruby/src/parse.y +63 -56
- data/modules/mruby/src/proc.c +8 -5
- data/modules/mruby/src/re.h +0 -1
- data/modules/mruby/src/state.c +65 -27
- data/modules/mruby/src/string.c +3 -31
- data/modules/mruby/src/symbol.c +3 -3
- data/modules/mruby/src/variable.c +12 -5
- data/modules/mruby/src/vm.c +90 -72
- data/modules/mruby/tasks/mruby_build.rake +10 -1
- data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
- data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
- data/modules/mruby/test/driver.c +3 -3
- data/modules/mruby/test/t/array.rb +5 -5
- data/modules/mruby/test/t/class.rb +14 -1
- data/modules/mruby/test/t/kernel.rb +4 -0
- data/modules/mruby/test/t/module.rb +4 -4
- data/modules/mruby/test/t/nameerror.rb +1 -1
- data/modules/mruby/tools/mrbc/mrbc.c +23 -17
- data/modules/mruby/travis_config.rb +10 -1
- metadata +28 -5
- data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
@@ -0,0 +1,419 @@
|
|
1
|
+
// -*- C++ -*-
|
2
|
+
//===------------------------ shared_mutex --------------------------------===//
|
3
|
+
//
|
4
|
+
// The LLVM Compiler Infrastructure
|
5
|
+
//
|
6
|
+
// This file is dual licensed under the MIT and the University of Illinois Open
|
7
|
+
// Source Licenses. See LICENSE.TXT for details.
|
8
|
+
//
|
9
|
+
//===----------------------------------------------------------------------===//
|
10
|
+
|
11
|
+
#ifndef _LIBCPP_SHARED_MUTEX
|
12
|
+
#define _LIBCPP_SHARED_MUTEX
|
13
|
+
|
14
|
+
/*
|
15
|
+
shared_mutex synopsis
|
16
|
+
|
17
|
+
// C++1y
|
18
|
+
|
19
|
+
namespace std
|
20
|
+
{
|
21
|
+
|
22
|
+
class shared_mutex
|
23
|
+
{
|
24
|
+
public:
|
25
|
+
shared_mutex();
|
26
|
+
~shared_mutex();
|
27
|
+
|
28
|
+
shared_mutex(const shared_mutex&) = delete;
|
29
|
+
shared_mutex& operator=(const shared_mutex&) = delete;
|
30
|
+
|
31
|
+
// Exclusive ownership
|
32
|
+
void lock(); // blocking
|
33
|
+
bool try_lock();
|
34
|
+
template <class Rep, class Period>
|
35
|
+
bool try_lock_for(const chrono::duration<Rep, Period>& rel_time);
|
36
|
+
template <class Clock, class Duration>
|
37
|
+
bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time);
|
38
|
+
void unlock();
|
39
|
+
|
40
|
+
// Shared ownership
|
41
|
+
void lock_shared(); // blocking
|
42
|
+
bool try_lock_shared();
|
43
|
+
template <class Rep, class Period>
|
44
|
+
bool
|
45
|
+
try_lock_shared_for(const chrono::duration<Rep, Period>& rel_time);
|
46
|
+
template <class Clock, class Duration>
|
47
|
+
bool
|
48
|
+
try_lock_shared_until(const chrono::time_point<Clock, Duration>& abs_time);
|
49
|
+
void unlock_shared();
|
50
|
+
};
|
51
|
+
|
52
|
+
template <class Mutex>
|
53
|
+
class shared_lock
|
54
|
+
{
|
55
|
+
public:
|
56
|
+
typedef Mutex mutex_type;
|
57
|
+
|
58
|
+
// Shared locking
|
59
|
+
shared_lock() noexcept;
|
60
|
+
explicit shared_lock(mutex_type& m); // blocking
|
61
|
+
shared_lock(mutex_type& m, defer_lock_t) noexcept;
|
62
|
+
shared_lock(mutex_type& m, try_to_lock_t);
|
63
|
+
shared_lock(mutex_type& m, adopt_lock_t);
|
64
|
+
template <class Clock, class Duration>
|
65
|
+
shared_lock(mutex_type& m,
|
66
|
+
const chrono::time_point<Clock, Duration>& abs_time);
|
67
|
+
template <class Rep, class Period>
|
68
|
+
shared_lock(mutex_type& m,
|
69
|
+
const chrono::duration<Rep, Period>& rel_time);
|
70
|
+
~shared_lock();
|
71
|
+
|
72
|
+
shared_lock(shared_lock const&) = delete;
|
73
|
+
shared_lock& operator=(shared_lock const&) = delete;
|
74
|
+
|
75
|
+
shared_lock(shared_lock&& u) noexcept;
|
76
|
+
shared_lock& operator=(shared_lock&& u) noexcept;
|
77
|
+
|
78
|
+
void lock(); // blocking
|
79
|
+
bool try_lock();
|
80
|
+
template <class Rep, class Period>
|
81
|
+
bool try_lock_for(const chrono::duration<Rep, Period>& rel_time);
|
82
|
+
template <class Clock, class Duration>
|
83
|
+
bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time);
|
84
|
+
void unlock();
|
85
|
+
|
86
|
+
// Setters
|
87
|
+
void swap(shared_lock& u) noexcept;
|
88
|
+
mutex_type* release() noexcept;
|
89
|
+
|
90
|
+
// Getters
|
91
|
+
bool owns_lock() const noexcept;
|
92
|
+
explicit operator bool () const noexcept;
|
93
|
+
mutex_type* mutex() const noexcept;
|
94
|
+
};
|
95
|
+
|
96
|
+
template <class Mutex>
|
97
|
+
void swap(shared_lock<Mutex>& x, shared_lock<Mutex>& y) noexcept;
|
98
|
+
|
99
|
+
} // std
|
100
|
+
|
101
|
+
*/
|
102
|
+
|
103
|
+
#include <__config>
|
104
|
+
|
105
|
+
#if _LIBCPP_STD_VER > 11 || defined(_LIBCPP_BUILDING_SHARED_MUTEX)
|
106
|
+
|
107
|
+
#include <__mutex_base>
|
108
|
+
|
109
|
+
#include <__undef_min_max>
|
110
|
+
|
111
|
+
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
112
|
+
#pragma GCC system_header
|
113
|
+
#endif
|
114
|
+
|
115
|
+
_LIBCPP_BEGIN_NAMESPACE_STD
|
116
|
+
|
117
|
+
class _LIBCPP_TYPE_VIS shared_mutex
|
118
|
+
{
|
119
|
+
mutex __mut_;
|
120
|
+
condition_variable __gate1_;
|
121
|
+
condition_variable __gate2_;
|
122
|
+
unsigned __state_;
|
123
|
+
|
124
|
+
static const unsigned __write_entered_ = 1U << (sizeof(unsigned)*__CHAR_BIT__ - 1);
|
125
|
+
static const unsigned __n_readers_ = ~__write_entered_;
|
126
|
+
public:
|
127
|
+
shared_mutex();
|
128
|
+
_LIBCPP_INLINE_VISIBILITY ~shared_mutex() = default;
|
129
|
+
|
130
|
+
shared_mutex(const shared_mutex&) = delete;
|
131
|
+
shared_mutex& operator=(const shared_mutex&) = delete;
|
132
|
+
|
133
|
+
// Exclusive ownership
|
134
|
+
void lock();
|
135
|
+
bool try_lock();
|
136
|
+
template <class _Rep, class _Period>
|
137
|
+
_LIBCPP_INLINE_VISIBILITY
|
138
|
+
bool
|
139
|
+
try_lock_for(const chrono::duration<_Rep, _Period>& __rel_time)
|
140
|
+
{
|
141
|
+
return try_lock_until(chrono::steady_clock::now() + __rel_time);
|
142
|
+
}
|
143
|
+
template <class _Clock, class _Duration>
|
144
|
+
bool
|
145
|
+
try_lock_until(const chrono::time_point<_Clock, _Duration>& __abs_time);
|
146
|
+
void unlock();
|
147
|
+
|
148
|
+
// Shared ownership
|
149
|
+
void lock_shared();
|
150
|
+
bool try_lock_shared();
|
151
|
+
template <class _Rep, class _Period>
|
152
|
+
_LIBCPP_INLINE_VISIBILITY
|
153
|
+
bool
|
154
|
+
try_lock_shared_for(const chrono::duration<_Rep, _Period>& __rel_time)
|
155
|
+
{
|
156
|
+
return try_lock_shared_until(chrono::steady_clock::now() + __rel_time);
|
157
|
+
}
|
158
|
+
template <class _Clock, class _Duration>
|
159
|
+
bool
|
160
|
+
try_lock_shared_until(const chrono::time_point<_Clock, _Duration>& __abs_time);
|
161
|
+
void unlock_shared();
|
162
|
+
};
|
163
|
+
|
164
|
+
template <class _Clock, class _Duration>
|
165
|
+
bool
|
166
|
+
shared_mutex::try_lock_until(
|
167
|
+
const chrono::time_point<_Clock, _Duration>& __abs_time)
|
168
|
+
{
|
169
|
+
unique_lock<mutex> __lk(__mut_);
|
170
|
+
if (__state_ & __write_entered_)
|
171
|
+
{
|
172
|
+
while (true)
|
173
|
+
{
|
174
|
+
cv_status __status = __gate1_.wait_until(__lk, __abs_time);
|
175
|
+
if ((__state_ & __write_entered_) == 0)
|
176
|
+
break;
|
177
|
+
if (__status == cv_status::timeout)
|
178
|
+
return false;
|
179
|
+
}
|
180
|
+
}
|
181
|
+
__state_ |= __write_entered_;
|
182
|
+
if (__state_ & __n_readers_)
|
183
|
+
{
|
184
|
+
while (true)
|
185
|
+
{
|
186
|
+
cv_status __status = __gate2_.wait_until(__lk, __abs_time);
|
187
|
+
if ((__state_ & __n_readers_) == 0)
|
188
|
+
break;
|
189
|
+
if (__status == cv_status::timeout)
|
190
|
+
{
|
191
|
+
__state_ &= ~__write_entered_;
|
192
|
+
return false;
|
193
|
+
}
|
194
|
+
}
|
195
|
+
}
|
196
|
+
return true;
|
197
|
+
}
|
198
|
+
|
199
|
+
template <class _Clock, class _Duration>
|
200
|
+
bool
|
201
|
+
shared_mutex::try_lock_shared_until(
|
202
|
+
const chrono::time_point<_Clock, _Duration>& __abs_time)
|
203
|
+
{
|
204
|
+
unique_lock<mutex> __lk(__mut_);
|
205
|
+
if ((__state_ & __write_entered_) || (__state_ & __n_readers_) == __n_readers_)
|
206
|
+
{
|
207
|
+
while (true)
|
208
|
+
{
|
209
|
+
cv_status status = __gate1_.wait_until(__lk, __abs_time);
|
210
|
+
if ((__state_ & __write_entered_) == 0 &&
|
211
|
+
(__state_ & __n_readers_) < __n_readers_)
|
212
|
+
break;
|
213
|
+
if (status == cv_status::timeout)
|
214
|
+
return false;
|
215
|
+
}
|
216
|
+
}
|
217
|
+
unsigned __num_readers = (__state_ & __n_readers_) + 1;
|
218
|
+
__state_ &= ~__n_readers_;
|
219
|
+
__state_ |= __num_readers;
|
220
|
+
return true;
|
221
|
+
}
|
222
|
+
|
223
|
+
template <class _Mutex>
|
224
|
+
class shared_lock
|
225
|
+
{
|
226
|
+
public:
|
227
|
+
typedef _Mutex mutex_type;
|
228
|
+
|
229
|
+
private:
|
230
|
+
mutex_type* __m_;
|
231
|
+
bool __owns_;
|
232
|
+
|
233
|
+
public:
|
234
|
+
_LIBCPP_INLINE_VISIBILITY
|
235
|
+
shared_lock() noexcept
|
236
|
+
: __m_(nullptr),
|
237
|
+
__owns_(false)
|
238
|
+
{}
|
239
|
+
|
240
|
+
_LIBCPP_INLINE_VISIBILITY
|
241
|
+
explicit shared_lock(mutex_type& __m)
|
242
|
+
: __m_(&__m),
|
243
|
+
__owns_(true)
|
244
|
+
{__m_->lock_shared();}
|
245
|
+
|
246
|
+
_LIBCPP_INLINE_VISIBILITY
|
247
|
+
shared_lock(mutex_type& __m, defer_lock_t) noexcept
|
248
|
+
: __m_(&__m),
|
249
|
+
__owns_(false)
|
250
|
+
{}
|
251
|
+
|
252
|
+
_LIBCPP_INLINE_VISIBILITY
|
253
|
+
shared_lock(mutex_type& __m, try_to_lock_t)
|
254
|
+
: __m_(&__m),
|
255
|
+
__owns_(__m.try_lock_shared())
|
256
|
+
{}
|
257
|
+
|
258
|
+
_LIBCPP_INLINE_VISIBILITY
|
259
|
+
shared_lock(mutex_type& __m, adopt_lock_t)
|
260
|
+
: __m_(&__m),
|
261
|
+
__owns_(true)
|
262
|
+
{}
|
263
|
+
|
264
|
+
template <class _Clock, class _Duration>
|
265
|
+
_LIBCPP_INLINE_VISIBILITY
|
266
|
+
shared_lock(mutex_type& __m,
|
267
|
+
const chrono::time_point<_Clock, _Duration>& __abs_time)
|
268
|
+
: __m_(&__m),
|
269
|
+
__owns_(__m.try_lock_shared_until(__abs_time))
|
270
|
+
{}
|
271
|
+
|
272
|
+
template <class _Rep, class _Period>
|
273
|
+
_LIBCPP_INLINE_VISIBILITY
|
274
|
+
shared_lock(mutex_type& __m,
|
275
|
+
const chrono::duration<_Rep, _Period>& __rel_time)
|
276
|
+
: __m_(&__m),
|
277
|
+
__owns_(__m.try_lock_shared_for(__rel_time))
|
278
|
+
{}
|
279
|
+
|
280
|
+
_LIBCPP_INLINE_VISIBILITY
|
281
|
+
~shared_lock()
|
282
|
+
{
|
283
|
+
if (__owns_)
|
284
|
+
__m_->unlock_shared();
|
285
|
+
}
|
286
|
+
|
287
|
+
shared_lock(shared_lock const&) = delete;
|
288
|
+
shared_lock& operator=(shared_lock const&) = delete;
|
289
|
+
|
290
|
+
_LIBCPP_INLINE_VISIBILITY
|
291
|
+
shared_lock(shared_lock&& __u) noexcept
|
292
|
+
: __m_(__u.__m_),
|
293
|
+
__owns_(__u.__owns_)
|
294
|
+
{
|
295
|
+
__u.__m_ = nullptr;
|
296
|
+
__u.__owns_ = false;
|
297
|
+
}
|
298
|
+
|
299
|
+
_LIBCPP_INLINE_VISIBILITY
|
300
|
+
shared_lock& operator=(shared_lock&& __u) noexcept
|
301
|
+
{
|
302
|
+
if (__owns_)
|
303
|
+
__m_->unlock_shared();
|
304
|
+
__m_ = nullptr;
|
305
|
+
__owns_ = false;
|
306
|
+
__m_ = __u.__m_;
|
307
|
+
__owns_ = __u.__owns_;
|
308
|
+
__u.__m_ = nullptr;
|
309
|
+
__u.__owns_ = false;
|
310
|
+
return *this;
|
311
|
+
}
|
312
|
+
|
313
|
+
void lock();
|
314
|
+
bool try_lock();
|
315
|
+
template <class Rep, class Period>
|
316
|
+
bool try_lock_for(const chrono::duration<Rep, Period>& rel_time);
|
317
|
+
template <class Clock, class Duration>
|
318
|
+
bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time);
|
319
|
+
void unlock();
|
320
|
+
|
321
|
+
// Setters
|
322
|
+
_LIBCPP_INLINE_VISIBILITY
|
323
|
+
void swap(shared_lock& __u) noexcept
|
324
|
+
{
|
325
|
+
_VSTD::swap(__m_, __u.__m_);
|
326
|
+
_VSTD::swap(__owns_, __u.__owns_);
|
327
|
+
}
|
328
|
+
|
329
|
+
_LIBCPP_INLINE_VISIBILITY
|
330
|
+
mutex_type* release() noexcept
|
331
|
+
{
|
332
|
+
mutex_type* __m = __m_;
|
333
|
+
__m_ = nullptr;
|
334
|
+
__owns_ = false;
|
335
|
+
return __m;
|
336
|
+
}
|
337
|
+
|
338
|
+
// Getters
|
339
|
+
_LIBCPP_INLINE_VISIBILITY
|
340
|
+
bool owns_lock() const noexcept {return __owns_;}
|
341
|
+
|
342
|
+
_LIBCPP_INLINE_VISIBILITY
|
343
|
+
explicit operator bool () const noexcept {return __owns_;}
|
344
|
+
|
345
|
+
_LIBCPP_INLINE_VISIBILITY
|
346
|
+
mutex_type* mutex() const noexcept {return __m_;}
|
347
|
+
};
|
348
|
+
|
349
|
+
template <class _Mutex>
|
350
|
+
void
|
351
|
+
shared_lock<_Mutex>::lock()
|
352
|
+
{
|
353
|
+
if (__m_ == nullptr)
|
354
|
+
__throw_system_error(EPERM, "shared_lock::lock: references null mutex");
|
355
|
+
if (__owns_)
|
356
|
+
__throw_system_error(EDEADLK, "shared_lock::lock: already locked");
|
357
|
+
__m_->lock_shared();
|
358
|
+
__owns_ = true;
|
359
|
+
}
|
360
|
+
|
361
|
+
template <class _Mutex>
|
362
|
+
bool
|
363
|
+
shared_lock<_Mutex>::try_lock()
|
364
|
+
{
|
365
|
+
if (__m_ == nullptr)
|
366
|
+
__throw_system_error(EPERM, "shared_lock::try_lock: references null mutex");
|
367
|
+
if (__owns_)
|
368
|
+
__throw_system_error(EDEADLK, "shared_lock::try_lock: already locked");
|
369
|
+
__owns_ = __m_->try_lock_shared();
|
370
|
+
return __owns_;
|
371
|
+
}
|
372
|
+
|
373
|
+
template <class _Mutex>
|
374
|
+
template <class _Rep, class _Period>
|
375
|
+
bool
|
376
|
+
shared_lock<_Mutex>::try_lock_for(const chrono::duration<_Rep, _Period>& __d)
|
377
|
+
{
|
378
|
+
if (__m_ == nullptr)
|
379
|
+
__throw_system_error(EPERM, "shared_lock::try_lock_for: references null mutex");
|
380
|
+
if (__owns_)
|
381
|
+
__throw_system_error(EDEADLK, "shared_lock::try_lock_for: already locked");
|
382
|
+
__owns_ = __m_->try_lock_shared_for(__d);
|
383
|
+
return __owns_;
|
384
|
+
}
|
385
|
+
|
386
|
+
template <class _Mutex>
|
387
|
+
template <class _Clock, class _Duration>
|
388
|
+
bool
|
389
|
+
shared_lock<_Mutex>::try_lock_until(const chrono::time_point<_Clock, _Duration>& __t)
|
390
|
+
{
|
391
|
+
if (__m_ == nullptr)
|
392
|
+
__throw_system_error(EPERM, "shared_lock::try_lock_until: references null mutex");
|
393
|
+
if (__owns_)
|
394
|
+
__throw_system_error(EDEADLK, "shared_lock::try_lock_until: already locked");
|
395
|
+
__owns_ = __m_->try_lock_shared_until(__t);
|
396
|
+
return __owns_;
|
397
|
+
}
|
398
|
+
|
399
|
+
template <class _Mutex>
|
400
|
+
void
|
401
|
+
shared_lock<_Mutex>::unlock()
|
402
|
+
{
|
403
|
+
if (!__owns_)
|
404
|
+
__throw_system_error(EPERM, "shared_lock::unlock: not locked");
|
405
|
+
__m_->unlock_shared();
|
406
|
+
__owns_ = false;
|
407
|
+
}
|
408
|
+
|
409
|
+
template <class _Mutex>
|
410
|
+
inline _LIBCPP_INLINE_VISIBILITY
|
411
|
+
void
|
412
|
+
swap(shared_lock<_Mutex>& __x, shared_lock<_Mutex>& __y) noexcept
|
413
|
+
{__x.swap(__y);}
|
414
|
+
|
415
|
+
_LIBCPP_END_NAMESPACE_STD
|
416
|
+
|
417
|
+
#endif // _LIBCPP_STD_VER > 11
|
418
|
+
|
419
|
+
#endif // _LIBCPP_SHARED_MUTEX
|
@@ -186,7 +186,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
|
|
186
186
|
// basic_stringbuf
|
187
187
|
|
188
188
|
template <class _CharT, class _Traits, class _Allocator>
|
189
|
-
class
|
189
|
+
class _LIBCPP_TYPE_VIS_ONLY basic_stringbuf
|
190
190
|
: public basic_streambuf<_CharT, _Traits>
|
191
191
|
{
|
192
192
|
public:
|
@@ -613,7 +613,7 @@ basic_stringbuf<_CharT, _Traits, _Allocator>::seekpos(pos_type __sp,
|
|
613
613
|
// basic_istringstream
|
614
614
|
|
615
615
|
template <class _CharT, class _Traits, class _Allocator>
|
616
|
-
class
|
616
|
+
class _LIBCPP_TYPE_VIS_ONLY basic_istringstream
|
617
617
|
: public basic_istream<_CharT, _Traits>
|
618
618
|
{
|
619
619
|
public:
|
@@ -732,7 +732,7 @@ basic_istringstream<_CharT, _Traits, _Allocator>::str(const string_type& __s)
|
|
732
732
|
// basic_ostringstream
|
733
733
|
|
734
734
|
template <class _CharT, class _Traits, class _Allocator>
|
735
|
-
class
|
735
|
+
class _LIBCPP_TYPE_VIS_ONLY basic_ostringstream
|
736
736
|
: public basic_ostream<_CharT, _Traits>
|
737
737
|
{
|
738
738
|
public:
|
@@ -851,7 +851,7 @@ basic_ostringstream<_CharT, _Traits, _Allocator>::str(const string_type& __s)
|
|
851
851
|
// basic_stringstream
|
852
852
|
|
853
853
|
template <class _CharT, class _Traits, class _Allocator>
|
854
|
-
class
|
854
|
+
class _LIBCPP_TYPE_VIS_ONLY basic_stringstream
|
855
855
|
: public basic_iostream<_CharT, _Traits>
|
856
856
|
{
|
857
857
|
public:
|
@@ -91,7 +91,7 @@ template <class T, class Container>
|
|
91
91
|
|
92
92
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
93
93
|
|
94
|
-
template <class _Tp, class _Container> class
|
94
|
+
template <class _Tp, class _Container> class _LIBCPP_TYPE_VIS_ONLY stack;
|
95
95
|
|
96
96
|
template <class _Tp, class _Container>
|
97
97
|
_LIBCPP_INLINE_VISIBILITY
|
@@ -104,7 +104,7 @@ bool
|
|
104
104
|
operator< (const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y);
|
105
105
|
|
106
106
|
template <class _Tp, class _Container = deque<_Tp> >
|
107
|
-
class
|
107
|
+
class _LIBCPP_TYPE_VIS_ONLY stack
|
108
108
|
{
|
109
109
|
public:
|
110
110
|
typedef _Container container_type;
|
@@ -282,7 +282,7 @@ swap(stack<_Tp, _Container>& __x, stack<_Tp, _Container>& __y)
|
|
282
282
|
}
|
283
283
|
|
284
284
|
template <class _Tp, class _Container, class _Alloc>
|
285
|
-
struct
|
285
|
+
struct _LIBCPP_TYPE_VIS_ONLY uses_allocator<stack<_Tp, _Container>, _Alloc>
|
286
286
|
: public uses_allocator<_Container, _Alloc>
|
287
287
|
{
|
288
288
|
};
|
@@ -119,7 +119,7 @@ protected:
|
|
119
119
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
120
120
|
|
121
121
|
template <class _CharT, class _Traits>
|
122
|
-
class
|
122
|
+
class _LIBCPP_TYPE_VIS_ONLY basic_streambuf
|
123
123
|
{
|
124
124
|
public:
|
125
125
|
// types:
|
@@ -553,11 +553,11 @@ basic_streambuf<_CharT, _Traits>::overflow(int_type)
|
|
553
553
|
return traits_type::eof();
|
554
554
|
}
|
555
555
|
|
556
|
-
_LIBCPP_EXTERN_TEMPLATE(class basic_streambuf<char>)
|
557
|
-
_LIBCPP_EXTERN_TEMPLATE(class basic_streambuf<wchar_t>)
|
556
|
+
_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_streambuf<char>)
|
557
|
+
_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_streambuf<wchar_t>)
|
558
558
|
|
559
|
-
_LIBCPP_EXTERN_TEMPLATE(class basic_ios<char>)
|
560
|
-
_LIBCPP_EXTERN_TEMPLATE(class basic_ios<wchar_t>)
|
559
|
+
_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ios<char>)
|
560
|
+
_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS basic_ios<wchar_t>)
|
561
561
|
|
562
562
|
_LIBCPP_END_NAMESPACE_STD
|
563
563
|
|