webruby 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webruby/config.rb +4 -9
  3. data/lib/webruby/rake/files.rake +2 -2
  4. data/modules/emscripten/AUTHORS +9 -1
  5. data/modules/emscripten/CONTRIBUTING.markdown +5 -0
  6. data/modules/emscripten/ChangeLog +435 -0
  7. data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
  8. data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
  9. data/modules/emscripten/em++ +0 -2
  10. data/modules/emscripten/emcc +92 -32
  11. data/modules/emscripten/emlink.py +16 -13
  12. data/modules/emscripten/emmake +1 -1
  13. data/modules/emscripten/emrun +918 -0
  14. data/modules/emscripten/emrun.bat +2 -0
  15. data/modules/emscripten/emscripten.py +545 -20
  16. data/modules/emscripten/src/analyzer.js +6 -1
  17. data/modules/emscripten/src/compiler.js +25 -16
  18. data/modules/emscripten/src/emrun_postjs.js +20 -0
  19. data/modules/emscripten/{tests → src}/hello_world.js +0 -0
  20. data/modules/emscripten/src/intertyper.js +45 -16
  21. data/modules/emscripten/src/jsifier.js +78 -48
  22. data/modules/emscripten/src/library.js +381 -96
  23. data/modules/emscripten/src/library_browser.js +50 -53
  24. data/modules/emscripten/src/library_egl.js +66 -24
  25. data/modules/emscripten/src/library_fs.js +122 -90
  26. data/modules/emscripten/src/library_gl.js +739 -353
  27. data/modules/emscripten/src/library_glfw.js +9 -3
  28. data/modules/emscripten/src/library_glut.js +10 -5
  29. data/modules/emscripten/src/library_idbfs.js +14 -14
  30. data/modules/emscripten/src/library_memfs.js +65 -41
  31. data/modules/emscripten/src/library_nodefs.js +61 -9
  32. data/modules/emscripten/src/library_openal.js +4 -4
  33. data/modules/emscripten/src/library_path.js +9 -13
  34. data/modules/emscripten/src/library_sdl.js +301 -64
  35. data/modules/emscripten/src/library_sockfs.js +7 -5
  36. data/modules/emscripten/src/modules.js +62 -22
  37. data/modules/emscripten/src/parseTools.js +135 -102
  38. data/modules/emscripten/src/postamble.js +3 -4
  39. data/modules/emscripten/src/preamble.js +49 -29
  40. data/modules/emscripten/src/proxyClient.js +1 -1
  41. data/modules/emscripten/src/proxyWorker.js +10 -10
  42. data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
  43. data/modules/emscripten/src/runtime.js +32 -8
  44. data/modules/emscripten/src/settings.js +25 -8
  45. data/modules/emscripten/src/shell.html +6 -3
  46. data/modules/emscripten/src/shell.js +13 -11
  47. data/modules/emscripten/src/simd.js +602 -432
  48. data/modules/emscripten/src/struct_info.json +22 -2
  49. data/modules/emscripten/src/utility.js +32 -17
  50. data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
  51. data/modules/emscripten/system/include/compat/ctype.h +17 -0
  52. data/modules/emscripten/system/include/compat/wchar.h +23 -0
  53. data/modules/emscripten/system/include/compat/wctype.h +23 -0
  54. data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
  55. data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
  56. data/modules/emscripten/system/include/emscripten/vector.h +29 -1
  57. data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
  58. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
  59. data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
  60. data/modules/emscripten/system/include/libcxx/__config +95 -17
  61. data/modules/emscripten/system/include/libcxx/__debug +25 -4
  62. data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
  63. data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
  64. data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
  65. data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
  66. data/modules/emscripten/system/include/libcxx/__locale +21 -19
  67. data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
  68. data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
  69. data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
  70. data/modules/emscripten/system/include/libcxx/__tree +35 -26
  71. data/modules/emscripten/system/include/libcxx/__tuple +15 -15
  72. data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
  73. data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
  74. data/modules/emscripten/system/include/libcxx/algorithm +121 -110
  75. data/modules/emscripten/system/include/libcxx/array +15 -15
  76. data/modules/emscripten/system/include/libcxx/bitset +4 -4
  77. data/modules/emscripten/system/include/libcxx/chrono +51 -17
  78. data/modules/emscripten/system/include/libcxx/cmath +25 -23
  79. data/modules/emscripten/system/include/libcxx/codecvt +21 -18
  80. data/modules/emscripten/system/include/libcxx/complex +48 -7
  81. data/modules/emscripten/system/include/libcxx/cstddef +1 -1
  82. data/modules/emscripten/system/include/libcxx/cstdio +8 -1
  83. data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
  84. data/modules/emscripten/system/include/libcxx/cwchar +1 -1
  85. data/modules/emscripten/system/include/libcxx/deque +26 -12
  86. data/modules/emscripten/system/include/libcxx/dynarray +311 -0
  87. data/modules/emscripten/system/include/libcxx/exception +4 -4
  88. data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
  89. data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
  90. data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
  91. data/modules/emscripten/system/include/libcxx/forward_list +33 -7
  92. data/modules/emscripten/system/include/libcxx/fstream +4 -4
  93. data/modules/emscripten/system/include/libcxx/functional +200 -170
  94. data/modules/emscripten/system/include/libcxx/future +83 -39
  95. data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
  96. data/modules/emscripten/system/include/libcxx/iomanip +147 -0
  97. data/modules/emscripten/system/include/libcxx/ios +24 -16
  98. data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
  99. data/modules/emscripten/system/include/libcxx/istream +13 -8
  100. data/modules/emscripten/system/include/libcxx/iterator +108 -417
  101. data/modules/emscripten/system/include/libcxx/limits +8 -4
  102. data/modules/emscripten/system/include/libcxx/list +28 -8
  103. data/modules/emscripten/system/include/libcxx/locale +153 -390
  104. data/modules/emscripten/system/include/libcxx/map +280 -100
  105. data/modules/emscripten/system/include/libcxx/memory +49 -97
  106. data/modules/emscripten/system/include/libcxx/mutex +2 -2
  107. data/modules/emscripten/system/include/libcxx/new +43 -14
  108. data/modules/emscripten/system/include/libcxx/numeric +2 -2
  109. data/modules/emscripten/system/include/libcxx/optional +697 -0
  110. data/modules/emscripten/system/include/libcxx/ostream +17 -8
  111. data/modules/emscripten/system/include/libcxx/queue +5 -5
  112. data/modules/emscripten/system/include/libcxx/random +53 -51
  113. data/modules/emscripten/system/include/libcxx/ratio +11 -11
  114. data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
  115. data/modules/emscripten/system/include/libcxx/regex +23 -20
  116. data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
  117. data/modules/emscripten/system/include/libcxx/set +166 -2
  118. data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
  119. data/modules/emscripten/system/include/libcxx/sstream +4 -4
  120. data/modules/emscripten/system/include/libcxx/stack +3 -3
  121. data/modules/emscripten/system/include/libcxx/streambuf +5 -5
  122. data/modules/emscripten/system/include/libcxx/string +372 -324
  123. data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
  124. data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
  125. data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
  126. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
  127. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
  128. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
  129. data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
  130. data/modules/emscripten/system/include/libcxx/system_error +14 -8
  131. data/modules/emscripten/system/include/libcxx/thread +7 -8
  132. data/modules/emscripten/system/include/libcxx/tuple +29 -88
  133. data/modules/emscripten/system/include/libcxx/type_traits +253 -209
  134. data/modules/emscripten/system/include/libcxx/typeindex +3 -3
  135. data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
  136. data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
  137. data/modules/emscripten/system/include/libcxx/utility +20 -20
  138. data/modules/emscripten/system/include/libcxx/valarray +23 -23
  139. data/modules/emscripten/system/include/libcxx/vector +114 -91
  140. data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
  141. data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
  142. data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
  143. data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
  144. data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
  145. data/modules/emscripten/system/lib/libcextra.symbols +7 -0
  146. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
  147. data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
  148. data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
  149. data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
  150. data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
  151. data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
  152. data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
  153. data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
  154. data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
  155. data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
  156. data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
  157. data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
  158. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
  159. data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
  160. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
  161. data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
  162. data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
  163. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
  164. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
  165. data/modules/emscripten/system/lib/libcxx/symbols +187 -168
  166. data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
  167. data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
  168. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
  169. data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
  170. data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
  171. data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
  172. data/modules/emscripten/tools/cache.py +5 -7
  173. data/modules/emscripten/tools/cache.pyc +0 -0
  174. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
  175. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
  176. data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
  177. data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
  178. data/modules/emscripten/tools/file_packager.py +93 -50
  179. data/modules/emscripten/tools/js-optimizer.js +98 -48
  180. data/modules/emscripten/tools/js_optimizer.py +4 -4
  181. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  182. data/modules/emscripten/tools/jsrun.py +1 -1
  183. data/modules/emscripten/tools/jsrun.pyc +0 -0
  184. data/modules/emscripten/tools/response_file.py +6 -0
  185. data/modules/emscripten/tools/response_file.pyc +0 -0
  186. data/modules/emscripten/tools/settings_template_readonly.py +2 -0
  187. data/modules/emscripten/tools/shared.py +88 -34
  188. data/modules/emscripten/tools/shared.pyc +0 -0
  189. data/modules/emscripten/tools/split.py +21 -13
  190. data/modules/mruby/build_config.rb +7 -1
  191. data/modules/mruby/doc/compile/README.md +5 -9
  192. data/modules/mruby/include/mrbconf.h +5 -2
  193. data/modules/mruby/include/mruby/array.h +1 -0
  194. data/modules/mruby/include/mruby/compile.h +2 -4
  195. data/modules/mruby/include/mruby/dump.h +7 -16
  196. data/modules/mruby/include/mruby/hash.h +1 -1
  197. data/modules/mruby/include/mruby/irep.h +14 -2
  198. data/modules/mruby/include/mruby/khash.h +8 -7
  199. data/modules/mruby/include/mruby/string.h +1 -0
  200. data/modules/mruby/include/mruby/value.h +5 -2
  201. data/modules/mruby/include/mruby.h +12 -13
  202. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
  203. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
  204. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
  205. data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
  206. data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
  207. data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
  208. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
  209. data/modules/mruby/mrblib/numeric.rb +99 -33
  210. data/modules/mruby/src/array.c +11 -4
  211. data/modules/mruby/src/backtrace.c +2 -2
  212. data/modules/mruby/src/class.c +49 -30
  213. data/modules/mruby/src/codegen.c +131 -79
  214. data/modules/mruby/src/debug.c +1 -1
  215. data/modules/mruby/src/dump.c +213 -163
  216. data/modules/mruby/src/error.c +17 -17
  217. data/modules/mruby/src/error.h +1 -1
  218. data/modules/mruby/src/etc.c +10 -0
  219. data/modules/mruby/src/gc.c +35 -17
  220. data/modules/mruby/src/hash.c +5 -5
  221. data/modules/mruby/src/kernel.c +36 -14
  222. data/modules/mruby/src/load.c +238 -296
  223. data/modules/mruby/src/numeric.c +18 -98
  224. data/modules/mruby/src/object.c +3 -5
  225. data/modules/mruby/src/parse.y +63 -56
  226. data/modules/mruby/src/proc.c +8 -5
  227. data/modules/mruby/src/re.h +0 -1
  228. data/modules/mruby/src/state.c +65 -27
  229. data/modules/mruby/src/string.c +3 -31
  230. data/modules/mruby/src/symbol.c +3 -3
  231. data/modules/mruby/src/variable.c +12 -5
  232. data/modules/mruby/src/vm.c +90 -72
  233. data/modules/mruby/tasks/mruby_build.rake +10 -1
  234. data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
  235. data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
  236. data/modules/mruby/test/driver.c +3 -3
  237. data/modules/mruby/test/t/array.rb +5 -5
  238. data/modules/mruby/test/t/class.rb +14 -1
  239. data/modules/mruby/test/t/kernel.rb +4 -0
  240. data/modules/mruby/test/t/module.rb +4 -4
  241. data/modules/mruby/test/t/nameerror.rb +1 -1
  242. data/modules/mruby/tools/mrbc/mrbc.c +23 -17
  243. data/modules/mruby/travis_config.rb +10 -1
  244. metadata +28 -5
  245. data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
@@ -77,7 +77,12 @@ public:
77
77
  map(map&& m, const allocator_type& a);
78
78
  map(initializer_list<value_type> il, const key_compare& comp = key_compare());
79
79
  map(initializer_list<value_type> il, const key_compare& comp, const allocator_type& a);
80
- ~map();
80
+ template <class InputIterator>
81
+ map(InputIterator first, InputIterator last, const allocator_type& a)
82
+ : map(first, last, Compare(), a) {} // C++14
83
+ map(initializer_list<value_type> il, const allocator_type& a)
84
+ : map(il, Compare(), a) {} // C++14
85
+ ~map();
81
86
 
82
87
  map& operator=(const map& m);
83
88
  map& operator=(map&& m)
@@ -149,13 +154,34 @@ public:
149
154
  // map operations:
150
155
  iterator find(const key_type& k);
151
156
  const_iterator find(const key_type& k) const;
157
+ template<typename K>
158
+ iterator find(const K& x); // C++14
159
+ template<typename K>
160
+ const_iterator find(const K& x) const; // C++14
161
+ template<typename K>
162
+ size_type count(const K& x) const;
163
+
152
164
  size_type count(const key_type& k) const;
153
165
  iterator lower_bound(const key_type& k);
154
166
  const_iterator lower_bound(const key_type& k) const;
167
+ template<typename K>
168
+ iterator lower_bound(const K& x); // C++14
169
+ template<typename K>
170
+ const_iterator lower_bound(const K& x) const; // C++14
171
+
155
172
  iterator upper_bound(const key_type& k);
156
173
  const_iterator upper_bound(const key_type& k) const;
174
+ template<typename K>
175
+ iterator upper_bound(const K& x); // C++14
176
+ template<typename K>
177
+ const_iterator upper_bound(const K& x) const; // C++14
178
+
157
179
  pair<iterator,iterator> equal_range(const key_type& k);
158
180
  pair<const_iterator,const_iterator> equal_range(const key_type& k) const;
181
+ template<typename K>
182
+ pair<iterator,iterator> equal_range(const K& x); // C++14
183
+ template<typename K>
184
+ pair<const_iterator,const_iterator> equal_range(const K& x) const; // C++14
159
185
  };
160
186
 
161
187
  template <class Key, class T, class Compare, class Allocator>
@@ -252,6 +278,11 @@ public:
252
278
  multimap(initializer_list<value_type> il, const key_compare& comp = key_compare());
253
279
  multimap(initializer_list<value_type> il, const key_compare& comp,
254
280
  const allocator_type& a);
281
+ template <class InputIterator>
282
+ multimap(InputIterator first, InputIterator last, const allocator_type& a)
283
+ : multimap(first, last, Compare(), a) {} // C++14
284
+ multimap(initializer_list<value_type> il, const allocator_type& a)
285
+ : multimap(il, Compare(), a) {} // C++14
255
286
  ~multimap();
256
287
 
257
288
  multimap& operator=(const multimap& m);
@@ -317,13 +348,34 @@ public:
317
348
  // map operations:
318
349
  iterator find(const key_type& k);
319
350
  const_iterator find(const key_type& k) const;
351
+ template<typename K>
352
+ iterator find(const K& x); // C++14
353
+ template<typename K>
354
+ const_iterator find(const K& x) const; // C++14
355
+ template<typename K>
356
+ size_type count(const K& x) const;
357
+
320
358
  size_type count(const key_type& k) const;
321
359
  iterator lower_bound(const key_type& k);
322
360
  const_iterator lower_bound(const key_type& k) const;
361
+ template<typename K>
362
+ iterator lower_bound(const K& x); // C++14
363
+ template<typename K>
364
+ const_iterator lower_bound(const K& x) const; // C++14
365
+
323
366
  iterator upper_bound(const key_type& k);
324
367
  const_iterator upper_bound(const key_type& k) const;
368
+ template<typename K>
369
+ iterator upper_bound(const K& x); // C++14
370
+ template<typename K>
371
+ const_iterator upper_bound(const K& x) const; // C++14
372
+
325
373
  pair<iterator,iterator> equal_range(const key_type& k);
326
374
  pair<const_iterator,const_iterator> equal_range(const key_type& k) const;
375
+ template<typename K>
376
+ pair<iterator,iterator> equal_range(const K& x); // C++14
377
+ template<typename K>
378
+ pair<const_iterator,const_iterator> equal_range(const K& x) const; // C++14
327
379
  };
328
380
 
329
381
  template <class Key, class T, class Compare, class Allocator>
@@ -409,6 +461,20 @@ public:
409
461
  _LIBCPP_INLINE_VISIBILITY
410
462
  bool operator()(const _Key& __x, const _CP& __y) const
411
463
  {return static_cast<const _Compare&>(*this)(__x, __y.__cc.first);}
464
+
465
+ #if _LIBCPP_STD_VER > 11
466
+ template <typename _K2>
467
+ _LIBCPP_INLINE_VISIBILITY
468
+ typename enable_if<__is_transparent<_Compare, _K2>::value, bool>::type
469
+ operator () ( const _K2& __x, const _CP& __y ) const
470
+ {return static_cast<const _Compare&>(*this) (__x, __y.__cc.first);}
471
+
472
+ template <typename _K2>
473
+ _LIBCPP_INLINE_VISIBILITY
474
+ typename enable_if<__is_transparent<_Compare, _K2>::value, bool>::type
475
+ operator () (const _CP& __x, const _K2& __y) const
476
+ {return static_cast<const _Compare&>(*this) (__x.__cc.first, __y);}
477
+ #endif
412
478
  };
413
479
 
414
480
  template <class _Key, class _CP, class _Compare>
@@ -437,6 +503,20 @@ public:
437
503
  _LIBCPP_INLINE_VISIBILITY
438
504
  bool operator()(const _Key& __x, const _CP& __y) const
439
505
  {return comp(__x, __y.__cc.first);}
506
+
507
+ #if _LIBCPP_STD_VER > 11
508
+ template <typename _K2>
509
+ _LIBCPP_INLINE_VISIBILITY
510
+ typename enable_if<__is_transparent<_Compare, _K2>::value, bool>::type
511
+ operator () ( const _K2& __x, const _CP& __y ) const
512
+ {return comp (__x, __y.__cc.first);}
513
+
514
+ template <typename _K2>
515
+ _LIBCPP_INLINE_VISIBILITY
516
+ typename enable_if<__is_transparent<_Compare, _K2>::value, bool>::type
517
+ operator () (const _CP& __x, const _K2& __y) const
518
+ {return comp (__x.__cc.first, __y);}
519
+ #endif
440
520
  };
441
521
 
442
522
  template <class _Allocator>
@@ -495,8 +575,77 @@ template <class _Key, class _Tp, class _Compare, class _Allocator>
495
575
  class multimap;
496
576
  template <class _TreeIterator> class __map_const_iterator;
497
577
 
578
+ #if __cplusplus >= 201103L
579
+
580
+ template <class _Key, class _Tp>
581
+ union __value_type
582
+ {
583
+ typedef _Key key_type;
584
+ typedef _Tp mapped_type;
585
+ typedef pair<const key_type, mapped_type> value_type;
586
+ typedef pair<key_type, mapped_type> __nc_value_type;
587
+
588
+ value_type __cc;
589
+ __nc_value_type __nc;
590
+
591
+ template <class ..._Args>
592
+ _LIBCPP_INLINE_VISIBILITY
593
+ __value_type(_Args&& ...__args)
594
+ : __cc(std::forward<_Args>(__args)...) {}
595
+
596
+ _LIBCPP_INLINE_VISIBILITY
597
+ __value_type(const __value_type& __v)
598
+ : __cc(__v.__cc) {}
599
+
600
+ _LIBCPP_INLINE_VISIBILITY
601
+ __value_type(__value_type& __v)
602
+ : __cc(__v.__cc) {}
603
+
604
+ _LIBCPP_INLINE_VISIBILITY
605
+ __value_type(__value_type&& __v)
606
+ : __nc(std::move(__v.__nc)) {}
607
+
608
+ _LIBCPP_INLINE_VISIBILITY
609
+ __value_type& operator=(const __value_type& __v)
610
+ {__nc = __v.__cc; return *this;}
611
+
612
+ _LIBCPP_INLINE_VISIBILITY
613
+ __value_type& operator=(__value_type&& __v)
614
+ {__nc = std::move(__v.__nc); return *this;}
615
+
616
+ _LIBCPP_INLINE_VISIBILITY
617
+ ~__value_type() {__cc.~value_type();}
618
+ };
619
+
620
+ #else
621
+
622
+ template <class _Key, class _Tp>
623
+ struct __value_type
624
+ {
625
+ typedef _Key key_type;
626
+ typedef _Tp mapped_type;
627
+ typedef pair<const key_type, mapped_type> value_type;
628
+
629
+ value_type __cc;
630
+
631
+ _LIBCPP_INLINE_VISIBILITY
632
+ __value_type() {}
633
+
634
+ template <class _A0>
635
+ _LIBCPP_INLINE_VISIBILITY
636
+ __value_type(const _A0& __a0)
637
+ : __cc(__a0) {}
638
+
639
+ template <class _A0, class _A1>
640
+ _LIBCPP_INLINE_VISIBILITY
641
+ __value_type(const _A0& __a0, const _A1& __a1)
642
+ : __cc(__a0, __a1) {}
643
+ };
644
+
645
+ #endif
646
+
498
647
  template <class _TreeIterator>
499
- class _LIBCPP_TYPE_VIS __map_iterator
648
+ class _LIBCPP_TYPE_VIS_ONLY __map_iterator
500
649
  {
501
650
  _TreeIterator __i_;
502
651
 
@@ -555,13 +704,13 @@ public:
555
704
  bool operator!=(const __map_iterator& __x, const __map_iterator& __y)
556
705
  {return __x.__i_ != __y.__i_;}
557
706
 
558
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS map;
559
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS multimap;
560
- template <class> friend class _LIBCPP_TYPE_VIS __map_const_iterator;
707
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY map;
708
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY multimap;
709
+ template <class> friend class _LIBCPP_TYPE_VIS_ONLY __map_const_iterator;
561
710
  };
562
711
 
563
712
  template <class _TreeIterator>
564
- class _LIBCPP_TYPE_VIS __map_const_iterator
713
+ class _LIBCPP_TYPE_VIS_ONLY __map_const_iterator
565
714
  {
566
715
  _TreeIterator __i_;
567
716
 
@@ -624,14 +773,14 @@ public:
624
773
  bool operator!=(const __map_const_iterator& __x, const __map_const_iterator& __y)
625
774
  {return __x.__i_ != __y.__i_;}
626
775
 
627
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS map;
628
- template <class, class, class, class> friend class _LIBCPP_TYPE_VIS multimap;
629
- template <class, class, class> friend class _LIBCPP_TYPE_VIS __tree_const_iterator;
776
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY map;
777
+ template <class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY multimap;
778
+ template <class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY __tree_const_iterator;
630
779
  };
631
780
 
632
781
  template <class _Key, class _Tp, class _Compare = less<_Key>,
633
782
  class _Allocator = allocator<pair<const _Key, _Tp> > >
634
- class _LIBCPP_TYPE_VIS map
783
+ class _LIBCPP_TYPE_VIS_ONLY map
635
784
  {
636
785
  public:
637
786
  // types:
@@ -644,7 +793,7 @@ public:
644
793
  typedef value_type& reference;
645
794
  typedef const value_type& const_reference;
646
795
 
647
- class _LIBCPP_TYPE_VIS value_compare
796
+ class _LIBCPP_TYPE_VIS_ONLY value_compare
648
797
  : public binary_function<value_type, value_type, bool>
649
798
  {
650
799
  friend class map;
@@ -660,49 +809,7 @@ public:
660
809
 
661
810
  private:
662
811
 
663
- #if __cplusplus >= 201103L
664
- union __value_type
665
- {
666
- typedef typename map::value_type value_type;
667
- typedef typename map::__nc_value_type __nc_value_type;
668
- value_type __cc;
669
- __nc_value_type __nc;
670
-
671
- template <class ..._Args>
672
- __value_type(_Args&& ...__args)
673
- : __cc(std::forward<_Args>(__args)...) {}
674
-
675
- __value_type(const __value_type& __v)
676
- : __cc(std::move(__v.__cc)) {}
677
-
678
- __value_type(__value_type&& __v)
679
- : __nc(std::move(__v.__nc)) {}
680
-
681
- __value_type& operator=(const __value_type& __v)
682
- {__nc = __v.__cc; return *this;}
683
-
684
- __value_type& operator=(__value_type&& __v)
685
- {__nc = std::move(__v.__nc); return *this;}
686
-
687
- ~__value_type() {__cc.~value_type();}
688
- };
689
- #else
690
- struct __value_type
691
- {
692
- typedef typename map::value_type value_type;
693
- value_type __cc;
694
-
695
- __value_type() {}
696
-
697
- template <class _A0>
698
- __value_type(const _A0& __a0)
699
- : __cc(__a0) {}
700
-
701
- template <class _A0, class _A1>
702
- __value_type(const _A0& __a0, const _A1& __a1)
703
- : __cc(__a0, __a1) {}
704
- };
705
- #endif
812
+ typedef _VSTD::__value_type<key_type, mapped_type> __value_type;
706
813
  typedef __map_value_compare<key_type, __value_type, key_compare> __vc;
707
814
  typedef typename allocator_traits<allocator_type>::template
708
815
  #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
@@ -757,6 +864,13 @@ public:
757
864
  insert(__f, __l);
758
865
  }
759
866
 
867
+ #if _LIBCPP_STD_VER > 11
868
+ template <class _InputIterator>
869
+ _LIBCPP_INLINE_VISIBILITY
870
+ map(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
871
+ : map(__f, __l, key_compare(), __a) {}
872
+ #endif
873
+
760
874
  _LIBCPP_INLINE_VISIBILITY
761
875
  map(const map& __m)
762
876
  : __tree_(__m.__tree_)
@@ -815,6 +929,12 @@ public:
815
929
  insert(__il.begin(), __il.end());
816
930
  }
817
931
 
932
+ #if _LIBCPP_STD_VER > 11
933
+ _LIBCPP_INLINE_VISIBILITY
934
+ map(initializer_list<value_type> __il, const allocator_type& __a)
935
+ : map(__il, key_compare(), __a) {}
936
+ #endif
937
+
818
938
  _LIBCPP_INLINE_VISIBILITY
819
939
  map& operator=(initializer_list<value_type> __il)
820
940
  {
@@ -961,6 +1081,17 @@ public:
961
1081
  iterator find(const key_type& __k) {return __tree_.find(__k);}
962
1082
  _LIBCPP_INLINE_VISIBILITY
963
1083
  const_iterator find(const key_type& __k) const {return __tree_.find(__k);}
1084
+ #if _LIBCPP_STD_VER > 11
1085
+ template <typename _K2>
1086
+ _LIBCPP_INLINE_VISIBILITY
1087
+ typename enable_if<__is_transparent<_Compare, _K2>::value,iterator>::type
1088
+ find(const _K2& __k) {return __tree_.find(__k);}
1089
+ template <typename _K2>
1090
+ _LIBCPP_INLINE_VISIBILITY
1091
+ typename enable_if<__is_transparent<_Compare, _K2>::value,const_iterator>::type
1092
+ find(const _K2& __k) const {return __tree_.find(__k);}
1093
+ #endif
1094
+
964
1095
  _LIBCPP_INLINE_VISIBILITY
965
1096
  size_type count(const key_type& __k) const
966
1097
  {return __tree_.__count_unique(__k);}
@@ -970,18 +1101,51 @@ public:
970
1101
  _LIBCPP_INLINE_VISIBILITY
971
1102
  const_iterator lower_bound(const key_type& __k) const
972
1103
  {return __tree_.lower_bound(__k);}
1104
+ #if _LIBCPP_STD_VER > 11
1105
+ template <typename _K2>
1106
+ _LIBCPP_INLINE_VISIBILITY
1107
+ typename enable_if<__is_transparent<_Compare, _K2>::value,iterator>::type
1108
+ lower_bound(const _K2& __k) {return __tree_.lower_bound(__k);}
1109
+
1110
+ template <typename _K2>
1111
+ _LIBCPP_INLINE_VISIBILITY
1112
+ typename enable_if<__is_transparent<_Compare, _K2>::value,const_iterator>::type
1113
+ lower_bound(const _K2& __k) const {return __tree_.lower_bound(__k);}
1114
+ #endif
1115
+
973
1116
  _LIBCPP_INLINE_VISIBILITY
974
1117
  iterator upper_bound(const key_type& __k)
975
1118
  {return __tree_.upper_bound(__k);}
976
1119
  _LIBCPP_INLINE_VISIBILITY
977
1120
  const_iterator upper_bound(const key_type& __k) const
978
1121
  {return __tree_.upper_bound(__k);}
1122
+ #if _LIBCPP_STD_VER > 11
1123
+ template <typename _K2>
1124
+ _LIBCPP_INLINE_VISIBILITY
1125
+ typename enable_if<__is_transparent<_Compare, _K2>::value,iterator>::type
1126
+ upper_bound(const _K2& __k) {return __tree_.upper_bound(__k);}
1127
+ template <typename _K2>
1128
+ _LIBCPP_INLINE_VISIBILITY
1129
+ typename enable_if<__is_transparent<_Compare, _K2>::value,const_iterator>::type
1130
+ upper_bound(const _K2& __k) const {return __tree_.upper_bound(__k);}
1131
+ #endif
1132
+
979
1133
  _LIBCPP_INLINE_VISIBILITY
980
1134
  pair<iterator,iterator> equal_range(const key_type& __k)
981
1135
  {return __tree_.__equal_range_unique(__k);}
982
1136
  _LIBCPP_INLINE_VISIBILITY
983
1137
  pair<const_iterator,const_iterator> equal_range(const key_type& __k) const
984
1138
  {return __tree_.__equal_range_unique(__k);}
1139
+ #if _LIBCPP_STD_VER > 11
1140
+ template <typename _K2>
1141
+ _LIBCPP_INLINE_VISIBILITY
1142
+ typename enable_if<__is_transparent<_Compare, _K2>::value,pair<iterator,iterator>>::type
1143
+ equal_range(const _K2& __k) {return __tree_.__equal_range_unique(__k);}
1144
+ template <typename _K2>
1145
+ _LIBCPP_INLINE_VISIBILITY
1146
+ typename enable_if<__is_transparent<_Compare, _K2>::value,pair<const_iterator,const_iterator>>::type
1147
+ equal_range(const _K2& __k) const {return __tree_.__equal_range_unique(__k);}
1148
+ #endif
985
1149
 
986
1150
  private:
987
1151
  typedef typename __base::__node __node;
@@ -1152,7 +1316,7 @@ map<_Key, _Tp, _Compare, _Allocator>::__construct_node_with_key(key_type&& __k)
1152
1316
  __h.get_deleter().__first_constructed = true;
1153
1317
  __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.second));
1154
1318
  __h.get_deleter().__second_constructed = true;
1155
- return _VSTD::move(__h);
1319
+ return __h;
1156
1320
  }
1157
1321
 
1158
1322
  #ifndef _LIBCPP_HAS_NO_VARIADICS
@@ -1186,7 +1350,7 @@ map<_Key, _Tp, _Compare, _Allocator>::__construct_node_with_key(const key_type&
1186
1350
  __h.get_deleter().__first_constructed = true;
1187
1351
  __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.second));
1188
1352
  __h.get_deleter().__second_constructed = true;
1189
- return _VSTD::move(__h);
1353
+ return _VSTD::move(__h); // explicitly moved for C++03
1190
1354
  }
1191
1355
 
1192
1356
  template <class _Key, class _Tp, class _Compare, class _Allocator>
@@ -1346,7 +1510,7 @@ swap(map<_Key, _Tp, _Compare, _Allocator>& __x,
1346
1510
 
1347
1511
  template <class _Key, class _Tp, class _Compare = less<_Key>,
1348
1512
  class _Allocator = allocator<pair<const _Key, _Tp> > >
1349
- class _LIBCPP_TYPE_VIS multimap
1513
+ class _LIBCPP_TYPE_VIS_ONLY multimap
1350
1514
  {
1351
1515
  public:
1352
1516
  // types:
@@ -1359,7 +1523,7 @@ public:
1359
1523
  typedef value_type& reference;
1360
1524
  typedef const value_type& const_reference;
1361
1525
 
1362
- class _LIBCPP_TYPE_VIS value_compare
1526
+ class _LIBCPP_TYPE_VIS_ONLY value_compare
1363
1527
  : public binary_function<value_type, value_type, bool>
1364
1528
  {
1365
1529
  friend class multimap;
@@ -1375,49 +1539,8 @@ public:
1375
1539
  };
1376
1540
 
1377
1541
  private:
1378
- #if __cplusplus >= 201103L
1379
- union __value_type
1380
- {
1381
- typedef typename multimap::value_type value_type;
1382
- typedef typename multimap::__nc_value_type __nc_value_type;
1383
- value_type __cc;
1384
- __nc_value_type __nc;
1385
-
1386
- template <class ..._Args>
1387
- __value_type(_Args&& ...__args)
1388
- : __cc(std::forward<_Args>(__args)...) {}
1389
1542
 
1390
- __value_type(const __value_type& __v)
1391
- : __cc(std::move(__v.__cc)) {}
1392
-
1393
- __value_type(__value_type&& __v)
1394
- : __nc(std::move(__v.__nc)) {}
1395
-
1396
- __value_type& operator=(const __value_type& __v)
1397
- {__nc = __v.__cc; return *this;}
1398
-
1399
- __value_type& operator=(__value_type&& __v)
1400
- {__nc = std::move(__v.__nc); return *this;}
1401
-
1402
- ~__value_type() {__cc.~value_type();}
1403
- };
1404
- #else
1405
- struct __value_type
1406
- {
1407
- typedef typename multimap::value_type value_type;
1408
- value_type __cc;
1409
-
1410
- __value_type() {}
1411
-
1412
- template <class _A0>
1413
- __value_type(const _A0& __a0)
1414
- : __cc(__a0) {}
1415
-
1416
- template <class _A0, class _A1>
1417
- __value_type(const _A0& __a0, const _A1& __a1)
1418
- : __cc(__a0, __a1) {}
1419
- };
1420
- #endif
1543
+ typedef _VSTD::__value_type<key_type, mapped_type> __value_type;
1421
1544
  typedef __map_value_compare<key_type, __value_type, key_compare> __vc;
1422
1545
  typedef typename allocator_traits<allocator_type>::template
1423
1546
  #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
@@ -1472,6 +1595,13 @@ public:
1472
1595
  insert(__f, __l);
1473
1596
  }
1474
1597
 
1598
+ #if _LIBCPP_STD_VER > 11
1599
+ template <class _InputIterator>
1600
+ _LIBCPP_INLINE_VISIBILITY
1601
+ multimap(_InputIterator __f, _InputIterator __l, const allocator_type& __a)
1602
+ : multimap(__f, __l, key_compare(), __a) {}
1603
+ #endif
1604
+
1475
1605
  _LIBCPP_INLINE_VISIBILITY
1476
1606
  multimap(const multimap& __m)
1477
1607
  : __tree_(__m.__tree_.value_comp(),
@@ -1531,6 +1661,12 @@ public:
1531
1661
  insert(__il.begin(), __il.end());
1532
1662
  }
1533
1663
 
1664
+ #if _LIBCPP_STD_VER > 11
1665
+ _LIBCPP_INLINE_VISIBILITY
1666
+ multimap(initializer_list<value_type> __il, const allocator_type& __a)
1667
+ : multimap(__il, key_compare(), __a) {}
1668
+ #endif
1669
+
1534
1670
  _LIBCPP_INLINE_VISIBILITY
1535
1671
  multimap& operator=(initializer_list<value_type> __il)
1536
1672
  {
@@ -1666,6 +1802,17 @@ public:
1666
1802
  iterator find(const key_type& __k) {return __tree_.find(__k);}
1667
1803
  _LIBCPP_INLINE_VISIBILITY
1668
1804
  const_iterator find(const key_type& __k) const {return __tree_.find(__k);}
1805
+ #if _LIBCPP_STD_VER > 11
1806
+ template <typename _K2>
1807
+ _LIBCPP_INLINE_VISIBILITY
1808
+ typename enable_if<__is_transparent<_Compare, _K2>::value,iterator>::type
1809
+ find(const _K2& __k) {return __tree_.find(__k);}
1810
+ template <typename _K2>
1811
+ _LIBCPP_INLINE_VISIBILITY
1812
+ typename enable_if<__is_transparent<_Compare, _K2>::value,const_iterator>::type
1813
+ find(const _K2& __k) const {return __tree_.find(__k);}
1814
+ #endif
1815
+
1669
1816
  _LIBCPP_INLINE_VISIBILITY
1670
1817
  size_type count(const key_type& __k) const
1671
1818
  {return __tree_.__count_multi(__k);}
@@ -1675,18 +1822,51 @@ public:
1675
1822
  _LIBCPP_INLINE_VISIBILITY
1676
1823
  const_iterator lower_bound(const key_type& __k) const
1677
1824
  {return __tree_.lower_bound(__k);}
1825
+ #if _LIBCPP_STD_VER > 11
1826
+ template <typename _K2>
1827
+ _LIBCPP_INLINE_VISIBILITY
1828
+ typename enable_if<__is_transparent<_Compare, _K2>::value,iterator>::type
1829
+ lower_bound(const _K2& __k) {return __tree_.lower_bound(__k);}
1830
+
1831
+ template <typename _K2>
1832
+ _LIBCPP_INLINE_VISIBILITY
1833
+ typename enable_if<__is_transparent<_Compare, _K2>::value,const_iterator>::type
1834
+ lower_bound(const _K2& __k) const {return __tree_.lower_bound(__k);}
1835
+ #endif
1836
+
1678
1837
  _LIBCPP_INLINE_VISIBILITY
1679
1838
  iterator upper_bound(const key_type& __k)
1680
1839
  {return __tree_.upper_bound(__k);}
1681
1840
  _LIBCPP_INLINE_VISIBILITY
1682
1841
  const_iterator upper_bound(const key_type& __k) const
1683
1842
  {return __tree_.upper_bound(__k);}
1843
+ #if _LIBCPP_STD_VER > 11
1844
+ template <typename _K2>
1845
+ _LIBCPP_INLINE_VISIBILITY
1846
+ typename enable_if<__is_transparent<_Compare, _K2>::value,iterator>::type
1847
+ upper_bound(const _K2& __k) {return __tree_.upper_bound(__k);}
1848
+ template <typename _K2>
1849
+ _LIBCPP_INLINE_VISIBILITY
1850
+ typename enable_if<__is_transparent<_Compare, _K2>::value,const_iterator>::type
1851
+ upper_bound(const _K2& __k) const {return __tree_.upper_bound(__k);}
1852
+ #endif
1853
+
1684
1854
  _LIBCPP_INLINE_VISIBILITY
1685
1855
  pair<iterator,iterator> equal_range(const key_type& __k)
1686
1856
  {return __tree_.__equal_range_multi(__k);}
1687
1857
  _LIBCPP_INLINE_VISIBILITY
1688
1858
  pair<const_iterator,const_iterator> equal_range(const key_type& __k) const
1689
1859
  {return __tree_.__equal_range_multi(__k);}
1860
+ #if _LIBCPP_STD_VER > 11
1861
+ template <typename _K2>
1862
+ _LIBCPP_INLINE_VISIBILITY
1863
+ typename enable_if<__is_transparent<_Compare, _K2>::value,pair<iterator,iterator>>::type
1864
+ equal_range(const _K2& __k) {return __tree_.__equal_range_multi(__k);}
1865
+ template <typename _K2>
1866
+ _LIBCPP_INLINE_VISIBILITY
1867
+ typename enable_if<__is_transparent<_Compare, _K2>::value,pair<const_iterator,const_iterator>>::type
1868
+ equal_range(const _K2& __k) const {return __tree_.__equal_range_multi(__k);}
1869
+ #endif
1690
1870
 
1691
1871
  private:
1692
1872
  typedef typename __base::__node __node;