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.
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;