webruby 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1364) hide show
  1. checksums.yaml +7 -0
  2. data/bin/webruby +36 -0
  3. data/driver/driver.c +50 -0
  4. data/driver/main.c +40 -0
  5. data/lib/webruby/app.rb +13 -0
  6. data/lib/webruby/config.rb +61 -0
  7. data/lib/webruby/environment.rb +32 -0
  8. data/lib/webruby/rake/files.rake +66 -0
  9. data/lib/webruby/rake/general.rake +22 -0
  10. data/lib/webruby/rake/mruby.rake +44 -0
  11. data/lib/webruby/utility.rb +132 -0
  12. data/lib/webruby.rb +10 -0
  13. data/modules/emscripten/AUTHORS +89 -0
  14. data/modules/emscripten/LICENSE +68 -0
  15. data/modules/emscripten/README.markdown +14 -0
  16. data/modules/emscripten/cmake/Platform/Emscripten.cmake +61 -0
  17. data/modules/emscripten/cmake/Platform/Emscripten_unix.cmake +24 -0
  18. data/modules/emscripten/em++ +12 -0
  19. data/modules/emscripten/em++.bat +2 -0
  20. data/modules/emscripten/em-config +24 -0
  21. data/modules/emscripten/em-config.bat +2 -0
  22. data/modules/emscripten/emar +24 -0
  23. data/modules/emscripten/emar.bat +2 -0
  24. data/modules/emscripten/emcc +1744 -0
  25. data/modules/emscripten/emcc.bat +2 -0
  26. data/modules/emscripten/emcc.py +5 -0
  27. data/modules/emscripten/emconfigure +27 -0
  28. data/modules/emscripten/emconfigure.bat +2 -0
  29. data/modules/emscripten/emlibtool +11 -0
  30. data/modules/emscripten/emlibtool.bat +2 -0
  31. data/modules/emscripten/emlink.py +293 -0
  32. data/modules/emscripten/emmake +29 -0
  33. data/modules/emscripten/emmake.bat +2 -0
  34. data/modules/emscripten/emranlib +9 -0
  35. data/modules/emscripten/emranlib.bat +2 -0
  36. data/modules/emscripten/emscons +20 -0
  37. data/modules/emscripten/emscripten.py +835 -0
  38. data/modules/emscripten/patches/README +4 -0
  39. data/modules/emscripten/patches/series +2 -0
  40. data/modules/emscripten/scons-tools/closure.py +28 -0
  41. data/modules/emscripten/scons-tools/emscripten.py +359 -0
  42. data/modules/emscripten/scons-tools/llvm.py +33 -0
  43. data/modules/emscripten/src/analyzer.js +1695 -0
  44. data/modules/emscripten/src/compiler.html +48 -0
  45. data/modules/emscripten/src/compiler.js +298 -0
  46. data/modules/emscripten/src/corruptionCheck.js +98 -0
  47. data/modules/emscripten/src/determinstic.js +20 -0
  48. data/modules/emscripten/src/embind/embind.js +1677 -0
  49. data/modules/emscripten/src/embind/emval.js +283 -0
  50. data/modules/emscripten/src/experimental/allow_loopvars_from_memsetcpy_inasm.diff +97 -0
  51. data/modules/emscripten/src/experimental/batching.diff +44 -0
  52. data/modules/emscripten/src/experimental/functypeopt.diff +113 -0
  53. data/modules/emscripten/src/experimental/multiple_heaps.diff +175 -0
  54. data/modules/emscripten/src/experimental/noncallgraphprofiling.diff +197 -0
  55. data/modules/emscripten/src/experimental/optimize_memcpy_for_ta1.diff +124 -0
  56. data/modules/emscripten/src/experimental/remove__label__s.diff +140 -0
  57. data/modules/emscripten/src/experimental/renderer_cache_hash.diff +99 -0
  58. data/modules/emscripten/src/experimental/sdl_key_forwarding.diff +57 -0
  59. data/modules/emscripten/src/experimental/simplifyGeneratedFunctionsDetection.diff +336 -0
  60. data/modules/emscripten/src/experimental/stringCache.diff +147 -0
  61. data/modules/emscripten/src/fastLong.js +299 -0
  62. data/modules/emscripten/src/framework.js +257 -0
  63. data/modules/emscripten/src/gl-matrix.js +1952 -0
  64. data/modules/emscripten/src/headless.js +904 -0
  65. data/modules/emscripten/src/intertyper.js +1050 -0
  66. data/modules/emscripten/src/jsifier.js +1827 -0
  67. data/modules/emscripten/src/library.js +8270 -0
  68. data/modules/emscripten/src/library_browser.js +911 -0
  69. data/modules/emscripten/src/library_egl.js +491 -0
  70. data/modules/emscripten/src/library_gc.js +236 -0
  71. data/modules/emscripten/src/library_gl.js +4452 -0
  72. data/modules/emscripten/src/library_glfw.js +576 -0
  73. data/modules/emscripten/src/library_glut.js +449 -0
  74. data/modules/emscripten/src/library_jansson.js +320 -0
  75. data/modules/emscripten/src/library_openal.js +602 -0
  76. data/modules/emscripten/src/library_sdl.js +2024 -0
  77. data/modules/emscripten/src/library_strtok_r.c +97 -0
  78. data/modules/emscripten/src/library_xlib.js +23 -0
  79. data/modules/emscripten/src/long.js +1609 -0
  80. data/modules/emscripten/src/modules.js +491 -0
  81. data/modules/emscripten/src/parseTools.js +2474 -0
  82. data/modules/emscripten/src/postamble.js +170 -0
  83. data/modules/emscripten/src/postamble_sharedlib.js +16 -0
  84. data/modules/emscripten/src/preamble.js +914 -0
  85. data/modules/emscripten/src/preamble_sharedlib.js +25 -0
  86. data/modules/emscripten/src/relooper/README.markdown +14 -0
  87. data/modules/emscripten/src/relooper/Relooper.cpp +1236 -0
  88. data/modules/emscripten/src/relooper/Relooper.h +250 -0
  89. data/modules/emscripten/src/relooper/doit.sh +70 -0
  90. data/modules/emscripten/src/relooper/emscripten/glue.js +57 -0
  91. data/modules/emscripten/src/relooper/emscripten/test.js +44 -0
  92. data/modules/emscripten/src/relooper/fuzzer.py +116 -0
  93. data/modules/emscripten/src/relooper/ministring.h +35 -0
  94. data/modules/emscripten/src/relooper/paper.pdf +0 -0
  95. data/modules/emscripten/src/relooper/test.cpp +262 -0
  96. data/modules/emscripten/src/relooper/test.txt +155 -0
  97. data/modules/emscripten/src/relooper/test2.c +44 -0
  98. data/modules/emscripten/src/relooper/test2.txt +12 -0
  99. data/modules/emscripten/src/relooper/test3.c +42 -0
  100. data/modules/emscripten/src/relooper/test3.txt +27 -0
  101. data/modules/emscripten/src/relooper/test4.cpp +40 -0
  102. data/modules/emscripten/src/relooper/test4.txt +23 -0
  103. data/modules/emscripten/src/relooper/test5.cpp +40 -0
  104. data/modules/emscripten/src/relooper/test5.txt +32 -0
  105. data/modules/emscripten/src/relooper/test6.cpp +31 -0
  106. data/modules/emscripten/src/relooper/test6.txt +12 -0
  107. data/modules/emscripten/src/relooper/test_dead.cpp +28 -0
  108. data/modules/emscripten/src/relooper/test_dead.txt +9 -0
  109. data/modules/emscripten/src/relooper/test_debug.cpp +30 -0
  110. data/modules/emscripten/src/relooper/test_debug.txt +128 -0
  111. data/modules/emscripten/src/relooper/test_fuzz1.cpp +52 -0
  112. data/modules/emscripten/src/relooper/test_fuzz1.txt +32 -0
  113. data/modules/emscripten/src/relooper/test_fuzz2.cpp +34 -0
  114. data/modules/emscripten/src/relooper/test_fuzz2.txt +13 -0
  115. data/modules/emscripten/src/relooper/test_fuzz3.cpp +36 -0
  116. data/modules/emscripten/src/relooper/test_fuzz3.txt +9 -0
  117. data/modules/emscripten/src/relooper/test_fuzz4.cpp +38 -0
  118. data/modules/emscripten/src/relooper/test_fuzz4.txt +19 -0
  119. data/modules/emscripten/src/relooper/test_fuzz5.cpp +57 -0
  120. data/modules/emscripten/src/relooper/test_fuzz5.txt +52 -0
  121. data/modules/emscripten/src/relooper/test_fuzz6.cpp +322 -0
  122. data/modules/emscripten/src/relooper/test_fuzz6.txt +108 -0
  123. data/modules/emscripten/src/relooper/test_inf.cpp +813 -0
  124. data/modules/emscripten/src/relooper/test_inf.txt +385 -0
  125. data/modules/emscripten/src/relooper/testit.sh +62 -0
  126. data/modules/emscripten/src/relooper/updateit.sh +17 -0
  127. data/modules/emscripten/src/relooper.js +11516 -0
  128. data/modules/emscripten/src/relooper.js.raw.js +11511 -0
  129. data/modules/emscripten/src/runtime.js +546 -0
  130. data/modules/emscripten/src/settings.js +1284 -0
  131. data/modules/emscripten/src/shell.html +92 -0
  132. data/modules/emscripten/src/shell.js +153 -0
  133. data/modules/emscripten/src/shell_sharedlib.js +12 -0
  134. data/modules/emscripten/src/socket.io.js +3870 -0
  135. data/modules/emscripten/src/utility.js +379 -0
  136. data/modules/emscripten/src/wrtcp.js +821 -0
  137. data/modules/emscripten/system/include/AL/al.h +172 -0
  138. data/modules/emscripten/system/include/AL/alc.h +84 -0
  139. data/modules/emscripten/system/include/EGL/egl.h +329 -0
  140. data/modules/emscripten/system/include/EGL/eglext.h +398 -0
  141. data/modules/emscripten/system/include/EGL/eglplatform.h +141 -0
  142. data/modules/emscripten/system/include/GL/freeglut_std.h +628 -0
  143. data/modules/emscripten/system/include/GL/gl.h +2241 -0
  144. data/modules/emscripten/system/include/GL/glew.h +6 -0
  145. data/modules/emscripten/system/include/GL/glext.h +11127 -0
  146. data/modules/emscripten/system/include/GL/glfw.h +518 -0
  147. data/modules/emscripten/system/include/GL/glu.h +353 -0
  148. data/modules/emscripten/system/include/GL/glut.h +21 -0
  149. data/modules/emscripten/system/include/GLES/gl.h +770 -0
  150. data/modules/emscripten/system/include/GLES/glext.h +1278 -0
  151. data/modules/emscripten/system/include/GLES/glplatform.h +30 -0
  152. data/modules/emscripten/system/include/GLES2/gl2.h +621 -0
  153. data/modules/emscripten/system/include/GLES2/gl2ext.h +803 -0
  154. data/modules/emscripten/system/include/GLES2/gl2platform.h +30 -0
  155. data/modules/emscripten/system/include/KHR/khrplatform.h +277 -0
  156. data/modules/emscripten/system/include/SDL/COPYING +19 -0
  157. data/modules/emscripten/system/include/SDL/SDL.h +162 -0
  158. data/modules/emscripten/system/include/SDL/SDL_assert.h +241 -0
  159. data/modules/emscripten/system/include/SDL/SDL_atomic.h +318 -0
  160. data/modules/emscripten/system/include/SDL/SDL_audio.h +509 -0
  161. data/modules/emscripten/system/include/SDL/SDL_blendmode.h +60 -0
  162. data/modules/emscripten/system/include/SDL/SDL_clipboard.h +75 -0
  163. data/modules/emscripten/system/include/SDL/SDL_compat.h +365 -0
  164. data/modules/emscripten/system/include/SDL/SDL_config.h +48 -0
  165. data/modules/emscripten/system/include/SDL/SDL_config.h.in +297 -0
  166. data/modules/emscripten/system/include/SDL/SDL_config_android.h +133 -0
  167. data/modules/emscripten/system/include/SDL/SDL_config_iphoneos.h +148 -0
  168. data/modules/emscripten/system/include/SDL/SDL_config_macosx.h +172 -0
  169. data/modules/emscripten/system/include/SDL/SDL_config_minimal.h +74 -0
  170. data/modules/emscripten/system/include/SDL/SDL_config_nintendods.h +129 -0
  171. data/modules/emscripten/system/include/SDL/SDL_config_pandora.h +125 -0
  172. data/modules/emscripten/system/include/SDL/SDL_config_windows.h +207 -0
  173. data/modules/emscripten/system/include/SDL/SDL_config_wiz.h +119 -0
  174. data/modules/emscripten/system/include/SDL/SDL_copying.h +20 -0
  175. data/modules/emscripten/system/include/SDL/SDL_cpuinfo.h +150 -0
  176. data/modules/emscripten/system/include/SDL/SDL_endian.h +248 -0
  177. data/modules/emscripten/system/include/SDL/SDL_error.h +77 -0
  178. data/modules/emscripten/system/include/SDL/SDL_events.h +639 -0
  179. data/modules/emscripten/system/include/SDL/SDL_gesture.h +91 -0
  180. data/modules/emscripten/system/include/SDL/SDL_gfxPrimitives.h +246 -0
  181. data/modules/emscripten/system/include/SDL/SDL_haptic.h +1200 -0
  182. data/modules/emscripten/system/include/SDL/SDL_hints.h +206 -0
  183. data/modules/emscripten/system/include/SDL/SDL_image.h +138 -0
  184. data/modules/emscripten/system/include/SDL/SDL_input.h +87 -0
  185. data/modules/emscripten/system/include/SDL/SDL_joystick.h +208 -0
  186. data/modules/emscripten/system/include/SDL/SDL_keyboard.h +169 -0
  187. data/modules/emscripten/system/include/SDL/SDL_keycode.h +344 -0
  188. data/modules/emscripten/system/include/SDL/SDL_loadso.h +85 -0
  189. data/modules/emscripten/system/include/SDL/SDL_log.h +211 -0
  190. data/modules/emscripten/system/include/SDL/SDL_main.h +98 -0
  191. data/modules/emscripten/system/include/SDL/SDL_mixer.h +634 -0
  192. data/modules/emscripten/system/include/SDL/SDL_mouse.h +213 -0
  193. data/modules/emscripten/system/include/SDL/SDL_mutex.h +248 -0
  194. data/modules/emscripten/system/include/SDL/SDL_name.h +11 -0
  195. data/modules/emscripten/system/include/SDL/SDL_opengl.h +11116 -0
  196. data/modules/emscripten/system/include/SDL/SDL_opengles.h +38 -0
  197. data/modules/emscripten/system/include/SDL/SDL_opengles2.h +38 -0
  198. data/modules/emscripten/system/include/SDL/SDL_pixels.h +423 -0
  199. data/modules/emscripten/system/include/SDL/SDL_platform.h +160 -0
  200. data/modules/emscripten/system/include/SDL/SDL_power.h +79 -0
  201. data/modules/emscripten/system/include/SDL/SDL_quit.h +58 -0
  202. data/modules/emscripten/system/include/SDL/SDL_rect.h +136 -0
  203. data/modules/emscripten/system/include/SDL/SDL_render.h +615 -0
  204. data/modules/emscripten/system/include/SDL/SDL_revision.h +2 -0
  205. data/modules/emscripten/system/include/SDL/SDL_revision.h.orig +2 -0
  206. data/modules/emscripten/system/include/SDL/SDL_rotozoom.h +123 -0
  207. data/modules/emscripten/system/include/SDL/SDL_rwops.h +220 -0
  208. data/modules/emscripten/system/include/SDL/SDL_scancode.h +398 -0
  209. data/modules/emscripten/system/include/SDL/SDL_shape.h +147 -0
  210. data/modules/emscripten/system/include/SDL/SDL_stdinc.h +764 -0
  211. data/modules/emscripten/system/include/SDL/SDL_surface.h +499 -0
  212. data/modules/emscripten/system/include/SDL/SDL_syswm.h +241 -0
  213. data/modules/emscripten/system/include/SDL/SDL_thread.h +182 -0
  214. data/modules/emscripten/system/include/SDL/SDL_timer.h +108 -0
  215. data/modules/emscripten/system/include/SDL/SDL_touch.h +124 -0
  216. data/modules/emscripten/system/include/SDL/SDL_ttf.h +249 -0
  217. data/modules/emscripten/system/include/SDL/SDL_types.h +29 -0
  218. data/modules/emscripten/system/include/SDL/SDL_version.h +166 -0
  219. data/modules/emscripten/system/include/SDL/SDL_video.h +820 -0
  220. data/modules/emscripten/system/include/SDL/begin_code.h +135 -0
  221. data/modules/emscripten/system/include/SDL/close_code.h +37 -0
  222. data/modules/emscripten/system/include/X11/X.h +717 -0
  223. data/modules/emscripten/system/include/X11/Xatom.h +79 -0
  224. data/modules/emscripten/system/include/X11/Xfuncproto.h +127 -0
  225. data/modules/emscripten/system/include/X11/Xlib.h +4023 -0
  226. data/modules/emscripten/system/include/X11/Xosdefs.h +116 -0
  227. data/modules/emscripten/system/include/X11/Xutil.h +826 -0
  228. data/modules/emscripten/system/include/X11/keysym.h +73 -0
  229. data/modules/emscripten/system/include/X11/keysymdef.h +2389 -0
  230. data/modules/emscripten/system/include/bsd/float.h +91 -0
  231. data/modules/emscripten/system/include/bsd/readme.txt +2 -0
  232. data/modules/emscripten/system/include/bsd/sys/mman.h +180 -0
  233. data/modules/emscripten/system/include/bsd/sys/utsname.h +70 -0
  234. data/modules/emscripten/system/include/dlfcn.h +31 -0
  235. data/modules/emscripten/system/include/emscripten/bind.h +1210 -0
  236. data/modules/emscripten/system/include/emscripten/emscripten.h +388 -0
  237. data/modules/emscripten/system/include/emscripten/val.h +311 -0
  238. data/modules/emscripten/system/include/emscripten/wire.h +393 -0
  239. data/modules/emscripten/system/include/err.h +95 -0
  240. data/modules/emscripten/system/include/execinfo.h +44 -0
  241. data/modules/emscripten/system/include/features.h +3 -0
  242. data/modules/emscripten/system/include/gc.h +70 -0
  243. data/modules/emscripten/system/include/gfx/png.h +3798 -0
  244. data/modules/emscripten/system/include/gfx/pngconf.h +1665 -0
  245. data/modules/emscripten/system/include/gfx/tiff.h +654 -0
  246. data/modules/emscripten/system/include/gfx/tiffconf.h +104 -0
  247. data/modules/emscripten/system/include/gfx/tiffio.h +526 -0
  248. data/modules/emscripten/system/include/gfx/tiffvers.h +9 -0
  249. data/modules/emscripten/system/include/jansson.h +323 -0
  250. data/modules/emscripten/system/include/jansson_config.h +54 -0
  251. data/modules/emscripten/system/include/libc/_ansi.h +135 -0
  252. data/modules/emscripten/system/include/libc/_syslist.h +40 -0
  253. data/modules/emscripten/system/include/libc/alloca.h +21 -0
  254. data/modules/emscripten/system/include/libc/ar.h +69 -0
  255. data/modules/emscripten/system/include/libc/argz.h +33 -0
  256. data/modules/emscripten/system/include/libc/assert.h +46 -0
  257. data/modules/emscripten/system/include/libc/complex.h +124 -0
  258. data/modules/emscripten/system/include/libc/ctype.h +196 -0
  259. data/modules/emscripten/system/include/libc/dirent.h +16 -0
  260. data/modules/emscripten/system/include/libc/endian.h +3 -0
  261. data/modules/emscripten/system/include/libc/envlock.h +15 -0
  262. data/modules/emscripten/system/include/libc/envz.h +16 -0
  263. data/modules/emscripten/system/include/libc/errno.h +11 -0
  264. data/modules/emscripten/system/include/libc/fastmath.h +13 -0
  265. data/modules/emscripten/system/include/libc/fcntl.h +1 -0
  266. data/modules/emscripten/system/include/libc/fnmatch.h +55 -0
  267. data/modules/emscripten/system/include/libc/getopt.h +196 -0
  268. data/modules/emscripten/system/include/libc/glob.h +89 -0
  269. data/modules/emscripten/system/include/libc/grp.h +94 -0
  270. data/modules/emscripten/system/include/libc/iconv.h +62 -0
  271. data/modules/emscripten/system/include/libc/ieeefp.h +256 -0
  272. data/modules/emscripten/system/include/libc/ifaddrs.h +64 -0
  273. data/modules/emscripten/system/include/libc/inttypes.h +290 -0
  274. data/modules/emscripten/system/include/libc/iso646.h +43 -0
  275. data/modules/emscripten/system/include/libc/langinfo.h +316 -0
  276. data/modules/emscripten/system/include/libc/libgen.h +23 -0
  277. data/modules/emscripten/system/include/libc/limits.h +155 -0
  278. data/modules/emscripten/system/include/libc/locale.h +80 -0
  279. data/modules/emscripten/system/include/libc/machine/_default_types.h +121 -0
  280. data/modules/emscripten/system/include/libc/machine/_types.h +8 -0
  281. data/modules/emscripten/system/include/libc/machine/ansi.h +1 -0
  282. data/modules/emscripten/system/include/libc/machine/endian.h +31 -0
  283. data/modules/emscripten/system/include/libc/machine/fastmath.h +100 -0
  284. data/modules/emscripten/system/include/libc/machine/ieeefp.h +376 -0
  285. data/modules/emscripten/system/include/libc/machine/malloc.h +8 -0
  286. data/modules/emscripten/system/include/libc/machine/param.h +1 -0
  287. data/modules/emscripten/system/include/libc/machine/setjmp-dj.h +43 -0
  288. data/modules/emscripten/system/include/libc/machine/setjmp.h +361 -0
  289. data/modules/emscripten/system/include/libc/machine/stdlib.h +8 -0
  290. data/modules/emscripten/system/include/libc/machine/termios.h +1 -0
  291. data/modules/emscripten/system/include/libc/machine/time.h +19 -0
  292. data/modules/emscripten/system/include/libc/machine/types.h +30 -0
  293. data/modules/emscripten/system/include/libc/malloc.h +169 -0
  294. data/modules/emscripten/system/include/libc/math.h +594 -0
  295. data/modules/emscripten/system/include/libc/newlib.h +2 -0
  296. data/modules/emscripten/system/include/libc/paths.h +7 -0
  297. data/modules/emscripten/system/include/libc/process.h +44 -0
  298. data/modules/emscripten/system/include/libc/pthread.h +362 -0
  299. data/modules/emscripten/system/include/libc/pwd.h +78 -0
  300. data/modules/emscripten/system/include/libc/readme.txt +3 -0
  301. data/modules/emscripten/system/include/libc/reent.h +183 -0
  302. data/modules/emscripten/system/include/libc/regdef.h +7 -0
  303. data/modules/emscripten/system/include/libc/regex.h +102 -0
  304. data/modules/emscripten/system/include/libc/sched.h +97 -0
  305. data/modules/emscripten/system/include/libc/search.h +59 -0
  306. data/modules/emscripten/system/include/libc/setjmp.h +20 -0
  307. data/modules/emscripten/system/include/libc/signal.h +30 -0
  308. data/modules/emscripten/system/include/libc/stdarg.h +50 -0
  309. data/modules/emscripten/system/include/libc/stddef.h +64 -0
  310. data/modules/emscripten/system/include/libc/stdint.h +493 -0
  311. data/modules/emscripten/system/include/libc/stdio.h +694 -0
  312. data/modules/emscripten/system/include/libc/stdlib.h +230 -0
  313. data/modules/emscripten/system/include/libc/string.h +105 -0
  314. data/modules/emscripten/system/include/libc/strings.h +35 -0
  315. data/modules/emscripten/system/include/libc/sys/_default_fcntl.h +223 -0
  316. data/modules/emscripten/system/include/libc/sys/_types.h +93 -0
  317. data/modules/emscripten/system/include/libc/sys/cdefs.h +123 -0
  318. data/modules/emscripten/system/include/libc/sys/config.h +255 -0
  319. data/modules/emscripten/system/include/libc/sys/custom_file.h +2 -0
  320. data/modules/emscripten/system/include/libc/sys/dir.h +10 -0
  321. data/modules/emscripten/system/include/libc/sys/dirent.h +58 -0
  322. data/modules/emscripten/system/include/libc/sys/errno.h +190 -0
  323. data/modules/emscripten/system/include/libc/sys/fcntl.h +4 -0
  324. data/modules/emscripten/system/include/libc/sys/features.h +212 -0
  325. data/modules/emscripten/system/include/libc/sys/file.h +2 -0
  326. data/modules/emscripten/system/include/libc/sys/iconvnls.h +77 -0
  327. data/modules/emscripten/system/include/libc/sys/lock.h +24 -0
  328. data/modules/emscripten/system/include/libc/sys/param.h +25 -0
  329. data/modules/emscripten/system/include/libc/sys/queue.h +471 -0
  330. data/modules/emscripten/system/include/libc/sys/reent.h +843 -0
  331. data/modules/emscripten/system/include/libc/sys/resource.h +59 -0
  332. data/modules/emscripten/system/include/libc/sys/sched.h +67 -0
  333. data/modules/emscripten/system/include/libc/sys/signal.h +314 -0
  334. data/modules/emscripten/system/include/libc/sys/stat.h +222 -0
  335. data/modules/emscripten/system/include/libc/sys/stdio.h +27 -0
  336. data/modules/emscripten/system/include/libc/sys/string.h +2 -0
  337. data/modules/emscripten/system/include/libc/sys/syslimits.h +65 -0
  338. data/modules/emscripten/system/include/libc/sys/termios.h +280 -0
  339. data/modules/emscripten/system/include/libc/sys/time.h +85 -0
  340. data/modules/emscripten/system/include/libc/sys/timeb.h +39 -0
  341. data/modules/emscripten/system/include/libc/sys/times.h +28 -0
  342. data/modules/emscripten/system/include/libc/sys/ttydefaults.h +97 -0
  343. data/modules/emscripten/system/include/libc/sys/types.h +481 -0
  344. data/modules/emscripten/system/include/libc/sys/unistd.h +514 -0
  345. data/modules/emscripten/system/include/libc/sys/utime.h +26 -0
  346. data/modules/emscripten/system/include/libc/sys/wait.h +40 -0
  347. data/modules/emscripten/system/include/libc/tar.h +39 -0
  348. data/modules/emscripten/system/include/libc/termios.h +7 -0
  349. data/modules/emscripten/system/include/libc/time.h +273 -0
  350. data/modules/emscripten/system/include/libc/unctrl.h +46 -0
  351. data/modules/emscripten/system/include/libc/unistd.h +6 -0
  352. data/modules/emscripten/system/include/libc/utime.h +12 -0
  353. data/modules/emscripten/system/include/libc/utmp.h +8 -0
  354. data/modules/emscripten/system/include/libc/wchar.h +194 -0
  355. data/modules/emscripten/system/include/libc/wctype.h +47 -0
  356. data/modules/emscripten/system/include/libc/wordexp.h +53 -0
  357. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +91 -0
  358. data/modules/emscripten/system/include/libcxx/LICENSE.txt +76 -0
  359. data/modules/emscripten/system/include/libcxx/__bit_reference +1268 -0
  360. data/modules/emscripten/system/include/libcxx/__config +485 -0
  361. data/modules/emscripten/system/include/libcxx/__debug +193 -0
  362. data/modules/emscripten/system/include/libcxx/__functional_03 +2130 -0
  363. data/modules/emscripten/system/include/libcxx/__functional_base +437 -0
  364. data/modules/emscripten/system/include/libcxx/__functional_base_03 +1087 -0
  365. data/modules/emscripten/system/include/libcxx/__hash_table +1945 -0
  366. data/modules/emscripten/system/include/libcxx/__locale +1435 -0
  367. data/modules/emscripten/system/include/libcxx/__mutex_base +438 -0
  368. data/modules/emscripten/system/include/libcxx/__split_buffer +654 -0
  369. data/modules/emscripten/system/include/libcxx/__sso_allocator +77 -0
  370. data/modules/emscripten/system/include/libcxx/__std_stream +317 -0
  371. data/modules/emscripten/system/include/libcxx/__tree +2293 -0
  372. data/modules/emscripten/system/include/libcxx/__tuple +305 -0
  373. data/modules/emscripten/system/include/libcxx/__tuple_03 +27 -0
  374. data/modules/emscripten/system/include/libcxx/__undef_min_max +19 -0
  375. data/modules/emscripten/system/include/libcxx/algorithm +5458 -0
  376. data/modules/emscripten/system/include/libcxx/array +341 -0
  377. data/modules/emscripten/system/include/libcxx/atomic +1521 -0
  378. data/modules/emscripten/system/include/libcxx/bitset +1081 -0
  379. data/modules/emscripten/system/include/libcxx/cassert +25 -0
  380. data/modules/emscripten/system/include/libcxx/ccomplex +29 -0
  381. data/modules/emscripten/system/include/libcxx/cctype +164 -0
  382. data/modules/emscripten/system/include/libcxx/cerrno +393 -0
  383. data/modules/emscripten/system/include/libcxx/cfenv +82 -0
  384. data/modules/emscripten/system/include/libcxx/cfloat +78 -0
  385. data/modules/emscripten/system/include/libcxx/chrono +898 -0
  386. data/modules/emscripten/system/include/libcxx/cinttypes +259 -0
  387. data/modules/emscripten/system/include/libcxx/ciso646 +25 -0
  388. data/modules/emscripten/system/include/libcxx/climits +48 -0
  389. data/modules/emscripten/system/include/libcxx/clocale +53 -0
  390. data/modules/emscripten/system/include/libcxx/cmath +1683 -0
  391. data/modules/emscripten/system/include/libcxx/codecvt +547 -0
  392. data/modules/emscripten/system/include/libcxx/complex +1526 -0
  393. data/modules/emscripten/system/include/libcxx/complex.h +35 -0
  394. data/modules/emscripten/system/include/libcxx/condition_variable +256 -0
  395. data/modules/emscripten/system/include/libcxx/csetjmp +52 -0
  396. data/modules/emscripten/system/include/libcxx/csignal +58 -0
  397. data/modules/emscripten/system/include/libcxx/cstdarg +48 -0
  398. data/modules/emscripten/system/include/libcxx/cstdbool +32 -0
  399. data/modules/emscripten/system/include/libcxx/cstddef +103 -0
  400. data/modules/emscripten/system/include/libcxx/cstdint +191 -0
  401. data/modules/emscripten/system/include/libcxx/cstdio +175 -0
  402. data/modules/emscripten/system/include/libcxx/cstdlib +172 -0
  403. data/modules/emscripten/system/include/libcxx/cstring +112 -0
  404. data/modules/emscripten/system/include/libcxx/ctgmath +29 -0
  405. data/modules/emscripten/system/include/libcxx/ctime +72 -0
  406. data/modules/emscripten/system/include/libcxx/cwchar +208 -0
  407. data/modules/emscripten/system/include/libcxx/cwctype +213 -0
  408. data/modules/emscripten/system/include/libcxx/deque +2846 -0
  409. data/modules/emscripten/system/include/libcxx/exception +250 -0
  410. data/modules/emscripten/system/include/libcxx/ext/__hash +46 -0
  411. data/modules/emscripten/system/include/libcxx/ext/hash_map +1003 -0
  412. data/modules/emscripten/system/include/libcxx/ext/hash_set +657 -0
  413. data/modules/emscripten/system/include/libcxx/forward_list +1636 -0
  414. data/modules/emscripten/system/include/libcxx/fstream +1415 -0
  415. data/modules/emscripten/system/include/libcxx/functional +2063 -0
  416. data/modules/emscripten/system/include/libcxx/future +2505 -0
  417. data/modules/emscripten/system/include/libcxx/initializer_list +105 -0
  418. data/modules/emscripten/system/include/libcxx/iomanip +504 -0
  419. data/modules/emscripten/system/include/libcxx/ios +988 -0
  420. data/modules/emscripten/system/include/libcxx/iosfwd +194 -0
  421. data/modules/emscripten/system/include/libcxx/iostream +60 -0
  422. data/modules/emscripten/system/include/libcxx/istream +1713 -0
  423. data/modules/emscripten/system/include/libcxx/iterator +1869 -0
  424. data/modules/emscripten/system/include/libcxx/limits +809 -0
  425. data/modules/emscripten/system/include/libcxx/list +2275 -0
  426. data/modules/emscripten/system/include/libcxx/locale +4591 -0
  427. data/modules/emscripten/system/include/libcxx/map +1924 -0
  428. data/modules/emscripten/system/include/libcxx/memory +5437 -0
  429. data/modules/emscripten/system/include/libcxx/mutex +566 -0
  430. data/modules/emscripten/system/include/libcxx/new +117 -0
  431. data/modules/emscripten/system/include/libcxx/numeric +197 -0
  432. data/modules/emscripten/system/include/libcxx/ostream +1286 -0
  433. data/modules/emscripten/system/include/libcxx/queue +717 -0
  434. data/modules/emscripten/system/include/libcxx/random +6750 -0
  435. data/modules/emscripten/system/include/libcxx/ratio +487 -0
  436. data/modules/emscripten/system/include/libcxx/readme.txt +1 -0
  437. data/modules/emscripten/system/include/libcxx/regex +6439 -0
  438. data/modules/emscripten/system/include/libcxx/scoped_allocator +578 -0
  439. data/modules/emscripten/system/include/libcxx/set +1025 -0
  440. data/modules/emscripten/system/include/libcxx/sstream +888 -0
  441. data/modules/emscripten/system/include/libcxx/stack +292 -0
  442. data/modules/emscripten/system/include/libcxx/stdexcept +162 -0
  443. data/modules/emscripten/system/include/libcxx/streambuf +564 -0
  444. data/modules/emscripten/system/include/libcxx/string +3987 -0
  445. data/modules/emscripten/system/include/libcxx/strstream +400 -0
  446. data/modules/emscripten/system/include/libcxx/support/solaris/floatingpoint.h +5 -0
  447. data/modules/emscripten/system/include/libcxx/support/solaris/wchar.h +38 -0
  448. data/modules/emscripten/system/include/libcxx/support/solaris/xlocale.h +146 -0
  449. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +79 -0
  450. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +116 -0
  451. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +113 -0
  452. data/modules/emscripten/system/include/libcxx/support/win32/support.h +115 -0
  453. data/modules/emscripten/system/include/libcxx/system_error +636 -0
  454. data/modules/emscripten/system/include/libcxx/tgmath.h +29 -0
  455. data/modules/emscripten/system/include/libcxx/thread +459 -0
  456. data/modules/emscripten/system/include/libcxx/tuple +1092 -0
  457. data/modules/emscripten/system/include/libcxx/type_traits +3040 -0
  458. data/modules/emscripten/system/include/libcxx/typeindex +103 -0
  459. data/modules/emscripten/system/include/libcxx/typeinfo +124 -0
  460. data/modules/emscripten/system/include/libcxx/unordered_map +1864 -0
  461. data/modules/emscripten/system/include/libcxx/unordered_set +1144 -0
  462. data/modules/emscripten/system/include/libcxx/utility +583 -0
  463. data/modules/emscripten/system/include/libcxx/valarray +4779 -0
  464. data/modules/emscripten/system/include/libcxx/vector +3228 -0
  465. data/modules/emscripten/system/include/memory.h +10 -0
  466. data/modules/emscripten/system/include/mntent.h +23 -0
  467. data/modules/emscripten/system/include/net/arpa/inet.h +32 -0
  468. data/modules/emscripten/system/include/net/arpa/nameser.h +535 -0
  469. data/modules/emscripten/system/include/net/arpa/nameser_compat.h +187 -0
  470. data/modules/emscripten/system/include/net/if.h +87 -0
  471. data/modules/emscripten/system/include/net/netinet/in.h +166 -0
  472. data/modules/emscripten/system/include/net/netinet/tcp.h +246 -0
  473. data/modules/emscripten/system/include/net/resolv.h +389 -0
  474. data/modules/emscripten/system/include/netdb.h +94 -0
  475. data/modules/emscripten/system/include/nl_types.h +19 -0
  476. data/modules/emscripten/system/include/poll.h +3 -0
  477. data/modules/emscripten/system/include/pty.h +6 -0
  478. data/modules/emscripten/system/include/semaphore.h +31 -0
  479. data/modules/emscripten/system/include/spawn.h +105 -0
  480. data/modules/emscripten/system/include/stdbool.h +16 -0
  481. data/modules/emscripten/system/include/sys/bitypes.h +3 -0
  482. data/modules/emscripten/system/include/sys/io.h +14 -0
  483. data/modules/emscripten/system/include/sys/ioctl.h +26 -0
  484. data/modules/emscripten/system/include/sys/poll.h +31 -0
  485. data/modules/emscripten/system/include/sys/select.h +14 -0
  486. data/modules/emscripten/system/include/sys/socket.h +101 -0
  487. data/modules/emscripten/system/include/sys/socketvar.h +3 -0
  488. data/modules/emscripten/system/include/sys/statvfs.h +32 -0
  489. data/modules/emscripten/system/include/sys/sysctl.h +14 -0
  490. data/modules/emscripten/system/include/sys/uio.h +22 -0
  491. data/modules/emscripten/system/include/sys/un.h +66 -0
  492. data/modules/emscripten/system/include/sysexits.h +108 -0
  493. data/modules/emscripten/system/include/unwind.h +154 -0
  494. data/modules/emscripten/system/include/xlocale.h +47 -0
  495. data/modules/emscripten/system/include/zconf.h +428 -0
  496. data/modules/emscripten/system/include/zlib.h +1613 -0
  497. data/modules/emscripten/system/lib/compiler-rt/LICENSE.TXT +97 -0
  498. data/modules/emscripten/system/lib/compiler-rt/divdi3.c +47 -0
  499. data/modules/emscripten/system/lib/compiler-rt/int_endianness.h +116 -0
  500. data/modules/emscripten/system/lib/compiler-rt/int_lib.h +46 -0
  501. data/modules/emscripten/system/lib/compiler-rt/int_math.h +67 -0
  502. data/modules/emscripten/system/lib/compiler-rt/int_types.h +140 -0
  503. data/modules/emscripten/system/lib/compiler-rt/int_util.h +29 -0
  504. data/modules/emscripten/system/lib/compiler-rt/muldi3.c +56 -0
  505. data/modules/emscripten/system/lib/compiler-rt/readme.txt +20 -0
  506. data/modules/emscripten/system/lib/compiler-rt/udivdi3.c +36 -0
  507. data/modules/emscripten/system/lib/compiler-rt/udivmoddi4.c +251 -0
  508. data/modules/emscripten/system/lib/debugging.cpp +24 -0
  509. data/modules/emscripten/system/lib/dlmalloc.c +6299 -0
  510. data/modules/emscripten/system/lib/embind/bind.cpp +63 -0
  511. data/modules/emscripten/system/lib/libc/gen/err.c +49 -0
  512. data/modules/emscripten/system/lib/libc/gen/errx.c +49 -0
  513. data/modules/emscripten/system/lib/libc/gen/verr.c +58 -0
  514. data/modules/emscripten/system/lib/libc/gen/verrx.c +51 -0
  515. data/modules/emscripten/system/lib/libc/gen/vwarn.c +55 -0
  516. data/modules/emscripten/system/lib/libc/gen/vwarnx.c +48 -0
  517. data/modules/emscripten/system/lib/libc/gen/warn.c +49 -0
  518. data/modules/emscripten/system/lib/libc/gen/warnx.c +49 -0
  519. data/modules/emscripten/system/lib/libc/musl/COPYRIGHT +92 -0
  520. data/modules/emscripten/system/lib/libc/musl/readme.txt +1 -0
  521. data/modules/emscripten/system/lib/libc/musl/src/ctype/alpha.h +125 -0
  522. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswalnum.c +7 -0
  523. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswalpha.c +14 -0
  524. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswblank.c +8 -0
  525. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswcntrl.c +10 -0
  526. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswctype.c +63 -0
  527. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswdigit.c +9 -0
  528. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswgraph.c +7 -0
  529. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswlower.c +6 -0
  530. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswprint.c +19 -0
  531. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswpunct.c +12 -0
  532. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswspace.c +19 -0
  533. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswupper.c +6 -0
  534. data/modules/emscripten/system/lib/libc/musl/src/ctype/iswxdigit.c +7 -0
  535. data/modules/emscripten/system/lib/libc/musl/src/ctype/nonspacing.h +62 -0
  536. data/modules/emscripten/system/lib/libc/musl/src/ctype/punct.h +109 -0
  537. data/modules/emscripten/system/lib/libc/musl/src/ctype/towctrans.c +268 -0
  538. data/modules/emscripten/system/lib/libc/musl/src/ctype/wcswidth.c +8 -0
  539. data/modules/emscripten/system/lib/libc/musl/src/ctype/wctrans.c +16 -0
  540. data/modules/emscripten/system/lib/libc/musl/src/ctype/wcwidth.c +29 -0
  541. data/modules/emscripten/system/lib/libc/musl/src/ctype/wide.h +42 -0
  542. data/modules/emscripten/system/lib/libc/musl/src/internal/libc.c +22 -0
  543. data/modules/emscripten/system/lib/libc/musl/src/internal/libc.h +71 -0
  544. data/modules/emscripten/system/lib/libc/musl/src/multibyte/btowc.c +7 -0
  545. data/modules/emscripten/system/lib/libc/musl/src/multibyte/internal.c +38 -0
  546. data/modules/emscripten/system/lib/libc/musl/src/multibyte/internal.h +22 -0
  547. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mblen.c +17 -0
  548. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbrlen.c +18 -0
  549. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbrtowc.c +57 -0
  550. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbsinit.c +17 -0
  551. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbsnrtowcs.c +65 -0
  552. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbsrtowcs.c +100 -0
  553. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbstowcs.c +7 -0
  554. data/modules/emscripten/system/lib/libc/musl/src/multibyte/mbtowc.c +53 -0
  555. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcrtomb.c +38 -0
  556. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcsnrtombs.c +52 -0
  557. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcsrtombs.c +58 -0
  558. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wcstombs.c +7 -0
  559. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wctob.c +8 -0
  560. data/modules/emscripten/system/lib/libc/musl/src/multibyte/wctomb.c +18 -0
  561. data/modules/emscripten/system/lib/libc/musl/src/string/wcpcpy.c +6 -0
  562. data/modules/emscripten/system/lib/libc/musl/src/string/wcpncpy.c +6 -0
  563. data/modules/emscripten/system/lib/libc/musl/src/string/wcscasecmp.c +7 -0
  564. data/modules/emscripten/system/lib/libc/musl/src/string/wcscasecmp_l.c +6 -0
  565. data/modules/emscripten/system/lib/libc/musl/src/string/wcscat.c +7 -0
  566. data/modules/emscripten/system/lib/libc/musl/src/string/wcschr.c +8 -0
  567. data/modules/emscripten/system/lib/libc/musl/src/string/wcscmp.c +7 -0
  568. data/modules/emscripten/system/lib/libc/musl/src/string/wcscpy.c +8 -0
  569. data/modules/emscripten/system/lib/libc/musl/src/string/wcscspn.c +10 -0
  570. data/modules/emscripten/system/lib/libc/musl/src/string/wcsdup.c +11 -0
  571. data/modules/emscripten/system/lib/libc/musl/src/string/wcslen.c +8 -0
  572. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncasecmp.c +9 -0
  573. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncasecmp_l.c +6 -0
  574. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncat.c +10 -0
  575. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncmp.c +7 -0
  576. data/modules/emscripten/system/lib/libc/musl/src/string/wcsncpy.c +9 -0
  577. data/modules/emscripten/system/lib/libc/musl/src/string/wcsnlen.c +8 -0
  578. data/modules/emscripten/system/lib/libc/musl/src/string/wcspbrk.c +7 -0
  579. data/modules/emscripten/system/lib/libc/musl/src/string/wcsrchr.c +8 -0
  580. data/modules/emscripten/system/lib/libc/musl/src/string/wcsspn.c +8 -0
  581. data/modules/emscripten/system/lib/libc/musl/src/string/wcsstr.c +108 -0
  582. data/modules/emscripten/system/lib/libc/musl/src/string/wcstok.c +12 -0
  583. data/modules/emscripten/system/lib/libc/musl/src/string/wcswcs.c +6 -0
  584. data/modules/emscripten/system/lib/libc/musl/src/string/wmemchr.c +8 -0
  585. data/modules/emscripten/system/lib/libc/musl/src/string/wmemcmp.c +8 -0
  586. data/modules/emscripten/system/lib/libc/musl/src/string/wmemcpy.c +9 -0
  587. data/modules/emscripten/system/lib/libc/musl/src/string/wmemmove.c +12 -0
  588. data/modules/emscripten/system/lib/libc/musl/src/string/wmemset.c +9 -0
  589. data/modules/emscripten/system/lib/libc/stdlib/getopt_long.c +511 -0
  590. data/modules/emscripten/system/lib/libc/stdlib/strtod.c +305 -0
  591. data/modules/emscripten/system/lib/libc.symbols +81 -0
  592. data/modules/emscripten/system/lib/libcextra.symbols +61 -0
  593. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +91 -0
  594. data/modules/emscripten/system/lib/libcxx/LICENSE.txt +76 -0
  595. data/modules/emscripten/system/lib/libcxx/algorithm.cpp +83 -0
  596. data/modules/emscripten/system/lib/libcxx/bind.cpp +30 -0
  597. data/modules/emscripten/system/lib/libcxx/chrono.cpp +132 -0
  598. data/modules/emscripten/system/lib/libcxx/condition_variable.cpp +81 -0
  599. data/modules/emscripten/system/lib/libcxx/debug.cpp +504 -0
  600. data/modules/emscripten/system/lib/libcxx/exception.cpp +226 -0
  601. data/modules/emscripten/system/lib/libcxx/future.cpp +285 -0
  602. data/modules/emscripten/system/lib/libcxx/hash.cpp +564 -0
  603. data/modules/emscripten/system/lib/libcxx/ios.cpp +455 -0
  604. data/modules/emscripten/system/lib/libcxx/iostream.cpp +68 -0
  605. data/modules/emscripten/system/lib/libcxx/locale.cpp +6093 -0
  606. data/modules/emscripten/system/lib/libcxx/memory.cpp +223 -0
  607. data/modules/emscripten/system/lib/libcxx/mutex.cpp +250 -0
  608. data/modules/emscripten/system/lib/libcxx/new.cpp +205 -0
  609. data/modules/emscripten/system/lib/libcxx/random.cpp +48 -0
  610. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -0
  611. data/modules/emscripten/system/lib/libcxx/regex.cpp +325 -0
  612. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +196 -0
  613. data/modules/emscripten/system/lib/libcxx/string.cpp +687 -0
  614. data/modules/emscripten/system/lib/libcxx/strstream.cpp +329 -0
  615. data/modules/emscripten/system/lib/libcxx/support/solaris/README +4 -0
  616. data/modules/emscripten/system/lib/libcxx/support/solaris/mbsnrtowcs.inc +76 -0
  617. data/modules/emscripten/system/lib/libcxx/support/solaris/wcsnrtombs.inc +93 -0
  618. data/modules/emscripten/system/lib/libcxx/support/solaris/xlocale.c +245 -0
  619. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +94 -0
  620. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +70 -0
  621. data/modules/emscripten/system/lib/libcxx/symbols +2927 -0
  622. data/modules/emscripten/system/lib/libcxx/system_error.cpp +201 -0
  623. data/modules/emscripten/system/lib/libcxx/thread.cpp +208 -0
  624. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +60 -0
  625. data/modules/emscripten/system/lib/libcxx/utility.cpp +17 -0
  626. data/modules/emscripten/system/lib/libcxx/valarray.cpp +54 -0
  627. data/modules/emscripten/system/lib/libcxxabi/CREDITS.TXT +38 -0
  628. data/modules/emscripten/system/lib/libcxxabi/LICENSE.TXT +76 -0
  629. data/modules/emscripten/system/lib/libcxxabi/include/cxa_demangle.h +167 -0
  630. data/modules/emscripten/system/lib/libcxxabi/include/cxxabi.h +175 -0
  631. data/modules/emscripten/system/lib/libcxxabi/lib/buildit +99 -0
  632. data/modules/emscripten/system/lib/libcxxabi/readme.txt +1 -0
  633. data/modules/emscripten/system/lib/libcxxabi/src/abort_message.cpp +50 -0
  634. data/modules/emscripten/system/lib/libcxxabi/src/abort_message.h +33 -0
  635. data/modules/emscripten/system/lib/libcxxabi/src/cxa_aux_runtime.cpp +34 -0
  636. data/modules/emscripten/system/lib/libcxxabi/src/cxa_demangle.cpp +11036 -0
  637. data/modules/emscripten/system/lib/libcxxabi/src/cxa_exception.cpp +622 -0
  638. data/modules/emscripten/system/lib/libcxxabi/src/cxa_exception.hpp +123 -0
  639. data/modules/emscripten/system/lib/libcxxabi/src/cxa_exception_storage.cpp +91 -0
  640. data/modules/emscripten/system/lib/libcxxabi/src/cxa_guard.cpp +231 -0
  641. data/modules/emscripten/system/lib/libcxxabi/src/cxa_handlers.cpp +125 -0
  642. data/modules/emscripten/system/lib/libcxxabi/src/cxa_handlers.hpp +54 -0
  643. data/modules/emscripten/system/lib/libcxxabi/src/cxa_new_delete.cpp +242 -0
  644. data/modules/emscripten/system/lib/libcxxabi/src/cxa_personality.cpp +1055 -0
  645. data/modules/emscripten/system/lib/libcxxabi/src/cxa_unexpected.cpp +27 -0
  646. data/modules/emscripten/system/lib/libcxxabi/src/cxa_vector.cpp +367 -0
  647. data/modules/emscripten/system/lib/libcxxabi/src/cxa_virtual.cpp +31 -0
  648. data/modules/emscripten/system/lib/libcxxabi/src/exception.cpp +41 -0
  649. data/modules/emscripten/system/lib/libcxxabi/src/fallback_malloc.ipp +174 -0
  650. data/modules/emscripten/system/lib/libcxxabi/src/private_typeinfo.cpp +1146 -0
  651. data/modules/emscripten/system/lib/libcxxabi/src/private_typeinfo.h +248 -0
  652. data/modules/emscripten/system/lib/libcxxabi/src/stdexcept.cpp +169 -0
  653. data/modules/emscripten/system/lib/libcxxabi/src/typeinfo.cpp +53 -0
  654. data/modules/emscripten/system/lib/libcxxabi/symbols +236 -0
  655. data/modules/emscripten/system/lib/sdl.cpp +13 -0
  656. data/modules/emscripten/system/lib/sdl.symbols +1 -0
  657. data/modules/emscripten/tests/hello_world.js +92 -0
  658. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/CppHeaderParser.py +2347 -0
  659. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/__init__.py +4 -0
  660. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/doc/CppHeaderParser.html +657 -0
  661. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/examples/SampleClass.h +147 -0
  662. data/modules/emscripten/third_party/CppHeaderParser/CppHeaderParser/examples/readSampleClass.py +74 -0
  663. data/modules/emscripten/third_party/CppHeaderParser/PKG-INFO +249 -0
  664. data/modules/emscripten/third_party/CppHeaderParser/README.html +544 -0
  665. data/modules/emscripten/third_party/CppHeaderParser/README.txt +226 -0
  666. data/modules/emscripten/third_party/CppHeaderParser/setup.py +43 -0
  667. data/modules/emscripten/third_party/ansidecl.h +371 -0
  668. data/modules/emscripten/third_party/closure-compiler/COPYING +202 -0
  669. data/modules/emscripten/third_party/closure-compiler/README +292 -0
  670. data/modules/emscripten/third_party/closure-compiler/compiler.jar +0 -0
  671. data/modules/emscripten/third_party/closure-compiler/readme.txt +3 -0
  672. data/modules/emscripten/third_party/cp-demangle.h +161 -0
  673. data/modules/emscripten/third_party/demangle.h +549 -0
  674. data/modules/emscripten/third_party/demangler.py +49 -0
  675. data/modules/emscripten/third_party/gcc_demangler.c +4226 -0
  676. data/modules/emscripten/third_party/gcc_demangler.js +21282 -0
  677. data/modules/emscripten/third_party/jni/emjvm.cpp +133 -0
  678. data/modules/emscripten/third_party/jni/emjvm.h +8 -0
  679. data/modules/emscripten/third_party/jni/emjvm.js +185 -0
  680. data/modules/emscripten/third_party/jni/jni.h +1154 -0
  681. data/modules/emscripten/third_party/libiberty.h +634 -0
  682. data/modules/emscripten/third_party/lzma.js/README.markdown +37 -0
  683. data/modules/emscripten/third_party/lzma.js/doit.sh +37 -0
  684. data/modules/emscripten/third_party/lzma.js/lzip/AUTHORS +7 -0
  685. data/modules/emscripten/third_party/lzma.js/lzip/COPYING +676 -0
  686. data/modules/emscripten/third_party/lzma.js/lzip/ChangeLog +201 -0
  687. data/modules/emscripten/third_party/lzma.js/lzip/INSTALL +56 -0
  688. data/modules/emscripten/third_party/lzma.js/lzip/Makefile +160 -0
  689. data/modules/emscripten/third_party/lzma.js/lzip/Makefile.in +138 -0
  690. data/modules/emscripten/third_party/lzma.js/lzip/NEWS +22 -0
  691. data/modules/emscripten/third_party/lzma.js/lzip/README +77 -0
  692. data/modules/emscripten/third_party/lzma.js/lzip/arg_parser.cc +204 -0
  693. data/modules/emscripten/third_party/lzma.js/lzip/arg_parser.h +106 -0
  694. data/modules/emscripten/third_party/lzma.js/lzip/configure +192 -0
  695. data/modules/emscripten/third_party/lzma.js/lzip/decoder.cc +252 -0
  696. data/modules/emscripten/third_party/lzma.js/lzip/decoder.h +268 -0
  697. data/modules/emscripten/third_party/lzma.js/lzip/encoder.cc +643 -0
  698. data/modules/emscripten/third_party/lzma.js/lzip/encoder.h +582 -0
  699. data/modules/emscripten/third_party/lzma.js/lzip/fast_encoder.cc +378 -0
  700. data/modules/emscripten/third_party/lzma.js/lzip/fast_encoder.h +171 -0
  701. data/modules/emscripten/third_party/lzma.js/lzip/lzip.h +264 -0
  702. data/modules/emscripten/third_party/lzma.js/lzip/main.cc +545 -0
  703. data/modules/emscripten/third_party/lzma.js/lzma-decoder.js +27 -0
  704. data/modules/emscripten/third_party/lzma.js/lzma-full.js +27 -0
  705. data/modules/emscripten/third_party/lzma.js/native_test.sh +5 -0
  706. data/modules/emscripten/third_party/lzma.js/post.js +13 -0
  707. data/modules/emscripten/third_party/lzma.js/pre.js +13 -0
  708. data/modules/emscripten/third_party/lzma.js/test-decoder.js +39 -0
  709. data/modules/emscripten/third_party/lzma.js/test-full.html +9 -0
  710. data/modules/emscripten/third_party/lzma.js/test-full.js +78 -0
  711. data/modules/emscripten/third_party/ply/ANNOUNCE +40 -0
  712. data/modules/emscripten/third_party/ply/CHANGES +1093 -0
  713. data/modules/emscripten/third_party/ply/PKG-INFO +22 -0
  714. data/modules/emscripten/third_party/ply/README +271 -0
  715. data/modules/emscripten/third_party/ply/TODO +16 -0
  716. data/modules/emscripten/third_party/ply/doc/internal.html +874 -0
  717. data/modules/emscripten/third_party/ply/doc/makedoc.py +194 -0
  718. data/modules/emscripten/third_party/ply/doc/ply.html +3262 -0
  719. data/modules/emscripten/third_party/ply/example/BASIC/README +79 -0
  720. data/modules/emscripten/third_party/ply/example/BASIC/basic.py +71 -0
  721. data/modules/emscripten/third_party/ply/example/BASIC/basiclex.py +74 -0
  722. data/modules/emscripten/third_party/ply/example/BASIC/basiclog.py +79 -0
  723. data/modules/emscripten/third_party/ply/example/BASIC/basinterp.py +441 -0
  724. data/modules/emscripten/third_party/ply/example/BASIC/basparse.py +424 -0
  725. data/modules/emscripten/third_party/ply/example/BASIC/dim.bas +14 -0
  726. data/modules/emscripten/third_party/ply/example/BASIC/func.bas +5 -0
  727. data/modules/emscripten/third_party/ply/example/BASIC/gcd.bas +22 -0
  728. data/modules/emscripten/third_party/ply/example/BASIC/gosub.bas +13 -0
  729. data/modules/emscripten/third_party/ply/example/BASIC/hello.bas +4 -0
  730. data/modules/emscripten/third_party/ply/example/BASIC/linear.bas +17 -0
  731. data/modules/emscripten/third_party/ply/example/BASIC/maxsin.bas +12 -0
  732. data/modules/emscripten/third_party/ply/example/BASIC/powers.bas +13 -0
  733. data/modules/emscripten/third_party/ply/example/BASIC/rand.bas +4 -0
  734. data/modules/emscripten/third_party/ply/example/BASIC/sales.bas +20 -0
  735. data/modules/emscripten/third_party/ply/example/BASIC/sears.bas +18 -0
  736. data/modules/emscripten/third_party/ply/example/BASIC/sqrt1.bas +5 -0
  737. data/modules/emscripten/third_party/ply/example/BASIC/sqrt2.bas +4 -0
  738. data/modules/emscripten/third_party/ply/example/GardenSnake/GardenSnake.py +709 -0
  739. data/modules/emscripten/third_party/ply/example/GardenSnake/README +5 -0
  740. data/modules/emscripten/third_party/ply/example/README +10 -0
  741. data/modules/emscripten/third_party/ply/example/ansic/README +2 -0
  742. data/modules/emscripten/third_party/ply/example/ansic/clex.py +164 -0
  743. data/modules/emscripten/third_party/ply/example/ansic/cparse.py +863 -0
  744. data/modules/emscripten/third_party/ply/example/calc/calc.py +107 -0
  745. data/modules/emscripten/third_party/ply/example/calcdebug/calc.py +113 -0
  746. data/modules/emscripten/third_party/ply/example/classcalc/calc.py +157 -0
  747. data/modules/emscripten/third_party/ply/example/cleanup.sh +2 -0
  748. data/modules/emscripten/third_party/ply/example/closurecalc/calc.py +130 -0
  749. data/modules/emscripten/third_party/ply/example/hedit/hedit.py +48 -0
  750. data/modules/emscripten/third_party/ply/example/newclasscalc/calc.py +160 -0
  751. data/modules/emscripten/third_party/ply/example/optcalc/README +9 -0
  752. data/modules/emscripten/third_party/ply/example/optcalc/calc.py +119 -0
  753. data/modules/emscripten/third_party/ply/example/unicalc/calc.py +117 -0
  754. data/modules/emscripten/third_party/ply/example/yply/README +41 -0
  755. data/modules/emscripten/third_party/ply/example/yply/ylex.py +112 -0
  756. data/modules/emscripten/third_party/ply/example/yply/yparse.py +217 -0
  757. data/modules/emscripten/third_party/ply/example/yply/yply.py +53 -0
  758. data/modules/emscripten/third_party/ply/ply/__init__.py +4 -0
  759. data/modules/emscripten/third_party/ply/ply/cpp.py +898 -0
  760. data/modules/emscripten/third_party/ply/ply/ctokens.py +133 -0
  761. data/modules/emscripten/third_party/ply/ply/lex.py +1058 -0
  762. data/modules/emscripten/third_party/ply/ply/yacc.py +3276 -0
  763. data/modules/emscripten/third_party/ply/setup.py +31 -0
  764. data/modules/emscripten/third_party/ply/test/README +7 -0
  765. data/modules/emscripten/third_party/ply/test/calclex.py +49 -0
  766. data/modules/emscripten/third_party/ply/test/cleanup.sh +4 -0
  767. data/modules/emscripten/third_party/ply/test/lex_closure.py +54 -0
  768. data/modules/emscripten/third_party/ply/test/lex_doc1.py +26 -0
  769. data/modules/emscripten/third_party/ply/test/lex_dup1.py +29 -0
  770. data/modules/emscripten/third_party/ply/test/lex_dup2.py +33 -0
  771. data/modules/emscripten/third_party/ply/test/lex_dup3.py +31 -0
  772. data/modules/emscripten/third_party/ply/test/lex_empty.py +20 -0
  773. data/modules/emscripten/third_party/ply/test/lex_error1.py +24 -0
  774. data/modules/emscripten/third_party/ply/test/lex_error2.py +26 -0
  775. data/modules/emscripten/third_party/ply/test/lex_error3.py +27 -0
  776. data/modules/emscripten/third_party/ply/test/lex_error4.py +27 -0
  777. data/modules/emscripten/third_party/ply/test/lex_hedit.py +47 -0
  778. data/modules/emscripten/third_party/ply/test/lex_ignore.py +31 -0
  779. data/modules/emscripten/third_party/ply/test/lex_ignore2.py +29 -0
  780. data/modules/emscripten/third_party/ply/test/lex_literal1.py +25 -0
  781. data/modules/emscripten/third_party/ply/test/lex_literal2.py +25 -0
  782. data/modules/emscripten/third_party/ply/test/lex_many_tokens.py +27 -0
  783. data/modules/emscripten/third_party/ply/test/lex_module.py +10 -0
  784. data/modules/emscripten/third_party/ply/test/lex_module_import.py +42 -0
  785. data/modules/emscripten/third_party/ply/test/lex_object.py +55 -0
  786. data/modules/emscripten/third_party/ply/test/lex_opt_alias.py +54 -0
  787. data/modules/emscripten/third_party/ply/test/lex_optimize.py +50 -0
  788. data/modules/emscripten/third_party/ply/test/lex_optimize2.py +50 -0
  789. data/modules/emscripten/third_party/ply/test/lex_optimize3.py +52 -0
  790. data/modules/emscripten/third_party/ply/test/lex_re1.py +27 -0
  791. data/modules/emscripten/third_party/ply/test/lex_re2.py +27 -0
  792. data/modules/emscripten/third_party/ply/test/lex_re3.py +29 -0
  793. data/modules/emscripten/third_party/ply/test/lex_rule1.py +27 -0
  794. data/modules/emscripten/third_party/ply/test/lex_rule2.py +29 -0
  795. data/modules/emscripten/third_party/ply/test/lex_rule3.py +27 -0
  796. data/modules/emscripten/third_party/ply/test/lex_state1.py +40 -0
  797. data/modules/emscripten/third_party/ply/test/lex_state2.py +40 -0
  798. data/modules/emscripten/third_party/ply/test/lex_state3.py +42 -0
  799. data/modules/emscripten/third_party/ply/test/lex_state4.py +41 -0
  800. data/modules/emscripten/third_party/ply/test/lex_state5.py +40 -0
  801. data/modules/emscripten/third_party/ply/test/lex_state_noerror.py +39 -0
  802. data/modules/emscripten/third_party/ply/test/lex_state_norule.py +40 -0
  803. data/modules/emscripten/third_party/ply/test/lex_state_try.py +45 -0
  804. data/modules/emscripten/third_party/ply/test/lex_token1.py +19 -0
  805. data/modules/emscripten/third_party/ply/test/lex_token2.py +22 -0
  806. data/modules/emscripten/third_party/ply/test/lex_token3.py +24 -0
  807. data/modules/emscripten/third_party/ply/test/lex_token4.py +26 -0
  808. data/modules/emscripten/third_party/ply/test/lex_token5.py +31 -0
  809. data/modules/emscripten/third_party/ply/test/lex_token_dup.py +29 -0
  810. data/modules/emscripten/third_party/ply/test/testlex.py +606 -0
  811. data/modules/emscripten/third_party/ply/test/testyacc.py +347 -0
  812. data/modules/emscripten/third_party/ply/test/yacc_badargs.py +68 -0
  813. data/modules/emscripten/third_party/ply/test/yacc_badid.py +77 -0
  814. data/modules/emscripten/third_party/ply/test/yacc_badprec.py +64 -0
  815. data/modules/emscripten/third_party/ply/test/yacc_badprec2.py +68 -0
  816. data/modules/emscripten/third_party/ply/test/yacc_badprec3.py +68 -0
  817. data/modules/emscripten/third_party/ply/test/yacc_badrule.py +68 -0
  818. data/modules/emscripten/third_party/ply/test/yacc_badtok.py +68 -0
  819. data/modules/emscripten/third_party/ply/test/yacc_dup.py +68 -0
  820. data/modules/emscripten/third_party/ply/test/yacc_error1.py +68 -0
  821. data/modules/emscripten/third_party/ply/test/yacc_error2.py +68 -0
  822. data/modules/emscripten/third_party/ply/test/yacc_error3.py +67 -0
  823. data/modules/emscripten/third_party/ply/test/yacc_error4.py +72 -0
  824. data/modules/emscripten/third_party/ply/test/yacc_inf.py +56 -0
  825. data/modules/emscripten/third_party/ply/test/yacc_literal.py +69 -0
  826. data/modules/emscripten/third_party/ply/test/yacc_misplaced.py +68 -0
  827. data/modules/emscripten/third_party/ply/test/yacc_missing1.py +68 -0
  828. data/modules/emscripten/third_party/ply/test/yacc_nested.py +33 -0
  829. data/modules/emscripten/third_party/ply/test/yacc_nodoc.py +67 -0
  830. data/modules/emscripten/third_party/ply/test/yacc_noerror.py +66 -0
  831. data/modules/emscripten/third_party/ply/test/yacc_nop.py +68 -0
  832. data/modules/emscripten/third_party/ply/test/yacc_notfunc.py +66 -0
  833. data/modules/emscripten/third_party/ply/test/yacc_notok.py +67 -0
  834. data/modules/emscripten/third_party/ply/test/yacc_prec1.py +68 -0
  835. data/modules/emscripten/third_party/ply/test/yacc_rr.py +72 -0
  836. data/modules/emscripten/third_party/ply/test/yacc_rr_unused.py +30 -0
  837. data/modules/emscripten/third_party/ply/test/yacc_simple.py +68 -0
  838. data/modules/emscripten/third_party/ply/test/yacc_sr.py +63 -0
  839. data/modules/emscripten/third_party/ply/test/yacc_term1.py +68 -0
  840. data/modules/emscripten/third_party/ply/test/yacc_unused.py +77 -0
  841. data/modules/emscripten/third_party/ply/test/yacc_unused_rule.py +72 -0
  842. data/modules/emscripten/third_party/ply/test/yacc_uprec.py +63 -0
  843. data/modules/emscripten/third_party/ply/test/yacc_uprec2.py +63 -0
  844. data/modules/emscripten/third_party/readme.txt +7 -0
  845. data/modules/emscripten/third_party/websockify/CHANGES.txt +23 -0
  846. data/modules/emscripten/third_party/websockify/LICENSE.txt +16 -0
  847. data/modules/emscripten/third_party/websockify/MANIFEST.in +1 -0
  848. data/modules/emscripten/third_party/websockify/Makefile +11 -0
  849. data/modules/emscripten/third_party/websockify/README.md +168 -0
  850. data/modules/emscripten/third_party/websockify/Windows/Windows Service Readme.txt +39 -0
  851. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Program.cs +24 -0
  852. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.Designer.cs +61 -0
  853. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.cs +19 -0
  854. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/ProjectInstaller.resx +129 -0
  855. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Properties/AssemblyInfo.cs +36 -0
  856. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Service1.Designer.cs +37 -0
  857. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/Service1.cs +41 -0
  858. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/noVNC Websocket.csproj +75 -0
  859. data/modules/emscripten/third_party/websockify/Windows/noVNC Websocket Service Project/noVNC Websocket.sln +20 -0
  860. data/modules/emscripten/third_party/websockify/docs/LICENSE.GPL-3 +621 -0
  861. data/modules/emscripten/third_party/websockify/docs/LICENSE.LGPL-3 +165 -0
  862. data/modules/emscripten/third_party/websockify/docs/LICENSE.MPL-2.0 +373 -0
  863. data/modules/emscripten/third_party/websockify/docs/TODO +9 -0
  864. data/modules/emscripten/third_party/websockify/docs/flash_policy.txt +4 -0
  865. data/modules/emscripten/third_party/websockify/docs/latency_results.txt +114 -0
  866. data/modules/emscripten/third_party/websockify/docs/notes +17 -0
  867. data/modules/emscripten/third_party/websockify/docs/release.txt +9 -0
  868. data/modules/emscripten/third_party/websockify/docs/websockify.1 +110 -0
  869. data/modules/emscripten/third_party/websockify/include/VT100.js +919 -0
  870. data/modules/emscripten/third_party/websockify/include/base64.js +114 -0
  871. data/modules/emscripten/third_party/websockify/include/keysym.js +99 -0
  872. data/modules/emscripten/third_party/websockify/include/util.js +359 -0
  873. data/modules/emscripten/third_party/websockify/include/web-socket-js/README.txt +109 -0
  874. data/modules/emscripten/third_party/websockify/include/web-socket-js/WebSocketMain.swf +0 -0
  875. data/modules/emscripten/third_party/websockify/include/web-socket-js/swfobject.js +4 -0
  876. data/modules/emscripten/third_party/websockify/include/web-socket-js/web_socket.js +391 -0
  877. data/modules/emscripten/third_party/websockify/include/websock.js +422 -0
  878. data/modules/emscripten/third_party/websockify/include/webutil.js +216 -0
  879. data/modules/emscripten/third_party/websockify/include/wsirc.js +235 -0
  880. data/modules/emscripten/third_party/websockify/include/wstelnet.js +335 -0
  881. data/modules/emscripten/third_party/websockify/other/Makefile +14 -0
  882. data/modules/emscripten/third_party/websockify/other/README.md +51 -0
  883. data/modules/emscripten/third_party/websockify/other/launch.sh +108 -0
  884. data/modules/emscripten/third_party/websockify/other/project.clj +13 -0
  885. data/modules/emscripten/third_party/websockify/other/websocket.c +802 -0
  886. data/modules/emscripten/third_party/websockify/other/websocket.h +84 -0
  887. data/modules/emscripten/third_party/websockify/other/websocket.rb +456 -0
  888. data/modules/emscripten/third_party/websockify/other/websockify.c +385 -0
  889. data/modules/emscripten/third_party/websockify/other/websockify.clj +233 -0
  890. data/modules/emscripten/third_party/websockify/other/websockify.js +196 -0
  891. data/modules/emscripten/third_party/websockify/other/websockify.rb +171 -0
  892. data/modules/emscripten/third_party/websockify/other/wswrap +22 -0
  893. data/modules/emscripten/third_party/websockify/rebind +18 -0
  894. data/modules/emscripten/third_party/websockify/rebind.c +94 -0
  895. data/modules/emscripten/third_party/websockify/run +5 -0
  896. data/modules/emscripten/third_party/websockify/setup.py +30 -0
  897. data/modules/emscripten/third_party/websockify/tests/b64_vs_utf8.py +29 -0
  898. data/modules/emscripten/third_party/websockify/tests/base64.html +91 -0
  899. data/modules/emscripten/third_party/websockify/tests/base64.js +12 -0
  900. data/modules/emscripten/third_party/websockify/tests/echo.html +148 -0
  901. data/modules/emscripten/third_party/websockify/tests/echo.py +75 -0
  902. data/modules/emscripten/third_party/websockify/tests/echo.rb +62 -0
  903. data/modules/emscripten/third_party/websockify/tests/latency.html +290 -0
  904. data/modules/emscripten/third_party/websockify/tests/latency.py +75 -0
  905. data/modules/emscripten/third_party/websockify/tests/load.html +250 -0
  906. data/modules/emscripten/third_party/websockify/tests/load.py +167 -0
  907. data/modules/emscripten/third_party/websockify/tests/plain_echo.html +168 -0
  908. data/modules/emscripten/third_party/websockify/tests/simple.html +68 -0
  909. data/modules/emscripten/third_party/websockify/tests/utf8-list.py +22 -0
  910. data/modules/emscripten/third_party/websockify/websockify/__init__.py +2 -0
  911. data/modules/emscripten/third_party/websockify/websockify/websocket.py +982 -0
  912. data/modules/emscripten/third_party/websockify/websockify/websocketproxy.py +393 -0
  913. data/modules/emscripten/third_party/websockify/websockify.py +5 -0
  914. data/modules/emscripten/third_party/websockify/wsirc.html +99 -0
  915. data/modules/emscripten/third_party/websockify/wstelnet.html +74 -0
  916. data/modules/emscripten/tools/__init__.py +0 -0
  917. data/modules/emscripten/tools/__init__.pyc +0 -0
  918. data/modules/emscripten/tools/autodebugger.py +289 -0
  919. data/modules/emscripten/tools/autodebugger_c.py +37 -0
  920. data/modules/emscripten/tools/autodebugger_indenter.py +18 -0
  921. data/modules/emscripten/tools/autodebugger_js.py +47 -0
  922. data/modules/emscripten/tools/autodediffer.py +60 -0
  923. data/modules/emscripten/tools/bindings_generator.py +832 -0
  924. data/modules/emscripten/tools/bisect_pair.py +88 -0
  925. data/modules/emscripten/tools/cache.py +198 -0
  926. data/modules/emscripten/tools/cache.pyc +0 -0
  927. data/modules/emscripten/tools/clean_webconsole.py +34 -0
  928. data/modules/emscripten/tools/crunch-worker.js +124 -0
  929. data/modules/emscripten/tools/diff_autodebugger.py +15 -0
  930. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +5129 -0
  931. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +6861 -0
  932. data/modules/emscripten/tools/eliminator/eliminator-test-output.js +6122 -0
  933. data/modules/emscripten/tools/eliminator/eliminator-test.js +8856 -0
  934. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/README.html +888 -0
  935. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/README.org +463 -0
  936. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/bin/uglifyjs +317 -0
  937. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/docstyle.css +75 -0
  938. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/object-ast.js +75 -0
  939. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/parse-js.js +1363 -0
  940. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/process.js +2005 -0
  941. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/lib/squeeze-more.js +51 -0
  942. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/package.json +22 -0
  943. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/beautify.js +28 -0
  944. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/testparser.js +402 -0
  945. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array1.js +1 -0
  946. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array2.js +1 -0
  947. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array3.js +1 -0
  948. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/array4.js +1 -0
  949. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/assignment.js +1 -0
  950. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/concatstring.js +1 -0
  951. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/const.js +1 -0
  952. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js +1 -0
  953. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/forstatement.js +1 -0
  954. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/if.js +1 -0
  955. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js +1 -0
  956. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js +1 -0
  957. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue10.js +1 -0
  958. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue11.js +1 -0
  959. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue13.js +1 -0
  960. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue14.js +1 -0
  961. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue16.js +1 -0
  962. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue17.js +1 -0
  963. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue20.js +1 -0
  964. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue21.js +1 -0
  965. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue25.js +1 -0
  966. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue27.js +1 -0
  967. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue28.js +1 -0
  968. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue29.js +1 -0
  969. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue30.js +1 -0
  970. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue34.js +1 -0
  971. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue4.js +1 -0
  972. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue48.js +1 -0
  973. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue50.js +1 -0
  974. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue53.js +1 -0
  975. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js +1 -0
  976. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue68.js +1 -0
  977. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue69.js +1 -0
  978. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/issue9.js +1 -0
  979. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/mangle.js +1 -0
  980. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js +1 -0
  981. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/var.js +1 -0
  982. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/expected/with.js +1 -0
  983. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array1.js +3 -0
  984. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array2.js +4 -0
  985. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array3.js +4 -0
  986. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/array4.js +6 -0
  987. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/assignment.js +20 -0
  988. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/concatstring.js +3 -0
  989. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/const.js +5 -0
  990. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js +4 -0
  991. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/forstatement.js +10 -0
  992. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/if.js +6 -0
  993. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/ifreturn.js +9 -0
  994. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js +16 -0
  995. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue10.js +1 -0
  996. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue11.js +3 -0
  997. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue13.js +1 -0
  998. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue14.js +1 -0
  999. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue16.js +1 -0
  1000. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue17.js +4 -0
  1001. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue20.js +1 -0
  1002. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue21.js +6 -0
  1003. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue25.js +7 -0
  1004. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue27.js +1 -0
  1005. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue28.js +3 -0
  1006. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue29.js +1 -0
  1007. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue30.js +3 -0
  1008. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue34.js +3 -0
  1009. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue4.js +3 -0
  1010. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue48.js +1 -0
  1011. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue50.js +9 -0
  1012. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue53.js +1 -0
  1013. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue54.1.js +3 -0
  1014. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue68.js +5 -0
  1015. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue69.js +1 -0
  1016. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/issue9.js +4 -0
  1017. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/mangle.js +5 -0
  1018. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/strict-equals.js +3 -0
  1019. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/var.js +3 -0
  1020. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/compress/test/with.js +2 -0
  1021. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/test/unit/scripts.js +55 -0
  1022. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/hoist.js +33 -0
  1023. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/instrument.js +97 -0
  1024. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/instrument2.js +138 -0
  1025. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/tmp/test.js +16 -0
  1026. data/modules/emscripten/tools/eliminator/node_modules/uglify-js/uglify-js.js +17 -0
  1027. data/modules/emscripten/tools/eliminator/safe-eliminator-test-output.js +85 -0
  1028. data/modules/emscripten/tools/eliminator/safe-eliminator-test.js +103 -0
  1029. data/modules/emscripten/tools/emconfiguren.py +19 -0
  1030. data/modules/emscripten/tools/emmaken.py +230 -0
  1031. data/modules/emscripten/tools/emmakenxx.py +18 -0
  1032. data/modules/emscripten/tools/exec_llvm.py +50 -0
  1033. data/modules/emscripten/tools/file2json.py +49 -0
  1034. data/modules/emscripten/tools/file_packager.py +649 -0
  1035. data/modules/emscripten/tools/find_bigfuncs.py +23 -0
  1036. data/modules/emscripten/tools/find_bigis.py +18 -0
  1037. data/modules/emscripten/tools/fix_closure.py +88 -0
  1038. data/modules/emscripten/tools/ie7_fix.py +14 -0
  1039. data/modules/emscripten/tools/js-optimizer.js +3440 -0
  1040. data/modules/emscripten/tools/js_optimizer.py +341 -0
  1041. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  1042. data/modules/emscripten/tools/jsrun.py +27 -0
  1043. data/modules/emscripten/tools/jsrun.pyc +0 -0
  1044. data/modules/emscripten/tools/ll-strip.py +56 -0
  1045. data/modules/emscripten/tools/make_file.py +19 -0
  1046. data/modules/emscripten/tools/make_minigzip.py +13 -0
  1047. data/modules/emscripten/tools/namespacer.py +95 -0
  1048. data/modules/emscripten/tools/nativize_llvm.py +34 -0
  1049. data/modules/emscripten/tools/node_modules/source-map/CHANGELOG.md +58 -0
  1050. data/modules/emscripten/tools/node_modules/source-map/LICENSE +28 -0
  1051. data/modules/emscripten/tools/node_modules/source-map/Makefile.dryice.js +166 -0
  1052. data/modules/emscripten/tools/node_modules/source-map/README.md +347 -0
  1053. data/modules/emscripten/tools/node_modules/source-map/build/assert-shim.js +56 -0
  1054. data/modules/emscripten/tools/node_modules/source-map/build/mini-require.js +152 -0
  1055. data/modules/emscripten/tools/node_modules/source-map/build/prefix-source-map.jsm +20 -0
  1056. data/modules/emscripten/tools/node_modules/source-map/build/prefix-utils.jsm +18 -0
  1057. data/modules/emscripten/tools/node_modules/source-map/build/suffix-browser.js +8 -0
  1058. data/modules/emscripten/tools/node_modules/source-map/build/suffix-source-map.jsm +6 -0
  1059. data/modules/emscripten/tools/node_modules/source-map/build/suffix-utils.jsm +21 -0
  1060. data/modules/emscripten/tools/node_modules/source-map/build/test-prefix.js +8 -0
  1061. data/modules/emscripten/tools/node_modules/source-map/build/test-suffix.js +3 -0
  1062. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/array-set.js +96 -0
  1063. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/base64-vlq.js +144 -0
  1064. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/base64.js +42 -0
  1065. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/binary-search.js +81 -0
  1066. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/source-map-consumer.js +430 -0
  1067. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/source-map-generator.js +381 -0
  1068. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/source-node.js +353 -0
  1069. data/modules/emscripten/tools/node_modules/source-map/lib/source-map/util.js +117 -0
  1070. data/modules/emscripten/tools/node_modules/source-map/lib/source-map.js +8 -0
  1071. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/LICENSE +58 -0
  1072. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/README.md +119 -0
  1073. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/amdefine.js +299 -0
  1074. data/modules/emscripten/tools/node_modules/source-map/node_modules/amdefine/package.json +33 -0
  1075. data/modules/emscripten/tools/node_modules/source-map/package.json +74 -0
  1076. data/modules/emscripten/tools/node_modules/source-map/test/run-tests.js +73 -0
  1077. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-api.js +26 -0
  1078. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-array-set.js +71 -0
  1079. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-base64-vlq.js +24 -0
  1080. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-base64.js +35 -0
  1081. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-binary-search.js +54 -0
  1082. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-dog-fooding.js +72 -0
  1083. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-source-map-consumer.js +306 -0
  1084. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-source-map-generator.js +391 -0
  1085. data/modules/emscripten/tools/node_modules/source-map/test/source-map/test-source-node.js +282 -0
  1086. data/modules/emscripten/tools/node_modules/source-map/test/source-map/util.js +152 -0
  1087. data/modules/emscripten/tools/reproduceriter.js +216 -0
  1088. data/modules/emscripten/tools/reproduceriter.py +160 -0
  1089. data/modules/emscripten/tools/response_file.py +28 -0
  1090. data/modules/emscripten/tools/response_file.pyc +0 -0
  1091. data/modules/emscripten/tools/scan_js.py +20 -0
  1092. data/modules/emscripten/tools/scan_ll.py +18 -0
  1093. data/modules/emscripten/tools/scons/site_scons/site_tools/emscripten/__init__.py +3 -0
  1094. data/modules/emscripten/tools/scons/site_scons/site_tools/emscripten/emscripten.py +46 -0
  1095. data/modules/emscripten/tools/settings_template_readonly.py +47 -0
  1096. data/modules/emscripten/tools/shared.py +1437 -0
  1097. data/modules/emscripten/tools/shared.pyc +0 -0
  1098. data/modules/emscripten/tools/source-maps/sourcemap2json.js +15 -0
  1099. data/modules/emscripten/tools/source-maps/sourcemapper.js +177 -0
  1100. data/modules/emscripten/tools/split.py +97 -0
  1101. data/modules/emscripten/tools/tempfiles.py +40 -0
  1102. data/modules/emscripten/tools/tempfiles.pyc +0 -0
  1103. data/modules/emscripten/tools/test-js-optimizer-asm-last-output.js +75 -0
  1104. data/modules/emscripten/tools/test-js-optimizer-asm-last.js +91 -0
  1105. data/modules/emscripten/tools/test-js-optimizer-asm-outline-output.js +570 -0
  1106. data/modules/emscripten/tools/test-js-optimizer-asm-outline.js +606 -0
  1107. data/modules/emscripten/tools/test-js-optimizer-asm-pre-output.js +540 -0
  1108. data/modules/emscripten/tools/test-js-optimizer-asm-pre.js +550 -0
  1109. data/modules/emscripten/tools/test-js-optimizer-asm-regs-min-output.js +36 -0
  1110. data/modules/emscripten/tools/test-js-optimizer-asm-regs-min.js +37 -0
  1111. data/modules/emscripten/tools/test-js-optimizer-asm-regs-output.js +106 -0
  1112. data/modules/emscripten/tools/test-js-optimizer-asm-regs.js +110 -0
  1113. data/modules/emscripten/tools/test-js-optimizer-asm-relocate-output.js +9 -0
  1114. data/modules/emscripten/tools/test-js-optimizer-asm-relocate.js +12 -0
  1115. data/modules/emscripten/tools/test-js-optimizer-output.js +291 -0
  1116. data/modules/emscripten/tools/test-js-optimizer-regs-output.js +232 -0
  1117. data/modules/emscripten/tools/test-js-optimizer-regs.js +237 -0
  1118. data/modules/emscripten/tools/test-js-optimizer-t2-output.js +91 -0
  1119. data/modules/emscripten/tools/test-js-optimizer-t2.js +92 -0
  1120. data/modules/emscripten/tools/test-js-optimizer-t2c-output.js +17 -0
  1121. data/modules/emscripten/tools/test-js-optimizer-t2c.js +18 -0
  1122. data/modules/emscripten/tools/test-js-optimizer-t3-output.js +49 -0
  1123. data/modules/emscripten/tools/test-js-optimizer-t3.js +50 -0
  1124. data/modules/emscripten/tools/test-js-optimizer.js +401 -0
  1125. data/modules/mruby/AUTHORS +18 -0
  1126. data/modules/mruby/CONTRIBUTING.md +65 -0
  1127. data/modules/mruby/ChangeLog +15 -0
  1128. data/modules/mruby/INSTALL +29 -0
  1129. data/modules/mruby/LEGAL +6 -0
  1130. data/modules/mruby/MITL +20 -0
  1131. data/modules/mruby/Makefile +18 -0
  1132. data/modules/mruby/NEWS +13 -0
  1133. data/modules/mruby/README.md +116 -0
  1134. data/modules/mruby/Rakefile +114 -0
  1135. data/modules/mruby/TODO +11 -0
  1136. data/modules/mruby/benchmark/ao-render.rb +315 -0
  1137. data/modules/mruby/benchmark/bm_so_lists.rb +47 -0
  1138. data/modules/mruby/benchmark/fib39.rb +8 -0
  1139. data/modules/mruby/build_config.rb +88 -0
  1140. data/modules/mruby/doc/compile/README.md +376 -0
  1141. data/modules/mruby/doc/mrbgems/README.md +254 -0
  1142. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/README.md +4 -0
  1143. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +23 -0
  1144. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +5 -0
  1145. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +20 -0
  1146. data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/test/example.rb +7 -0
  1147. data/modules/mruby/examples/mrbgems/c_extension_example/README.md +4 -0
  1148. data/modules/mruby/examples/mrbgems/c_extension_example/mrbgem.rake +23 -0
  1149. data/modules/mruby/examples/mrbgems/c_extension_example/src/example.c +20 -0
  1150. data/modules/mruby/examples/mrbgems/c_extension_example/test/example.c +7 -0
  1151. data/modules/mruby/examples/mrbgems/c_extension_example/test/example.rb +3 -0
  1152. data/modules/mruby/examples/mrbgems/ruby_extension_example/README.md +4 -0
  1153. data/modules/mruby/examples/mrbgems/ruby_extension_example/mrbgem.rake +23 -0
  1154. data/modules/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +5 -0
  1155. data/modules/mruby/examples/mrbgems/ruby_extension_example/test/example.rb +3 -0
  1156. data/modules/mruby/examples/targets/ArduinoDue.rb +65 -0
  1157. data/modules/mruby/examples/targets/chipKitMax32.rb +68 -0
  1158. data/modules/mruby/include/mrbconf.h +87 -0
  1159. data/modules/mruby/include/mruby/array.h +63 -0
  1160. data/modules/mruby/include/mruby/class.h +75 -0
  1161. data/modules/mruby/include/mruby/compile.h +176 -0
  1162. data/modules/mruby/include/mruby/data.h +53 -0
  1163. data/modules/mruby/include/mruby/dump.h +151 -0
  1164. data/modules/mruby/include/mruby/gc.h +17 -0
  1165. data/modules/mruby/include/mruby/hash.h +54 -0
  1166. data/modules/mruby/include/mruby/irep.h +40 -0
  1167. data/modules/mruby/include/mruby/khash.h +257 -0
  1168. data/modules/mruby/include/mruby/numeric.h +32 -0
  1169. data/modules/mruby/include/mruby/proc.h +62 -0
  1170. data/modules/mruby/include/mruby/range.h +35 -0
  1171. data/modules/mruby/include/mruby/string.h +78 -0
  1172. data/modules/mruby/include/mruby/value.h +483 -0
  1173. data/modules/mruby/include/mruby/variable.h +78 -0
  1174. data/modules/mruby/include/mruby.h +388 -0
  1175. data/modules/mruby/minirake +477 -0
  1176. data/modules/mruby/mrbgems/default.gembox +61 -0
  1177. data/modules/mruby/mrbgems/full-core.gembox +9 -0
  1178. data/modules/mruby/mrbgems/mruby-array-ext/mrbgem.rake +4 -0
  1179. data/modules/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +204 -0
  1180. data/modules/mruby/mrbgems/mruby-array-ext/src/array.c +140 -0
  1181. data/modules/mruby/mrbgems/mruby-array-ext/test/array.rb +109 -0
  1182. data/modules/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +5 -0
  1183. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +365 -0
  1184. data/modules/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +5 -0
  1185. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +243 -0
  1186. data/modules/mruby/mrbgems/mruby-enum-ext/mrbgem.rake +4 -0
  1187. data/modules/mruby/mrbgems/mruby-enum-ext/mrblib/enum.rb +164 -0
  1188. data/modules/mruby/mrbgems/mruby-enum-ext/test/enum.rb +44 -0
  1189. data/modules/mruby/mrbgems/mruby-eval/mrbgem.rake +4 -0
  1190. data/modules/mruby/mrbgems/mruby-eval/src/eval.c +23 -0
  1191. data/modules/mruby/mrbgems/mruby-fiber/mrbgem.rake +4 -0
  1192. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +251 -0
  1193. data/modules/mruby/mrbgems/mruby-fiber/test/fiber.rb +64 -0
  1194. data/modules/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +4 -0
  1195. data/modules/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb +13 -0
  1196. data/modules/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +62 -0
  1197. data/modules/mruby/mrbgems/mruby-hash-ext/test/hash.rb +26 -0
  1198. data/modules/mruby/mrbgems/mruby-math/mrbgem.rake +4 -0
  1199. data/modules/mruby/mrbgems/mruby-math/src/math.c +685 -0
  1200. data/modules/mruby/mrbgems/mruby-math/test/math.rb +136 -0
  1201. data/modules/mruby/mrbgems/mruby-numeric-ext/mrbgem.rake +4 -0
  1202. data/modules/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +31 -0
  1203. data/modules/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +10 -0
  1204. data/modules/mruby/mrbgems/mruby-object-ext/mrbgem.rake +4 -0
  1205. data/modules/mruby/mrbgems/mruby-object-ext/src/object.c +108 -0
  1206. data/modules/mruby/mrbgems/mruby-object-ext/test/nil.rb +11 -0
  1207. data/modules/mruby/mrbgems/mruby-object-ext/test/object.rb +9 -0
  1208. data/modules/mruby/mrbgems/mruby-objectspace/mrbgem.rake +4 -0
  1209. data/modules/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +117 -0
  1210. data/modules/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +38 -0
  1211. data/modules/mruby/mrbgems/mruby-print/mrbgem.rake +4 -0
  1212. data/modules/mruby/mrbgems/mruby-print/mrblib/print.rb +64 -0
  1213. data/modules/mruby/mrbgems/mruby-print/src/print.c +44 -0
  1214. data/modules/mruby/mrbgems/mruby-proc-ext/mrbgem.rake +4 -0
  1215. data/modules/mruby/mrbgems/mruby-proc-ext/mrblib/proc.rb +40 -0
  1216. data/modules/mruby/mrbgems/mruby-proc-ext/src/proc.c +97 -0
  1217. data/modules/mruby/mrbgems/mruby-proc-ext/test/proc.rb +41 -0
  1218. data/modules/mruby/mrbgems/mruby-random/mrbgem.rake +4 -0
  1219. data/modules/mruby/mrbgems/mruby-random/src/mt19937ar.c +193 -0
  1220. data/modules/mruby/mrbgems/mruby-random/src/mt19937ar.h +48 -0
  1221. data/modules/mruby/mrbgems/mruby-random/src/random.c +231 -0
  1222. data/modules/mruby/mrbgems/mruby-random/src/random.h +12 -0
  1223. data/modules/mruby/mrbgems/mruby-random/test/random.rb +32 -0
  1224. data/modules/mruby/mrbgems/mruby-range-ext/mrbgem.rake +4 -0
  1225. data/modules/mruby/mrbgems/mruby-range-ext/src/range.c +141 -0
  1226. data/modules/mruby/mrbgems/mruby-range-ext/test/range.rb +20 -0
  1227. data/modules/mruby/mrbgems/mruby-sprintf/mrbgem.rake +4 -0
  1228. data/modules/mruby/mrbgems/mruby-sprintf/src/kernel.c +30 -0
  1229. data/modules/mruby/mrbgems/mruby-sprintf/src/sprintf.c +1102 -0
  1230. data/modules/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +3 -0
  1231. data/modules/mruby/mrbgems/mruby-string-ext/mrbgem.rake +4 -0
  1232. data/modules/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +52 -0
  1233. data/modules/mruby/mrbgems/mruby-string-ext/src/string.c +175 -0
  1234. data/modules/mruby/mrbgems/mruby-string-ext/test/string.rb +112 -0
  1235. data/modules/mruby/mrbgems/mruby-struct/mrbgem.rake +4 -0
  1236. data/modules/mruby/mrbgems/mruby-struct/mrblib/struct.rb +50 -0
  1237. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +818 -0
  1238. data/modules/mruby/mrbgems/mruby-struct/test/struct.rb +77 -0
  1239. data/modules/mruby/mrbgems/mruby-symbol-ext/mrbgem.rake +4 -0
  1240. data/modules/mruby/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +9 -0
  1241. data/modules/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +55 -0
  1242. data/modules/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +12 -0
  1243. data/modules/mruby/mrbgems/mruby-time/mrbgem.rake +4 -0
  1244. data/modules/mruby/mrbgems/mruby-time/src/time.c +749 -0
  1245. data/modules/mruby/mrbgems/mruby-time/test/time.rb +201 -0
  1246. data/modules/mruby/mrbgems/mruby-toplevel-ext/mrbgem.rake +4 -0
  1247. data/modules/mruby/mrbgems/mruby-toplevel-ext/mrblib/toplevel.rb +11 -0
  1248. data/modules/mruby/mrbgems/mruby-toplevel-ext/test/toplevel.rb +24 -0
  1249. data/modules/mruby/mrblib/array.rb +111 -0
  1250. data/modules/mruby/mrblib/class.rb +26 -0
  1251. data/modules/mruby/mrblib/compar.rb +104 -0
  1252. data/modules/mruby/mrblib/enum.rb +398 -0
  1253. data/modules/mruby/mrblib/error.rb +66 -0
  1254. data/modules/mruby/mrblib/hash.rb +193 -0
  1255. data/modules/mruby/mrblib/init_mrblib.c +14 -0
  1256. data/modules/mruby/mrblib/kernel.rb +46 -0
  1257. data/modules/mruby/mrblib/mrblib.rake +18 -0
  1258. data/modules/mruby/mrblib/numeric.rb +101 -0
  1259. data/modules/mruby/mrblib/print.rb +18 -0
  1260. data/modules/mruby/mrblib/range.rb +40 -0
  1261. data/modules/mruby/mrblib/string.rb +145 -0
  1262. data/modules/mruby/src/array.c +1150 -0
  1263. data/modules/mruby/src/backtrace.c +73 -0
  1264. data/modules/mruby/src/class.c +1942 -0
  1265. data/modules/mruby/src/codegen.c +2864 -0
  1266. data/modules/mruby/src/compar.c +13 -0
  1267. data/modules/mruby/src/crc.c +38 -0
  1268. data/modules/mruby/src/dump.c +542 -0
  1269. data/modules/mruby/src/enum.c +14 -0
  1270. data/modules/mruby/src/error.c +454 -0
  1271. data/modules/mruby/src/error.h +18 -0
  1272. data/modules/mruby/src/etc.c +204 -0
  1273. data/modules/mruby/src/gc.c +1542 -0
  1274. data/modules/mruby/src/hash.c +1261 -0
  1275. data/modules/mruby/src/init.c +62 -0
  1276. data/modules/mruby/src/kernel.c +1105 -0
  1277. data/modules/mruby/src/keywords +50 -0
  1278. data/modules/mruby/src/lex.def +212 -0
  1279. data/modules/mruby/src/load.c +629 -0
  1280. data/modules/mruby/src/mruby_core.rake +28 -0
  1281. data/modules/mruby/src/node.h +117 -0
  1282. data/modules/mruby/src/numeric.c +1418 -0
  1283. data/modules/mruby/src/object.c +593 -0
  1284. data/modules/mruby/src/opcode.h +160 -0
  1285. data/modules/mruby/src/parse.y +6050 -0
  1286. data/modules/mruby/src/pool.c +190 -0
  1287. data/modules/mruby/src/print.c +71 -0
  1288. data/modules/mruby/src/proc.c +209 -0
  1289. data/modules/mruby/src/range.c +442 -0
  1290. data/modules/mruby/src/re.h +13 -0
  1291. data/modules/mruby/src/state.c +200 -0
  1292. data/modules/mruby/src/string.c +2580 -0
  1293. data/modules/mruby/src/symbol.c +456 -0
  1294. data/modules/mruby/src/value_array.h +27 -0
  1295. data/modules/mruby/src/variable.c +1147 -0
  1296. data/modules/mruby/src/vm.c +2129 -0
  1297. data/modules/mruby/tasks/libmruby.rake +18 -0
  1298. data/modules/mruby/tasks/mrbgem_spec.rake +297 -0
  1299. data/modules/mruby/tasks/mrbgems.rake +85 -0
  1300. data/modules/mruby/tasks/mrbgems_test.rake +88 -0
  1301. data/modules/mruby/tasks/mruby_build.rake +211 -0
  1302. data/modules/mruby/tasks/mruby_build_commands.rake +287 -0
  1303. data/modules/mruby/tasks/mruby_build_gem.rake +67 -0
  1304. data/modules/mruby/tasks/ruby_ext.rake +70 -0
  1305. data/modules/mruby/tasks/toolchains/androideabi.rake +126 -0
  1306. data/modules/mruby/tasks/toolchains/clang.rake +8 -0
  1307. data/modules/mruby/tasks/toolchains/gcc.rake +21 -0
  1308. data/modules/mruby/tasks/toolchains/vs2010.rake +3 -0
  1309. data/modules/mruby/tasks/toolchains/vs2012.rake +44 -0
  1310. data/modules/mruby/test/README.md +7 -0
  1311. data/modules/mruby/test/assert.rb +238 -0
  1312. data/modules/mruby/test/driver.c +118 -0
  1313. data/modules/mruby/test/init_mrbtest.c +24 -0
  1314. data/modules/mruby/test/mrbtest.rake +47 -0
  1315. data/modules/mruby/test/report.rb +4 -0
  1316. data/modules/mruby/test/t/argumenterror.rb +21 -0
  1317. data/modules/mruby/test/t/array.rb +309 -0
  1318. data/modules/mruby/test/t/basicobject.rb +11 -0
  1319. data/modules/mruby/test/t/bs_block.rb +489 -0
  1320. data/modules/mruby/test/t/bs_literal.rb +38 -0
  1321. data/modules/mruby/test/t/class.rb +219 -0
  1322. data/modules/mruby/test/t/comparable.rb +72 -0
  1323. data/modules/mruby/test/t/enumerable.rb +108 -0
  1324. data/modules/mruby/test/t/exception.rb +337 -0
  1325. data/modules/mruby/test/t/false.rb +33 -0
  1326. data/modules/mruby/test/t/float.rb +145 -0
  1327. data/modules/mruby/test/t/gc.rb +45 -0
  1328. data/modules/mruby/test/t/hash.rb +310 -0
  1329. data/modules/mruby/test/t/indexerror.rb +10 -0
  1330. data/modules/mruby/test/t/integer.rb +222 -0
  1331. data/modules/mruby/test/t/kernel.rb +425 -0
  1332. data/modules/mruby/test/t/literals.rb +287 -0
  1333. data/modules/mruby/test/t/localjumperror.rb +13 -0
  1334. data/modules/mruby/test/t/methods.rb +109 -0
  1335. data/modules/mruby/test/t/module.rb +344 -0
  1336. data/modules/mruby/test/t/nameerror.rb +32 -0
  1337. data/modules/mruby/test/t/nil.rb +29 -0
  1338. data/modules/mruby/test/t/nomethoderror.rb +13 -0
  1339. data/modules/mruby/test/t/numeric.rb +29 -0
  1340. data/modules/mruby/test/t/object.rb +11 -0
  1341. data/modules/mruby/test/t/proc.rb +56 -0
  1342. data/modules/mruby/test/t/range.rb +82 -0
  1343. data/modules/mruby/test/t/rangeerror.rb +10 -0
  1344. data/modules/mruby/test/t/regexperror.rb +4 -0
  1345. data/modules/mruby/test/t/runtimeerror.rb +6 -0
  1346. data/modules/mruby/test/t/standarderror.rb +10 -0
  1347. data/modules/mruby/test/t/string.rb +483 -0
  1348. data/modules/mruby/test/t/symbol.rb +27 -0
  1349. data/modules/mruby/test/t/syntax.rb +67 -0
  1350. data/modules/mruby/test/t/true.rb +33 -0
  1351. data/modules/mruby/test/t/typeerror.rb +11 -0
  1352. data/modules/mruby/tools/mrbc/mrbc.c +318 -0
  1353. data/modules/mruby/tools/mrbc/mrbc.rake +14 -0
  1354. data/modules/mruby/travis_config.rb +6 -0
  1355. data/modules/mrubymix/LICENSE +21 -0
  1356. data/modules/mrubymix/README.md +6 -0
  1357. data/modules/mrubymix/bin/mrubymix +29 -0
  1358. data/modules/mrubymix/lib/mrubymix.rb +93 -0
  1359. data/modules/mrubymix/mrubymix.gemspec +13 -0
  1360. data/scripts/gen_gems_config.rb +185 -0
  1361. data/scripts/gen_post.rb +104 -0
  1362. data/templates/minimal/Rakefile +36 -0
  1363. data/templates/minimal/app/app.rb +3 -0
  1364. metadata +1408 -0
@@ -0,0 +1,2846 @@
1
+ // -*- C++ -*-
2
+ //===---------------------------- deque -----------------------------------===//
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_DEQUE
12
+ #define _LIBCPP_DEQUE
13
+
14
+ /*
15
+ deque synopsis
16
+
17
+ namespace std
18
+ {
19
+
20
+ template <class T, class Allocator = allocator<T> >
21
+ class deque
22
+ {
23
+ public:
24
+ // types:
25
+ typedef T value_type;
26
+ typedef Allocator allocator_type;
27
+
28
+ typedef typename allocator_type::reference reference;
29
+ typedef typename allocator_type::const_reference const_reference;
30
+ typedef implementation-defined iterator;
31
+ typedef implementation-defined const_iterator;
32
+ typedef typename allocator_type::size_type size_type;
33
+ typedef typename allocator_type::difference_type difference_type;
34
+
35
+ typedef typename allocator_type::pointer pointer;
36
+ typedef typename allocator_type::const_pointer const_pointer;
37
+ typedef std::reverse_iterator<iterator> reverse_iterator;
38
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
39
+
40
+ // construct/copy/destroy:
41
+ deque() noexcept(is_nothrow_default_constructible<allocator_type>::value);
42
+ explicit deque(const allocator_type& a);
43
+ explicit deque(size_type n);
44
+ deque(size_type n, const value_type& v);
45
+ deque(size_type n, const value_type& v, const allocator_type& a);
46
+ template <class InputIterator>
47
+ deque(InputIterator f, InputIterator l);
48
+ template <class InputIterator>
49
+ deque(InputIterator f, InputIterator l, const allocator_type& a);
50
+ deque(const deque& c);
51
+ deque(deque&& c)
52
+ noexcept(is_nothrow_move_constructible<allocator_type>::value);
53
+ deque(initializer_list<value_type> il, const Allocator& a = allocator_type());
54
+ deque(const deque& c, const allocator_type& a);
55
+ deque(deque&& c, const allocator_type& a);
56
+ ~deque();
57
+
58
+ deque& operator=(const deque& c);
59
+ deque& operator=(deque&& c)
60
+ noexcept(
61
+ allocator_type::propagate_on_container_move_assignment::value &&
62
+ is_nothrow_move_assignable<allocator_type>::value);
63
+ deque& operator=(initializer_list<value_type> il);
64
+
65
+ template <class InputIterator>
66
+ void assign(InputIterator f, InputIterator l);
67
+ void assign(size_type n, const value_type& v);
68
+ void assign(initializer_list<value_type> il);
69
+
70
+ allocator_type get_allocator() const noexcept;
71
+
72
+ // iterators:
73
+
74
+ iterator begin() noexcept;
75
+ const_iterator begin() const noexcept;
76
+ iterator end() noexcept;
77
+ const_iterator end() const noexcept;
78
+
79
+ reverse_iterator rbegin() noexcept;
80
+ const_reverse_iterator rbegin() const noexcept;
81
+ reverse_iterator rend() noexcept;
82
+ const_reverse_iterator rend() const noexcept;
83
+
84
+ const_iterator cbegin() const noexcept;
85
+ const_iterator cend() const noexcept;
86
+ const_reverse_iterator crbegin() const noexcept;
87
+ const_reverse_iterator crend() const noexcept;
88
+
89
+ // capacity:
90
+ size_type size() const noexcept;
91
+ size_type max_size() const noexcept;
92
+ void resize(size_type n);
93
+ void resize(size_type n, const value_type& v);
94
+ void shrink_to_fit();
95
+ bool empty() const noexcept;
96
+
97
+ // element access:
98
+ reference operator[](size_type i);
99
+ const_reference operator[](size_type i) const;
100
+ reference at(size_type i);
101
+ const_reference at(size_type i) const;
102
+ reference front();
103
+ const_reference front() const;
104
+ reference back();
105
+ const_reference back() const;
106
+
107
+ // modifiers:
108
+ void push_front(const value_type& v);
109
+ void push_front(value_type&& v);
110
+ void push_back(const value_type& v);
111
+ void push_back(value_type&& v);
112
+ template <class... Args> void emplace_front(Args&&... args);
113
+ template <class... Args> void emplace_back(Args&&... args);
114
+ template <class... Args> iterator emplace(const_iterator p, Args&&... args);
115
+ iterator insert(const_iterator p, const value_type& v);
116
+ iterator insert(const_iterator p, value_type&& v);
117
+ iterator insert(const_iterator p, size_type n, const value_type& v);
118
+ template <class InputIterator>
119
+ iterator insert (const_iterator p, InputIterator f, InputIterator l);
120
+ iterator insert(const_iterator p, initializer_list<value_type> il);
121
+ void pop_front();
122
+ void pop_back();
123
+ iterator erase(const_iterator p);
124
+ iterator erase(const_iterator f, const_iterator l);
125
+ void swap(deque& c)
126
+ noexcept(!allocator_type::propagate_on_container_swap::value ||
127
+ __is_nothrow_swappable<allocator_type>::value);
128
+ void clear() noexcept;
129
+ };
130
+
131
+ template <class T, class Allocator>
132
+ bool operator==(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
133
+ template <class T, class Allocator>
134
+ bool operator< (const deque<T,Allocator>& x, const deque<T,Allocator>& y);
135
+ template <class T, class Allocator>
136
+ bool operator!=(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
137
+ template <class T, class Allocator>
138
+ bool operator> (const deque<T,Allocator>& x, const deque<T,Allocator>& y);
139
+ template <class T, class Allocator>
140
+ bool operator>=(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
141
+ template <class T, class Allocator>
142
+ bool operator<=(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
143
+
144
+ // specialized algorithms:
145
+ template <class T, class Allocator>
146
+ void swap(deque<T,Allocator>& x, deque<T,Allocator>& y)
147
+ noexcept(noexcept(x.swap(y)));
148
+
149
+ } // std
150
+
151
+ */
152
+
153
+ #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
154
+ #pragma GCC system_header
155
+ #endif
156
+
157
+ #include <__config>
158
+ #include <__split_buffer>
159
+ #include <type_traits>
160
+ #include <initializer_list>
161
+ #include <iterator>
162
+ #include <algorithm>
163
+ #include <stdexcept>
164
+
165
+ #include <__undef_min_max>
166
+
167
+ _LIBCPP_BEGIN_NAMESPACE_STD
168
+
169
+ template <class _Tp, class _Allocator> class __deque_base;
170
+
171
+ template <class _ValueType, class _Pointer, class _Reference, class _MapPointer,
172
+ class _DiffType, _DiffType _BlockSize>
173
+ class _LIBCPP_TYPE_VIS __deque_iterator;
174
+
175
+ template <class _RAIter,
176
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
177
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
178
+ copy(_RAIter __f,
179
+ _RAIter __l,
180
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
181
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0);
182
+
183
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
184
+ class _OutputIterator>
185
+ _OutputIterator
186
+ copy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
187
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
188
+ _OutputIterator __r);
189
+
190
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
191
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
192
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
193
+ copy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
194
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
195
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r);
196
+
197
+ template <class _RAIter,
198
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
199
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
200
+ copy_backward(_RAIter __f,
201
+ _RAIter __l,
202
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
203
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0);
204
+
205
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
206
+ class _OutputIterator>
207
+ _OutputIterator
208
+ copy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
209
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
210
+ _OutputIterator __r);
211
+
212
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
213
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
214
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
215
+ copy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
216
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
217
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r);
218
+
219
+ template <class _RAIter,
220
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
221
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
222
+ move(_RAIter __f,
223
+ _RAIter __l,
224
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
225
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0);
226
+
227
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
228
+ class _OutputIterator>
229
+ _OutputIterator
230
+ move(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
231
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
232
+ _OutputIterator __r);
233
+
234
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
235
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
236
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
237
+ move(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
238
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
239
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r);
240
+
241
+ template <class _RAIter,
242
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
243
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
244
+ move_backward(_RAIter __f,
245
+ _RAIter __l,
246
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
247
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0);
248
+
249
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
250
+ class _OutputIterator>
251
+ _OutputIterator
252
+ move_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
253
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
254
+ _OutputIterator __r);
255
+
256
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
257
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
258
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
259
+ move_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
260
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
261
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r);
262
+
263
+ template <class _ValueType, class _Pointer, class _Reference, class _MapPointer,
264
+ class _DiffType, _DiffType _BlockSize>
265
+ class _LIBCPP_TYPE_VIS __deque_iterator
266
+ {
267
+ typedef _MapPointer __map_iterator;
268
+ public:
269
+ typedef _Pointer pointer;
270
+ typedef _DiffType difference_type;
271
+ private:
272
+ __map_iterator __m_iter_;
273
+ pointer __ptr_;
274
+
275
+ static const difference_type __block_size = _BlockSize;
276
+ public:
277
+ typedef _ValueType value_type;
278
+ typedef random_access_iterator_tag iterator_category;
279
+ typedef _Reference reference;
280
+
281
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator() _NOEXCEPT {}
282
+
283
+ template <class _Pp, class _Rp, class _MP>
284
+ _LIBCPP_INLINE_VISIBILITY
285
+ __deque_iterator(const __deque_iterator<value_type, _Pp, _Rp, _MP, difference_type, __block_size>& __it,
286
+ typename enable_if<is_convertible<_Pp, pointer>::value>::type* = 0) _NOEXCEPT
287
+ : __m_iter_(__it.__m_iter_), __ptr_(__it.__ptr_) {}
288
+
289
+ _LIBCPP_INLINE_VISIBILITY reference operator*() const {return *__ptr_;}
290
+ _LIBCPP_INLINE_VISIBILITY pointer operator->() const {return __ptr_;}
291
+
292
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator& operator++()
293
+ {
294
+ if (++__ptr_ - *__m_iter_ == __block_size)
295
+ {
296
+ ++__m_iter_;
297
+ __ptr_ = *__m_iter_;
298
+ }
299
+ return *this;
300
+ }
301
+
302
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator operator++(int)
303
+ {
304
+ __deque_iterator __tmp = *this;
305
+ ++(*this);
306
+ return __tmp;
307
+ }
308
+
309
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator& operator--()
310
+ {
311
+ if (__ptr_ == *__m_iter_)
312
+ {
313
+ --__m_iter_;
314
+ __ptr_ = *__m_iter_ + __block_size;
315
+ }
316
+ --__ptr_;
317
+ return *this;
318
+ }
319
+
320
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator operator--(int)
321
+ {
322
+ __deque_iterator __tmp = *this;
323
+ --(*this);
324
+ return __tmp;
325
+ }
326
+
327
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator& operator+=(difference_type __n)
328
+ {
329
+ if (__n != 0)
330
+ {
331
+ __n += __ptr_ - *__m_iter_;
332
+ if (__n > 0)
333
+ {
334
+ __m_iter_ += __n / __block_size;
335
+ __ptr_ = *__m_iter_ + __n % __block_size;
336
+ }
337
+ else // (__n < 0)
338
+ {
339
+ difference_type __z = __block_size - 1 - __n;
340
+ __m_iter_ -= __z / __block_size;
341
+ __ptr_ = *__m_iter_ + (__block_size - 1 - __z % __block_size);
342
+ }
343
+ }
344
+ return *this;
345
+ }
346
+
347
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator& operator-=(difference_type __n)
348
+ {
349
+ return *this += -__n;
350
+ }
351
+
352
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator operator+(difference_type __n) const
353
+ {
354
+ __deque_iterator __t(*this);
355
+ __t += __n;
356
+ return __t;
357
+ }
358
+
359
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator operator-(difference_type __n) const
360
+ {
361
+ __deque_iterator __t(*this);
362
+ __t -= __n;
363
+ return __t;
364
+ }
365
+
366
+ _LIBCPP_INLINE_VISIBILITY
367
+ friend __deque_iterator operator+(difference_type __n, const __deque_iterator& __it)
368
+ {return __it + __n;}
369
+
370
+ _LIBCPP_INLINE_VISIBILITY
371
+ friend difference_type operator-(const __deque_iterator& __x, const __deque_iterator& __y)
372
+ {
373
+ if (__x != __y)
374
+ return (__x.__m_iter_ - __y.__m_iter_) * __block_size
375
+ + (__x.__ptr_ - *__x.__m_iter_)
376
+ - (__y.__ptr_ - *__y.__m_iter_);
377
+ return 0;
378
+ }
379
+
380
+ _LIBCPP_INLINE_VISIBILITY reference operator[](difference_type __n) const
381
+ {return *(*this + __n);}
382
+
383
+ _LIBCPP_INLINE_VISIBILITY friend
384
+ bool operator==(const __deque_iterator& __x, const __deque_iterator& __y)
385
+ {return __x.__ptr_ == __y.__ptr_;}
386
+
387
+ _LIBCPP_INLINE_VISIBILITY friend
388
+ bool operator!=(const __deque_iterator& __x, const __deque_iterator& __y)
389
+ {return !(__x == __y);}
390
+
391
+ _LIBCPP_INLINE_VISIBILITY friend
392
+ bool operator<(const __deque_iterator& __x, const __deque_iterator& __y)
393
+ {return __x.__m_iter_ < __y.__m_iter_ ||
394
+ (__x.__m_iter_ == __y.__m_iter_ && __x.__ptr_ < __y.__ptr_);}
395
+
396
+ _LIBCPP_INLINE_VISIBILITY friend
397
+ bool operator>(const __deque_iterator& __x, const __deque_iterator& __y)
398
+ {return __y < __x;}
399
+
400
+ _LIBCPP_INLINE_VISIBILITY friend
401
+ bool operator<=(const __deque_iterator& __x, const __deque_iterator& __y)
402
+ {return !(__y < __x);}
403
+
404
+ _LIBCPP_INLINE_VISIBILITY friend
405
+ bool operator>=(const __deque_iterator& __x, const __deque_iterator& __y)
406
+ {return !(__x < __y);}
407
+
408
+ private:
409
+ _LIBCPP_INLINE_VISIBILITY __deque_iterator(__map_iterator __m, pointer __p) _NOEXCEPT
410
+ : __m_iter_(__m), __ptr_(__p) {}
411
+
412
+ template <class _Tp, class _Ap> friend class __deque_base;
413
+ template <class _Tp, class _Ap> friend class _LIBCPP_TYPE_VIS deque;
414
+ template <class _Vp, class _Pp, class _Rp, class _MP, class _Dp, _Dp>
415
+ friend class _LIBCPP_TYPE_VIS __deque_iterator;
416
+
417
+ template <class _RAIter,
418
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
419
+ friend
420
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
421
+ copy(_RAIter __f,
422
+ _RAIter __l,
423
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
424
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*);
425
+
426
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
427
+ class _OutputIterator>
428
+ friend
429
+ _OutputIterator
430
+ copy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
431
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
432
+ _OutputIterator __r);
433
+
434
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
435
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
436
+ friend
437
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
438
+ copy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
439
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
440
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r);
441
+
442
+ template <class _RAIter,
443
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
444
+ friend
445
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
446
+ copy_backward(_RAIter __f,
447
+ _RAIter __l,
448
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
449
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*);
450
+
451
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
452
+ class _OutputIterator>
453
+ friend
454
+ _OutputIterator
455
+ copy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
456
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
457
+ _OutputIterator __r);
458
+
459
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
460
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
461
+ friend
462
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
463
+ copy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
464
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
465
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r);
466
+
467
+ template <class _RAIter,
468
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
469
+ friend
470
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
471
+ move(_RAIter __f,
472
+ _RAIter __l,
473
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
474
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*);
475
+
476
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
477
+ class _OutputIterator>
478
+ friend
479
+ _OutputIterator
480
+ move(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
481
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
482
+ _OutputIterator __r);
483
+
484
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
485
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
486
+ friend
487
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
488
+ move(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
489
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
490
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r);
491
+
492
+ template <class _RAIter,
493
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
494
+ friend
495
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
496
+ move_backward(_RAIter __f,
497
+ _RAIter __l,
498
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
499
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*);
500
+
501
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
502
+ class _OutputIterator>
503
+ friend
504
+ _OutputIterator
505
+ move_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
506
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
507
+ _OutputIterator __r);
508
+
509
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
510
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
511
+ friend
512
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
513
+ move_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
514
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
515
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r);
516
+ };
517
+
518
+ // copy
519
+
520
+ template <class _RAIter,
521
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
522
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
523
+ copy(_RAIter __f,
524
+ _RAIter __l,
525
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
526
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*)
527
+ {
528
+ typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::difference_type difference_type;
529
+ typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::pointer pointer;
530
+ while (__f != __l)
531
+ {
532
+ pointer __rb = __r.__ptr_;
533
+ pointer __re = *__r.__m_iter_ + _B2;
534
+ difference_type __bs = __re - __rb;
535
+ difference_type __n = __l - __f;
536
+ _RAIter __m = __l;
537
+ if (__n > __bs)
538
+ {
539
+ __n = __bs;
540
+ __m = __f + __n;
541
+ }
542
+ _VSTD::copy(__f, __m, __rb);
543
+ __f = __m;
544
+ __r += __n;
545
+ }
546
+ return __r;
547
+ }
548
+
549
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
550
+ class _OutputIterator>
551
+ _OutputIterator
552
+ copy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
553
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
554
+ _OutputIterator __r)
555
+ {
556
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type;
557
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer;
558
+ difference_type __n = __l - __f;
559
+ while (__n > 0)
560
+ {
561
+ pointer __fb = __f.__ptr_;
562
+ pointer __fe = *__f.__m_iter_ + _B1;
563
+ difference_type __bs = __fe - __fb;
564
+ if (__bs > __n)
565
+ {
566
+ __bs = __n;
567
+ __fe = __fb + __bs;
568
+ }
569
+ __r = _VSTD::copy(__fb, __fe, __r);
570
+ __n -= __bs;
571
+ __f += __bs;
572
+ }
573
+ return __r;
574
+ }
575
+
576
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
577
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
578
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
579
+ copy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
580
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
581
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r)
582
+ {
583
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type;
584
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer;
585
+ difference_type __n = __l - __f;
586
+ while (__n > 0)
587
+ {
588
+ pointer __fb = __f.__ptr_;
589
+ pointer __fe = *__f.__m_iter_ + _B1;
590
+ difference_type __bs = __fe - __fb;
591
+ if (__bs > __n)
592
+ {
593
+ __bs = __n;
594
+ __fe = __fb + __bs;
595
+ }
596
+ __r = _VSTD::copy(__fb, __fe, __r);
597
+ __n -= __bs;
598
+ __f += __bs;
599
+ }
600
+ return __r;
601
+ }
602
+
603
+ // copy_backward
604
+
605
+ template <class _RAIter,
606
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
607
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
608
+ copy_backward(_RAIter __f,
609
+ _RAIter __l,
610
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
611
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*)
612
+ {
613
+ typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::difference_type difference_type;
614
+ typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::pointer pointer;
615
+ while (__f != __l)
616
+ {
617
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __rp = _VSTD::prev(__r);
618
+ pointer __rb = *__rp.__m_iter_;
619
+ pointer __re = __rp.__ptr_ + 1;
620
+ difference_type __bs = __re - __rb;
621
+ difference_type __n = __l - __f;
622
+ _RAIter __m = __f;
623
+ if (__n > __bs)
624
+ {
625
+ __n = __bs;
626
+ __m = __l - __n;
627
+ }
628
+ _VSTD::copy_backward(__m, __l, __re);
629
+ __l = __m;
630
+ __r -= __n;
631
+ }
632
+ return __r;
633
+ }
634
+
635
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
636
+ class _OutputIterator>
637
+ _OutputIterator
638
+ copy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
639
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
640
+ _OutputIterator __r)
641
+ {
642
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type;
643
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer;
644
+ difference_type __n = __l - __f;
645
+ while (__n > 0)
646
+ {
647
+ --__l;
648
+ pointer __lb = *__l.__m_iter_;
649
+ pointer __le = __l.__ptr_ + 1;
650
+ difference_type __bs = __le - __lb;
651
+ if (__bs > __n)
652
+ {
653
+ __bs = __n;
654
+ __lb = __le - __bs;
655
+ }
656
+ __r = _VSTD::copy_backward(__lb, __le, __r);
657
+ __n -= __bs;
658
+ __l -= __bs - 1;
659
+ }
660
+ return __r;
661
+ }
662
+
663
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
664
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
665
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
666
+ copy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
667
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
668
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r)
669
+ {
670
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type;
671
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer;
672
+ difference_type __n = __l - __f;
673
+ while (__n > 0)
674
+ {
675
+ --__l;
676
+ pointer __lb = *__l.__m_iter_;
677
+ pointer __le = __l.__ptr_ + 1;
678
+ difference_type __bs = __le - __lb;
679
+ if (__bs > __n)
680
+ {
681
+ __bs = __n;
682
+ __lb = __le - __bs;
683
+ }
684
+ __r = _VSTD::copy_backward(__lb, __le, __r);
685
+ __n -= __bs;
686
+ __l -= __bs - 1;
687
+ }
688
+ return __r;
689
+ }
690
+
691
+ // move
692
+
693
+ template <class _RAIter,
694
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
695
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
696
+ move(_RAIter __f,
697
+ _RAIter __l,
698
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
699
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*)
700
+ {
701
+ typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::difference_type difference_type;
702
+ typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::pointer pointer;
703
+ while (__f != __l)
704
+ {
705
+ pointer __rb = __r.__ptr_;
706
+ pointer __re = *__r.__m_iter_ + _B2;
707
+ difference_type __bs = __re - __rb;
708
+ difference_type __n = __l - __f;
709
+ _RAIter __m = __l;
710
+ if (__n > __bs)
711
+ {
712
+ __n = __bs;
713
+ __m = __f + __n;
714
+ }
715
+ _VSTD::move(__f, __m, __rb);
716
+ __f = __m;
717
+ __r += __n;
718
+ }
719
+ return __r;
720
+ }
721
+
722
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
723
+ class _OutputIterator>
724
+ _OutputIterator
725
+ move(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
726
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
727
+ _OutputIterator __r)
728
+ {
729
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type;
730
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer;
731
+ difference_type __n = __l - __f;
732
+ while (__n > 0)
733
+ {
734
+ pointer __fb = __f.__ptr_;
735
+ pointer __fe = *__f.__m_iter_ + _B1;
736
+ difference_type __bs = __fe - __fb;
737
+ if (__bs > __n)
738
+ {
739
+ __bs = __n;
740
+ __fe = __fb + __bs;
741
+ }
742
+ __r = _VSTD::move(__fb, __fe, __r);
743
+ __n -= __bs;
744
+ __f += __bs;
745
+ }
746
+ return __r;
747
+ }
748
+
749
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
750
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
751
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
752
+ move(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
753
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
754
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r)
755
+ {
756
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type;
757
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer;
758
+ difference_type __n = __l - __f;
759
+ while (__n > 0)
760
+ {
761
+ pointer __fb = __f.__ptr_;
762
+ pointer __fe = *__f.__m_iter_ + _B1;
763
+ difference_type __bs = __fe - __fb;
764
+ if (__bs > __n)
765
+ {
766
+ __bs = __n;
767
+ __fe = __fb + __bs;
768
+ }
769
+ __r = _VSTD::move(__fb, __fe, __r);
770
+ __n -= __bs;
771
+ __f += __bs;
772
+ }
773
+ return __r;
774
+ }
775
+
776
+ // move_backward
777
+
778
+ template <class _RAIter,
779
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
780
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
781
+ move_backward(_RAIter __f,
782
+ _RAIter __l,
783
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r,
784
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*)
785
+ {
786
+ typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::difference_type difference_type;
787
+ typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::pointer pointer;
788
+ while (__f != __l)
789
+ {
790
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __rp = _VSTD::prev(__r);
791
+ pointer __rb = *__rp.__m_iter_;
792
+ pointer __re = __rp.__ptr_ + 1;
793
+ difference_type __bs = __re - __rb;
794
+ difference_type __n = __l - __f;
795
+ _RAIter __m = __f;
796
+ if (__n > __bs)
797
+ {
798
+ __n = __bs;
799
+ __m = __l - __n;
800
+ }
801
+ _VSTD::move_backward(__m, __l, __re);
802
+ __l = __m;
803
+ __r -= __n;
804
+ }
805
+ return __r;
806
+ }
807
+
808
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
809
+ class _OutputIterator>
810
+ _OutputIterator
811
+ move_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
812
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
813
+ _OutputIterator __r)
814
+ {
815
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type;
816
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer;
817
+ difference_type __n = __l - __f;
818
+ while (__n > 0)
819
+ {
820
+ --__l;
821
+ pointer __lb = *__l.__m_iter_;
822
+ pointer __le = __l.__ptr_ + 1;
823
+ difference_type __bs = __le - __lb;
824
+ if (__bs > __n)
825
+ {
826
+ __bs = __n;
827
+ __lb = __le - __bs;
828
+ }
829
+ __r = _VSTD::move_backward(__lb, __le, __r);
830
+ __n -= __bs;
831
+ __l -= __bs - 1;
832
+ }
833
+ return __r;
834
+ }
835
+
836
+ template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1,
837
+ class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2>
838
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>
839
+ move_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f,
840
+ __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l,
841
+ __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r)
842
+ {
843
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type;
844
+ typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer;
845
+ difference_type __n = __l - __f;
846
+ while (__n > 0)
847
+ {
848
+ --__l;
849
+ pointer __lb = *__l.__m_iter_;
850
+ pointer __le = __l.__ptr_ + 1;
851
+ difference_type __bs = __le - __lb;
852
+ if (__bs > __n)
853
+ {
854
+ __bs = __n;
855
+ __lb = __le - __bs;
856
+ }
857
+ __r = _VSTD::move_backward(__lb, __le, __r);
858
+ __n -= __bs;
859
+ __l -= __bs - 1;
860
+ }
861
+ return __r;
862
+ }
863
+
864
+ template <bool>
865
+ class __deque_base_common
866
+ {
867
+ protected:
868
+ void __throw_length_error() const;
869
+ void __throw_out_of_range() const;
870
+ };
871
+
872
+ template <bool __b>
873
+ void
874
+ __deque_base_common<__b>::__throw_length_error() const
875
+ {
876
+ #ifndef _LIBCPP_NO_EXCEPTIONS
877
+ throw length_error("deque");
878
+ #endif
879
+ }
880
+
881
+ template <bool __b>
882
+ void
883
+ __deque_base_common<__b>::__throw_out_of_range() const
884
+ {
885
+ #ifndef _LIBCPP_NO_EXCEPTIONS
886
+ throw out_of_range("deque");
887
+ #endif
888
+ }
889
+
890
+ template <class _Tp, class _Allocator>
891
+ class __deque_base
892
+ : protected __deque_base_common<true>
893
+ {
894
+ __deque_base(const __deque_base& __c);
895
+ __deque_base& operator=(const __deque_base& __c);
896
+ protected:
897
+ typedef _Tp value_type;
898
+ typedef _Allocator allocator_type;
899
+ typedef allocator_traits<allocator_type> __alloc_traits;
900
+ typedef value_type& reference;
901
+ typedef const value_type& const_reference;
902
+ typedef typename __alloc_traits::size_type size_type;
903
+ typedef typename __alloc_traits::difference_type difference_type;
904
+ typedef typename __alloc_traits::pointer pointer;
905
+ typedef typename __alloc_traits::const_pointer const_pointer;
906
+
907
+ static const difference_type __block_size = sizeof(value_type) < 256 ? 4096 / sizeof(value_type) : 16;
908
+
909
+ typedef typename __alloc_traits::template
910
+ #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
911
+ rebind_alloc<pointer>
912
+ #else
913
+ rebind_alloc<pointer>::other
914
+ #endif
915
+ __pointer_allocator;
916
+ typedef allocator_traits<__pointer_allocator> __map_traits;
917
+ typedef typename __map_traits::pointer __map_pointer;
918
+ typedef typename __map_traits::const_pointer __map_const_pointer;
919
+ typedef __split_buffer<pointer, __pointer_allocator> __map;
920
+
921
+ typedef __deque_iterator<value_type, pointer, reference, __map_pointer,
922
+ difference_type, __block_size> iterator;
923
+ typedef __deque_iterator<value_type, const_pointer, const_reference, __map_const_pointer,
924
+ difference_type, __block_size> const_iterator;
925
+
926
+ __map __map_;
927
+ size_type __start_;
928
+ __compressed_pair<size_type, allocator_type> __size_;
929
+
930
+ iterator begin() _NOEXCEPT;
931
+ const_iterator begin() const _NOEXCEPT;
932
+ iterator end() _NOEXCEPT;
933
+ const_iterator end() const _NOEXCEPT;
934
+
935
+ _LIBCPP_INLINE_VISIBILITY size_type& size() {return __size_.first();}
936
+ _LIBCPP_INLINE_VISIBILITY
937
+ const size_type& size() const _NOEXCEPT {return __size_.first();}
938
+ _LIBCPP_INLINE_VISIBILITY allocator_type& __alloc() {return __size_.second();}
939
+ _LIBCPP_INLINE_VISIBILITY
940
+ const allocator_type& __alloc() const _NOEXCEPT {return __size_.second();}
941
+
942
+ __deque_base()
943
+ _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value);
944
+ explicit __deque_base(const allocator_type& __a);
945
+ public:
946
+ ~__deque_base();
947
+
948
+ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
949
+
950
+ __deque_base(__deque_base&& __c)
951
+ _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value);
952
+ __deque_base(__deque_base&& __c, const allocator_type& __a);
953
+
954
+ #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
955
+ void swap(__deque_base& __c)
956
+ _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
957
+ __is_nothrow_swappable<allocator_type>::value);
958
+ protected:
959
+ void clear() _NOEXCEPT;
960
+
961
+ bool __invariants() const;
962
+
963
+ _LIBCPP_INLINE_VISIBILITY
964
+ void __move_assign(__deque_base& __c)
965
+ _NOEXCEPT_(__alloc_traits::propagate_on_container_move_assignment::value &&
966
+ is_nothrow_move_assignable<allocator_type>::value)
967
+ {
968
+ __map_ = _VSTD::move(__c.__map_);
969
+ __start_ = __c.__start_;
970
+ size() = __c.size();
971
+ __move_assign_alloc(__c);
972
+ __c.__start_ = __c.size() = 0;
973
+ }
974
+
975
+ _LIBCPP_INLINE_VISIBILITY
976
+ void __move_assign_alloc(__deque_base& __c)
977
+ _NOEXCEPT_(!__alloc_traits::propagate_on_container_move_assignment::value ||
978
+ is_nothrow_move_assignable<allocator_type>::value)
979
+ {__move_assign_alloc(__c, integral_constant<bool,
980
+ __alloc_traits::propagate_on_container_move_assignment::value>());}
981
+
982
+ private:
983
+ _LIBCPP_INLINE_VISIBILITY
984
+ void __move_assign_alloc(__deque_base& __c, true_type)
985
+ _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value)
986
+ {
987
+ __alloc() = _VSTD::move(__c.__alloc());
988
+ }
989
+
990
+ _LIBCPP_INLINE_VISIBILITY
991
+ void __move_assign_alloc(__deque_base&, false_type) _NOEXCEPT
992
+ {}
993
+
994
+ _LIBCPP_INLINE_VISIBILITY
995
+ static void __swap_alloc(allocator_type& __x, allocator_type& __y)
996
+ _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
997
+ __is_nothrow_swappable<allocator_type>::value)
998
+ {__swap_alloc(__x, __y, integral_constant<bool,
999
+ __alloc_traits::propagate_on_container_swap::value>());}
1000
+
1001
+ _LIBCPP_INLINE_VISIBILITY
1002
+ static void __swap_alloc(allocator_type& __x, allocator_type& __y, true_type)
1003
+ _NOEXCEPT_(__is_nothrow_swappable<allocator_type>::value)
1004
+ {
1005
+ using _VSTD::swap;
1006
+ swap(__x, __y);
1007
+ }
1008
+
1009
+ _LIBCPP_INLINE_VISIBILITY
1010
+ static void __swap_alloc(allocator_type&, allocator_type&, false_type)
1011
+ _NOEXCEPT
1012
+ {}
1013
+ };
1014
+
1015
+ template <class _Tp, class _Allocator>
1016
+ bool
1017
+ __deque_base<_Tp, _Allocator>::__invariants() const
1018
+ {
1019
+ if (!__map_.__invariants())
1020
+ return false;
1021
+ if (__map_.size() >= size_type(-1) / __block_size)
1022
+ return false;
1023
+ for (typename __map::const_iterator __i = __map_.begin(), __e = __map_.end();
1024
+ __i != __e; ++__i)
1025
+ if (*__i == nullptr)
1026
+ return false;
1027
+ if (__map_.size() != 0)
1028
+ {
1029
+ if (size() >= __map_.size() * __block_size)
1030
+ return false;
1031
+ if (__start_ >= __map_.size() * __block_size - size())
1032
+ return false;
1033
+ }
1034
+ else
1035
+ {
1036
+ if (size() != 0)
1037
+ return false;
1038
+ if (__start_ != 0)
1039
+ return false;
1040
+ }
1041
+ return true;
1042
+ }
1043
+
1044
+ template <class _Tp, class _Allocator>
1045
+ typename __deque_base<_Tp, _Allocator>::iterator
1046
+ __deque_base<_Tp, _Allocator>::begin() _NOEXCEPT
1047
+ {
1048
+ __map_pointer __mp = __map_.begin() + __start_ / __block_size;
1049
+ return iterator(__mp, __map_.empty() ? 0 : *__mp + __start_ % __block_size);
1050
+ }
1051
+
1052
+ template <class _Tp, class _Allocator>
1053
+ typename __deque_base<_Tp, _Allocator>::const_iterator
1054
+ __deque_base<_Tp, _Allocator>::begin() const _NOEXCEPT
1055
+ {
1056
+ __map_const_pointer __mp = __map_.begin() + __start_ / __block_size;
1057
+ return const_iterator(__mp, __map_.empty() ? 0 : *__mp + __start_ % __block_size);
1058
+ }
1059
+
1060
+ template <class _Tp, class _Allocator>
1061
+ typename __deque_base<_Tp, _Allocator>::iterator
1062
+ __deque_base<_Tp, _Allocator>::end() _NOEXCEPT
1063
+ {
1064
+ size_type __p = size() + __start_;
1065
+ __map_pointer __mp = __map_.begin() + __p / __block_size;
1066
+ return iterator(__mp, __map_.empty() ? 0 : *__mp + __p % __block_size);
1067
+ }
1068
+
1069
+ template <class _Tp, class _Allocator>
1070
+ typename __deque_base<_Tp, _Allocator>::const_iterator
1071
+ __deque_base<_Tp, _Allocator>::end() const _NOEXCEPT
1072
+ {
1073
+ size_type __p = size() + __start_;
1074
+ __map_const_pointer __mp = __map_.begin() + __p / __block_size;
1075
+ return const_iterator(__mp, __map_.empty() ? 0 : *__mp + __p % __block_size);
1076
+ }
1077
+
1078
+ template <class _Tp, class _Allocator>
1079
+ inline _LIBCPP_INLINE_VISIBILITY
1080
+ __deque_base<_Tp, _Allocator>::__deque_base()
1081
+ _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value)
1082
+ : __start_(0), __size_(0) {}
1083
+
1084
+ template <class _Tp, class _Allocator>
1085
+ inline _LIBCPP_INLINE_VISIBILITY
1086
+ __deque_base<_Tp, _Allocator>::__deque_base(const allocator_type& __a)
1087
+ : __map_(__pointer_allocator(__a)), __start_(0), __size_(0, __a) {}
1088
+
1089
+ template <class _Tp, class _Allocator>
1090
+ __deque_base<_Tp, _Allocator>::~__deque_base()
1091
+ {
1092
+ clear();
1093
+ typename __map::iterator __i = __map_.begin();
1094
+ typename __map::iterator __e = __map_.end();
1095
+ for (; __i != __e; ++__i)
1096
+ __alloc_traits::deallocate(__alloc(), *__i, __block_size);
1097
+ }
1098
+
1099
+ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1100
+
1101
+ template <class _Tp, class _Allocator>
1102
+ __deque_base<_Tp, _Allocator>::__deque_base(__deque_base&& __c)
1103
+ _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value)
1104
+ : __map_(_VSTD::move(__c.__map_)),
1105
+ __start_(_VSTD::move(__c.__start_)),
1106
+ __size_(_VSTD::move(__c.__size_))
1107
+ {
1108
+ __c.__start_ = 0;
1109
+ __c.size() = 0;
1110
+ }
1111
+
1112
+ template <class _Tp, class _Allocator>
1113
+ __deque_base<_Tp, _Allocator>::__deque_base(__deque_base&& __c, const allocator_type& __a)
1114
+ : __map_(_VSTD::move(__c.__map_), __pointer_allocator(__a)),
1115
+ __start_(_VSTD::move(__c.__start_)),
1116
+ __size_(_VSTD::move(__c.size()), __a)
1117
+ {
1118
+ if (__a == __c.__alloc())
1119
+ {
1120
+ __c.__start_ = 0;
1121
+ __c.size() = 0;
1122
+ }
1123
+ else
1124
+ {
1125
+ __map_.clear();
1126
+ __start_ = 0;
1127
+ size() = 0;
1128
+ }
1129
+ }
1130
+
1131
+ #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1132
+
1133
+ template <class _Tp, class _Allocator>
1134
+ void
1135
+ __deque_base<_Tp, _Allocator>::swap(__deque_base& __c)
1136
+ _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value||
1137
+ __is_nothrow_swappable<allocator_type>::value)
1138
+ {
1139
+ __map_.swap(__c.__map_);
1140
+ _VSTD::swap(__start_, __c.__start_);
1141
+ _VSTD::swap(size(), __c.size());
1142
+ __swap_alloc(__alloc(), __c.__alloc());
1143
+ }
1144
+
1145
+ template <class _Tp, class _Allocator>
1146
+ void
1147
+ __deque_base<_Tp, _Allocator>::clear() _NOEXCEPT
1148
+ {
1149
+ allocator_type& __a = __alloc();
1150
+ for (iterator __i = begin(), __e = end(); __i != __e; ++__i)
1151
+ __alloc_traits::destroy(__a, _VSTD::addressof(*__i));
1152
+ size() = 0;
1153
+ while (__map_.size() > 2)
1154
+ {
1155
+ __alloc_traits::deallocate(__a, __map_.front(), __block_size);
1156
+ __map_.pop_front();
1157
+ }
1158
+ switch (__map_.size())
1159
+ {
1160
+ case 1:
1161
+ __start_ = __block_size / 2;
1162
+ break;
1163
+ case 2:
1164
+ __start_ = __block_size;
1165
+ break;
1166
+ }
1167
+ }
1168
+
1169
+ template <class _Tp, class _Allocator = allocator<_Tp> >
1170
+ class _LIBCPP_TYPE_VIS deque
1171
+ : private __deque_base<_Tp, _Allocator>
1172
+ {
1173
+ public:
1174
+ // types:
1175
+
1176
+ typedef _Tp value_type;
1177
+ typedef _Allocator allocator_type;
1178
+
1179
+ typedef __deque_base<value_type, allocator_type> __base;
1180
+
1181
+ typedef typename __base::__alloc_traits __alloc_traits;
1182
+ typedef typename __base::reference reference;
1183
+ typedef typename __base::const_reference const_reference;
1184
+ typedef typename __base::iterator iterator;
1185
+ typedef typename __base::const_iterator const_iterator;
1186
+ typedef typename __base::size_type size_type;
1187
+ typedef typename __base::difference_type difference_type;
1188
+
1189
+ typedef typename __base::pointer pointer;
1190
+ typedef typename __base::const_pointer const_pointer;
1191
+ typedef _VSTD::reverse_iterator<iterator> reverse_iterator;
1192
+ typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
1193
+
1194
+ // construct/copy/destroy:
1195
+ _LIBCPP_INLINE_VISIBILITY
1196
+ deque()
1197
+ _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value)
1198
+ {}
1199
+ _LIBCPP_INLINE_VISIBILITY deque(const allocator_type& __a) : __base(__a) {}
1200
+ explicit deque(size_type __n);
1201
+ deque(size_type __n, const value_type& __v);
1202
+ deque(size_type __n, const value_type& __v, const allocator_type& __a);
1203
+ template <class _InputIter>
1204
+ deque(_InputIter __f, _InputIter __l,
1205
+ typename enable_if<__is_input_iterator<_InputIter>::value>::type* = 0);
1206
+ template <class _InputIter>
1207
+ deque(_InputIter __f, _InputIter __l, const allocator_type& __a,
1208
+ typename enable_if<__is_input_iterator<_InputIter>::value>::type* = 0);
1209
+ deque(const deque& __c);
1210
+ deque(const deque& __c, const allocator_type& __a);
1211
+ #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1212
+ deque(initializer_list<value_type> __il);
1213
+ deque(initializer_list<value_type> __il, const allocator_type& __a);
1214
+ #endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1215
+
1216
+ deque& operator=(const deque& __c);
1217
+ #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1218
+ _LIBCPP_INLINE_VISIBILITY
1219
+ deque& operator=(initializer_list<value_type> __il) {assign(__il); return *this;}
1220
+ #endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1221
+
1222
+ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1223
+ deque(deque&& __c) _NOEXCEPT_(is_nothrow_move_constructible<__base>::value);
1224
+ deque(deque&& __c, const allocator_type& __a);
1225
+ deque& operator=(deque&& __c)
1226
+ _NOEXCEPT_(__alloc_traits::propagate_on_container_move_assignment::value &&
1227
+ is_nothrow_move_assignable<allocator_type>::value);
1228
+ #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1229
+
1230
+ template <class _InputIter>
1231
+ void assign(_InputIter __f, _InputIter __l,
1232
+ typename enable_if<__is_input_iterator<_InputIter>::value &&
1233
+ !__is_random_access_iterator<_InputIter>::value>::type* = 0);
1234
+ template <class _RAIter>
1235
+ void assign(_RAIter __f, _RAIter __l,
1236
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0);
1237
+ void assign(size_type __n, const value_type& __v);
1238
+ #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1239
+ _LIBCPP_INLINE_VISIBILITY
1240
+ void assign(initializer_list<value_type> __il) {assign(__il.begin(), __il.end());}
1241
+ #endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1242
+
1243
+ allocator_type get_allocator() const _NOEXCEPT;
1244
+
1245
+ // iterators:
1246
+
1247
+ _LIBCPP_INLINE_VISIBILITY
1248
+ iterator begin() _NOEXCEPT {return __base::begin();}
1249
+ _LIBCPP_INLINE_VISIBILITY
1250
+ const_iterator begin() const _NOEXCEPT {return __base::begin();}
1251
+ _LIBCPP_INLINE_VISIBILITY
1252
+ iterator end() _NOEXCEPT {return __base::end();}
1253
+ _LIBCPP_INLINE_VISIBILITY
1254
+ const_iterator end() const _NOEXCEPT {return __base::end();}
1255
+
1256
+ _LIBCPP_INLINE_VISIBILITY
1257
+ reverse_iterator rbegin() _NOEXCEPT
1258
+ {return reverse_iterator(__base::end());}
1259
+ _LIBCPP_INLINE_VISIBILITY
1260
+ const_reverse_iterator rbegin() const _NOEXCEPT
1261
+ {return const_reverse_iterator(__base::end());}
1262
+ _LIBCPP_INLINE_VISIBILITY
1263
+ reverse_iterator rend() _NOEXCEPT
1264
+ {return reverse_iterator(__base::begin());}
1265
+ _LIBCPP_INLINE_VISIBILITY
1266
+ const_reverse_iterator rend() const _NOEXCEPT
1267
+ {return const_reverse_iterator(__base::begin());}
1268
+
1269
+ _LIBCPP_INLINE_VISIBILITY
1270
+ const_iterator cbegin() const _NOEXCEPT
1271
+ {return __base::begin();}
1272
+ _LIBCPP_INLINE_VISIBILITY
1273
+ const_iterator cend() const _NOEXCEPT
1274
+ {return __base::end();}
1275
+ _LIBCPP_INLINE_VISIBILITY
1276
+ const_reverse_iterator crbegin() const _NOEXCEPT
1277
+ {return const_reverse_iterator(__base::end());}
1278
+ _LIBCPP_INLINE_VISIBILITY
1279
+ const_reverse_iterator crend() const _NOEXCEPT
1280
+ {return const_reverse_iterator(__base::begin());}
1281
+
1282
+ // capacity:
1283
+ _LIBCPP_INLINE_VISIBILITY
1284
+ size_type size() const _NOEXCEPT {return __base::size();}
1285
+ _LIBCPP_INLINE_VISIBILITY
1286
+ size_type max_size() const _NOEXCEPT
1287
+ {return __alloc_traits::max_size(__base::__alloc());}
1288
+ void resize(size_type __n);
1289
+ void resize(size_type __n, const value_type& __v);
1290
+ void shrink_to_fit() _NOEXCEPT;
1291
+ _LIBCPP_INLINE_VISIBILITY
1292
+ bool empty() const _NOEXCEPT {return __base::size() == 0;}
1293
+
1294
+ // element access:
1295
+ reference operator[](size_type __i);
1296
+ const_reference operator[](size_type __i) const;
1297
+ reference at(size_type __i);
1298
+ const_reference at(size_type __i) const;
1299
+ reference front();
1300
+ const_reference front() const;
1301
+ reference back();
1302
+ const_reference back() const;
1303
+
1304
+ // 23.2.2.3 modifiers:
1305
+ void push_front(const value_type& __v);
1306
+ void push_back(const value_type& __v);
1307
+ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1308
+ #ifndef _LIBCPP_HAS_NO_VARIADICS
1309
+ template <class... _Args> void emplace_front(_Args&&... __args);
1310
+ template <class... _Args> void emplace_back(_Args&&... __args);
1311
+ template <class... _Args> iterator emplace(const_iterator __p, _Args&&... __args);
1312
+ #endif // _LIBCPP_HAS_NO_VARIADICS
1313
+ void push_front(value_type&& __v);
1314
+ void push_back(value_type&& __v);
1315
+ iterator insert(const_iterator __p, value_type&& __v);
1316
+ #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1317
+ iterator insert(const_iterator __p, const value_type& __v);
1318
+ iterator insert(const_iterator __p, size_type __n, const value_type& __v);
1319
+ template <class _InputIter>
1320
+ iterator insert (const_iterator __p, _InputIter __f, _InputIter __l,
1321
+ typename enable_if<__is_input_iterator<_InputIter>::value
1322
+ &&!__is_bidirectional_iterator<_InputIter>::value>::type* = 0);
1323
+ template <class _BiIter>
1324
+ iterator insert (const_iterator __p, _BiIter __f, _BiIter __l,
1325
+ typename enable_if<__is_bidirectional_iterator<_BiIter>::value>::type* = 0);
1326
+ #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1327
+ _LIBCPP_INLINE_VISIBILITY
1328
+ iterator insert(const_iterator __p, initializer_list<value_type> __il)
1329
+ {return insert(__p, __il.begin(), __il.end());}
1330
+ #endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1331
+ void pop_front();
1332
+ void pop_back();
1333
+ iterator erase(const_iterator __p);
1334
+ iterator erase(const_iterator __f, const_iterator __l);
1335
+
1336
+ void swap(deque& __c)
1337
+ _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
1338
+ __is_nothrow_swappable<allocator_type>::value);
1339
+ void clear() _NOEXCEPT;
1340
+
1341
+ _LIBCPP_INLINE_VISIBILITY
1342
+ bool __invariants() const {return __base::__invariants();}
1343
+ private:
1344
+ _LIBCPP_INLINE_VISIBILITY
1345
+ static size_type __recommend_blocks(size_type __n)
1346
+ {
1347
+ return __n / __base::__block_size + (__n % __base::__block_size != 0);
1348
+ }
1349
+ _LIBCPP_INLINE_VISIBILITY
1350
+ size_type __capacity() const
1351
+ {
1352
+ return __base::__map_.size() == 0 ? 0 : __base::__map_.size() * __base::__block_size - 1;
1353
+ }
1354
+ _LIBCPP_INLINE_VISIBILITY
1355
+ size_type __front_spare() const
1356
+ {
1357
+ return __base::__start_;
1358
+ }
1359
+ _LIBCPP_INLINE_VISIBILITY
1360
+ size_type __back_spare() const
1361
+ {
1362
+ return __capacity() - (__base::__start_ + __base::size());
1363
+ }
1364
+
1365
+ template <class _InpIter>
1366
+ void __append(_InpIter __f, _InpIter __l,
1367
+ typename enable_if<__is_input_iterator<_InpIter>::value &&
1368
+ !__is_forward_iterator<_InpIter>::value>::type* = 0);
1369
+ template <class _ForIter>
1370
+ void __append(_ForIter __f, _ForIter __l,
1371
+ typename enable_if<__is_forward_iterator<_ForIter>::value>::type* = 0);
1372
+ void __append(size_type __n);
1373
+ void __append(size_type __n, const value_type& __v);
1374
+ void __erase_to_end(const_iterator __f);
1375
+ void __add_front_capacity();
1376
+ void __add_front_capacity(size_type __n);
1377
+ void __add_back_capacity();
1378
+ void __add_back_capacity(size_type __n);
1379
+ iterator __move_and_check(iterator __f, iterator __l, iterator __r,
1380
+ const_pointer& __vt);
1381
+ iterator __move_backward_and_check(iterator __f, iterator __l, iterator __r,
1382
+ const_pointer& __vt);
1383
+ void __move_construct_and_check(iterator __f, iterator __l,
1384
+ iterator __r, const_pointer& __vt);
1385
+ void __move_construct_backward_and_check(iterator __f, iterator __l,
1386
+ iterator __r, const_pointer& __vt);
1387
+
1388
+ _LIBCPP_INLINE_VISIBILITY
1389
+ void __copy_assign_alloc(const deque& __c)
1390
+ {__copy_assign_alloc(__c, integral_constant<bool,
1391
+ __alloc_traits::propagate_on_container_copy_assignment::value>());}
1392
+
1393
+ _LIBCPP_INLINE_VISIBILITY
1394
+ void __copy_assign_alloc(const deque& __c, true_type)
1395
+ {
1396
+ if (__base::__alloc() != __c.__alloc())
1397
+ {
1398
+ clear();
1399
+ shrink_to_fit();
1400
+ }
1401
+ __base::__alloc() = __c.__alloc();
1402
+ __base::__map_.__alloc() = __c.__map_.__alloc();
1403
+ }
1404
+
1405
+ _LIBCPP_INLINE_VISIBILITY
1406
+ void __copy_assign_alloc(const deque&, false_type)
1407
+ {}
1408
+
1409
+ void __move_assign(deque& __c, true_type)
1410
+ _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value);
1411
+ void __move_assign(deque& __c, false_type);
1412
+ };
1413
+
1414
+ template <class _Tp, class _Allocator>
1415
+ deque<_Tp, _Allocator>::deque(size_type __n)
1416
+ {
1417
+ if (__n > 0)
1418
+ __append(__n);
1419
+ }
1420
+
1421
+ template <class _Tp, class _Allocator>
1422
+ deque<_Tp, _Allocator>::deque(size_type __n, const value_type& __v)
1423
+ {
1424
+ if (__n > 0)
1425
+ __append(__n, __v);
1426
+ }
1427
+
1428
+ template <class _Tp, class _Allocator>
1429
+ deque<_Tp, _Allocator>::deque(size_type __n, const value_type& __v, const allocator_type& __a)
1430
+ : __base(__a)
1431
+ {
1432
+ if (__n > 0)
1433
+ __append(__n, __v);
1434
+ }
1435
+
1436
+ template <class _Tp, class _Allocator>
1437
+ template <class _InputIter>
1438
+ deque<_Tp, _Allocator>::deque(_InputIter __f, _InputIter __l,
1439
+ typename enable_if<__is_input_iterator<_InputIter>::value>::type*)
1440
+ {
1441
+ __append(__f, __l);
1442
+ }
1443
+
1444
+ template <class _Tp, class _Allocator>
1445
+ template <class _InputIter>
1446
+ deque<_Tp, _Allocator>::deque(_InputIter __f, _InputIter __l, const allocator_type& __a,
1447
+ typename enable_if<__is_input_iterator<_InputIter>::value>::type*)
1448
+ : __base(__a)
1449
+ {
1450
+ __append(__f, __l);
1451
+ }
1452
+
1453
+ template <class _Tp, class _Allocator>
1454
+ deque<_Tp, _Allocator>::deque(const deque& __c)
1455
+ : __base(__alloc_traits::select_on_container_copy_construction(__c.__alloc()))
1456
+ {
1457
+ __append(__c.begin(), __c.end());
1458
+ }
1459
+
1460
+ template <class _Tp, class _Allocator>
1461
+ deque<_Tp, _Allocator>::deque(const deque& __c, const allocator_type& __a)
1462
+ : __base(__a)
1463
+ {
1464
+ __append(__c.begin(), __c.end());
1465
+ }
1466
+
1467
+ #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1468
+
1469
+ template <class _Tp, class _Allocator>
1470
+ deque<_Tp, _Allocator>::deque(initializer_list<value_type> __il)
1471
+ {
1472
+ __append(__il.begin(), __il.end());
1473
+ }
1474
+
1475
+ template <class _Tp, class _Allocator>
1476
+ deque<_Tp, _Allocator>::deque(initializer_list<value_type> __il, const allocator_type& __a)
1477
+ : __base(__a)
1478
+ {
1479
+ __append(__il.begin(), __il.end());
1480
+ }
1481
+
1482
+ #endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
1483
+
1484
+ template <class _Tp, class _Allocator>
1485
+ deque<_Tp, _Allocator>&
1486
+ deque<_Tp, _Allocator>::operator=(const deque& __c)
1487
+ {
1488
+ if (this != &__c)
1489
+ {
1490
+ __copy_assign_alloc(__c);
1491
+ assign(__c.begin(), __c.end());
1492
+ }
1493
+ return *this;
1494
+ }
1495
+
1496
+ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1497
+
1498
+ template <class _Tp, class _Allocator>
1499
+ inline _LIBCPP_INLINE_VISIBILITY
1500
+ deque<_Tp, _Allocator>::deque(deque&& __c)
1501
+ _NOEXCEPT_(is_nothrow_move_constructible<__base>::value)
1502
+ : __base(_VSTD::move(__c))
1503
+ {
1504
+ }
1505
+
1506
+ template <class _Tp, class _Allocator>
1507
+ inline _LIBCPP_INLINE_VISIBILITY
1508
+ deque<_Tp, _Allocator>::deque(deque&& __c, const allocator_type& __a)
1509
+ : __base(_VSTD::move(__c), __a)
1510
+ {
1511
+ if (__a != __c.__alloc())
1512
+ {
1513
+ typedef move_iterator<iterator> _Ip;
1514
+ assign(_Ip(__c.begin()), _Ip(__c.end()));
1515
+ }
1516
+ }
1517
+
1518
+ template <class _Tp, class _Allocator>
1519
+ inline _LIBCPP_INLINE_VISIBILITY
1520
+ deque<_Tp, _Allocator>&
1521
+ deque<_Tp, _Allocator>::operator=(deque&& __c)
1522
+ _NOEXCEPT_(__alloc_traits::propagate_on_container_move_assignment::value &&
1523
+ is_nothrow_move_assignable<allocator_type>::value)
1524
+ {
1525
+ __move_assign(__c, integral_constant<bool,
1526
+ __alloc_traits::propagate_on_container_move_assignment::value>());
1527
+ return *this;
1528
+ }
1529
+
1530
+ template <class _Tp, class _Allocator>
1531
+ void
1532
+ deque<_Tp, _Allocator>::__move_assign(deque& __c, false_type)
1533
+ {
1534
+ if (__base::__alloc() != __c.__alloc())
1535
+ {
1536
+ typedef move_iterator<iterator> _Ip;
1537
+ assign(_Ip(__c.begin()), _Ip(__c.end()));
1538
+ }
1539
+ else
1540
+ __move_assign(__c, true_type());
1541
+ }
1542
+
1543
+ template <class _Tp, class _Allocator>
1544
+ void
1545
+ deque<_Tp, _Allocator>::__move_assign(deque& __c, true_type)
1546
+ _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value)
1547
+ {
1548
+ clear();
1549
+ shrink_to_fit();
1550
+ __base::__move_assign(__c);
1551
+ }
1552
+
1553
+ #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1554
+
1555
+ template <class _Tp, class _Allocator>
1556
+ template <class _InputIter>
1557
+ void
1558
+ deque<_Tp, _Allocator>::assign(_InputIter __f, _InputIter __l,
1559
+ typename enable_if<__is_input_iterator<_InputIter>::value &&
1560
+ !__is_random_access_iterator<_InputIter>::value>::type*)
1561
+ {
1562
+ iterator __i = __base::begin();
1563
+ iterator __e = __base::end();
1564
+ for (; __f != __l && __i != __e; ++__f, ++__i)
1565
+ *__i = *__f;
1566
+ if (__f != __l)
1567
+ __append(__f, __l);
1568
+ else
1569
+ __erase_to_end(__i);
1570
+ }
1571
+
1572
+ template <class _Tp, class _Allocator>
1573
+ template <class _RAIter>
1574
+ void
1575
+ deque<_Tp, _Allocator>::assign(_RAIter __f, _RAIter __l,
1576
+ typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*)
1577
+ {
1578
+ if (static_cast<size_type>(__l - __f) > __base::size())
1579
+ {
1580
+ _RAIter __m = __f + __base::size();
1581
+ _VSTD::copy(__f, __m, __base::begin());
1582
+ __append(__m, __l);
1583
+ }
1584
+ else
1585
+ __erase_to_end(_VSTD::copy(__f, __l, __base::begin()));
1586
+ }
1587
+
1588
+ template <class _Tp, class _Allocator>
1589
+ void
1590
+ deque<_Tp, _Allocator>::assign(size_type __n, const value_type& __v)
1591
+ {
1592
+ if (__n > __base::size())
1593
+ {
1594
+ _VSTD::fill_n(__base::begin(), __base::size(), __v);
1595
+ __n -= __base::size();
1596
+ __append(__n, __v);
1597
+ }
1598
+ else
1599
+ __erase_to_end(_VSTD::fill_n(__base::begin(), __n, __v));
1600
+ }
1601
+
1602
+ template <class _Tp, class _Allocator>
1603
+ inline _LIBCPP_INLINE_VISIBILITY
1604
+ _Allocator
1605
+ deque<_Tp, _Allocator>::get_allocator() const _NOEXCEPT
1606
+ {
1607
+ return __base::__alloc();
1608
+ }
1609
+
1610
+ template <class _Tp, class _Allocator>
1611
+ void
1612
+ deque<_Tp, _Allocator>::resize(size_type __n)
1613
+ {
1614
+ if (__n > __base::size())
1615
+ __append(__n - __base::size());
1616
+ else if (__n < __base::size())
1617
+ __erase_to_end(__base::begin() + __n);
1618
+ }
1619
+
1620
+ template <class _Tp, class _Allocator>
1621
+ void
1622
+ deque<_Tp, _Allocator>::resize(size_type __n, const value_type& __v)
1623
+ {
1624
+ if (__n > __base::size())
1625
+ __append(__n - __base::size(), __v);
1626
+ else if (__n < __base::size())
1627
+ __erase_to_end(__base::begin() + __n);
1628
+ }
1629
+
1630
+ template <class _Tp, class _Allocator>
1631
+ void
1632
+ deque<_Tp, _Allocator>::shrink_to_fit() _NOEXCEPT
1633
+ {
1634
+ allocator_type& __a = __base::__alloc();
1635
+ if (empty())
1636
+ {
1637
+ while (__base::__map_.size() > 0)
1638
+ {
1639
+ __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size);
1640
+ __base::__map_.pop_back();
1641
+ }
1642
+ __base::__start_ = 0;
1643
+ }
1644
+ else
1645
+ {
1646
+ if (__front_spare() >= __base::__block_size)
1647
+ {
1648
+ __alloc_traits::deallocate(__a, __base::__map_.front(), __base::__block_size);
1649
+ __base::__map_.pop_front();
1650
+ __base::__start_ -= __base::__block_size;
1651
+ }
1652
+ if (__back_spare() >= __base::__block_size)
1653
+ {
1654
+ __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size);
1655
+ __base::__map_.pop_back();
1656
+ }
1657
+ }
1658
+ __base::__map_.shrink_to_fit();
1659
+ }
1660
+
1661
+ template <class _Tp, class _Allocator>
1662
+ inline _LIBCPP_INLINE_VISIBILITY
1663
+ typename deque<_Tp, _Allocator>::reference
1664
+ deque<_Tp, _Allocator>::operator[](size_type __i)
1665
+ {
1666
+ size_type __p = __base::__start_ + __i;
1667
+ return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
1668
+ }
1669
+
1670
+ template <class _Tp, class _Allocator>
1671
+ inline _LIBCPP_INLINE_VISIBILITY
1672
+ typename deque<_Tp, _Allocator>::const_reference
1673
+ deque<_Tp, _Allocator>::operator[](size_type __i) const
1674
+ {
1675
+ size_type __p = __base::__start_ + __i;
1676
+ return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
1677
+ }
1678
+
1679
+ template <class _Tp, class _Allocator>
1680
+ inline _LIBCPP_INLINE_VISIBILITY
1681
+ typename deque<_Tp, _Allocator>::reference
1682
+ deque<_Tp, _Allocator>::at(size_type __i)
1683
+ {
1684
+ if (__i >= __base::size())
1685
+ __base::__throw_out_of_range();
1686
+ size_type __p = __base::__start_ + __i;
1687
+ return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
1688
+ }
1689
+
1690
+ template <class _Tp, class _Allocator>
1691
+ inline _LIBCPP_INLINE_VISIBILITY
1692
+ typename deque<_Tp, _Allocator>::const_reference
1693
+ deque<_Tp, _Allocator>::at(size_type __i) const
1694
+ {
1695
+ if (__i >= __base::size())
1696
+ __base::__throw_out_of_range();
1697
+ size_type __p = __base::__start_ + __i;
1698
+ return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
1699
+ }
1700
+
1701
+ template <class _Tp, class _Allocator>
1702
+ inline _LIBCPP_INLINE_VISIBILITY
1703
+ typename deque<_Tp, _Allocator>::reference
1704
+ deque<_Tp, _Allocator>::front()
1705
+ {
1706
+ return *(*(__base::__map_.begin() + __base::__start_ / __base::__block_size)
1707
+ + __base::__start_ % __base::__block_size);
1708
+ }
1709
+
1710
+ template <class _Tp, class _Allocator>
1711
+ inline _LIBCPP_INLINE_VISIBILITY
1712
+ typename deque<_Tp, _Allocator>::const_reference
1713
+ deque<_Tp, _Allocator>::front() const
1714
+ {
1715
+ return *(*(__base::__map_.begin() + __base::__start_ / __base::__block_size)
1716
+ + __base::__start_ % __base::__block_size);
1717
+ }
1718
+
1719
+ template <class _Tp, class _Allocator>
1720
+ inline _LIBCPP_INLINE_VISIBILITY
1721
+ typename deque<_Tp, _Allocator>::reference
1722
+ deque<_Tp, _Allocator>::back()
1723
+ {
1724
+ size_type __p = __base::size() + __base::__start_ - 1;
1725
+ return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
1726
+ }
1727
+
1728
+ template <class _Tp, class _Allocator>
1729
+ inline _LIBCPP_INLINE_VISIBILITY
1730
+ typename deque<_Tp, _Allocator>::const_reference
1731
+ deque<_Tp, _Allocator>::back() const
1732
+ {
1733
+ size_type __p = __base::size() + __base::__start_ - 1;
1734
+ return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size);
1735
+ }
1736
+
1737
+ template <class _Tp, class _Allocator>
1738
+ void
1739
+ deque<_Tp, _Allocator>::push_back(const value_type& __v)
1740
+ {
1741
+ allocator_type& __a = __base::__alloc();
1742
+ if (__back_spare() == 0)
1743
+ __add_back_capacity();
1744
+ // __back_spare() >= 1
1745
+ __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), __v);
1746
+ ++__base::size();
1747
+ }
1748
+
1749
+ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1750
+
1751
+ template <class _Tp, class _Allocator>
1752
+ void
1753
+ deque<_Tp, _Allocator>::push_back(value_type&& __v)
1754
+ {
1755
+ allocator_type& __a = __base::__alloc();
1756
+ if (__back_spare() == 0)
1757
+ __add_back_capacity();
1758
+ // __back_spare() >= 1
1759
+ __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), _VSTD::move(__v));
1760
+ ++__base::size();
1761
+ }
1762
+
1763
+ #ifndef _LIBCPP_HAS_NO_VARIADICS
1764
+
1765
+ template <class _Tp, class _Allocator>
1766
+ template <class... _Args>
1767
+ void
1768
+ deque<_Tp, _Allocator>::emplace_back(_Args&&... __args)
1769
+ {
1770
+ allocator_type& __a = __base::__alloc();
1771
+ if (__back_spare() == 0)
1772
+ __add_back_capacity();
1773
+ // __back_spare() >= 1
1774
+ __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), _VSTD::forward<_Args>(__args)...);
1775
+ ++__base::size();
1776
+ }
1777
+
1778
+ #endif // _LIBCPP_HAS_NO_VARIADICS
1779
+ #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1780
+
1781
+ template <class _Tp, class _Allocator>
1782
+ void
1783
+ deque<_Tp, _Allocator>::push_front(const value_type& __v)
1784
+ {
1785
+ allocator_type& __a = __base::__alloc();
1786
+ if (__front_spare() == 0)
1787
+ __add_front_capacity();
1788
+ // __front_spare() >= 1
1789
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), __v);
1790
+ --__base::__start_;
1791
+ ++__base::size();
1792
+ }
1793
+
1794
+ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1795
+
1796
+ template <class _Tp, class _Allocator>
1797
+ void
1798
+ deque<_Tp, _Allocator>::push_front(value_type&& __v)
1799
+ {
1800
+ allocator_type& __a = __base::__alloc();
1801
+ if (__front_spare() == 0)
1802
+ __add_front_capacity();
1803
+ // __front_spare() >= 1
1804
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::move(__v));
1805
+ --__base::__start_;
1806
+ ++__base::size();
1807
+ }
1808
+
1809
+ #ifndef _LIBCPP_HAS_NO_VARIADICS
1810
+
1811
+ template <class _Tp, class _Allocator>
1812
+ template <class... _Args>
1813
+ void
1814
+ deque<_Tp, _Allocator>::emplace_front(_Args&&... __args)
1815
+ {
1816
+ allocator_type& __a = __base::__alloc();
1817
+ if (__front_spare() == 0)
1818
+ __add_front_capacity();
1819
+ // __front_spare() >= 1
1820
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::forward<_Args>(__args)...);
1821
+ --__base::__start_;
1822
+ ++__base::size();
1823
+ }
1824
+
1825
+ #endif // _LIBCPP_HAS_NO_VARIADICS
1826
+ #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1827
+
1828
+ template <class _Tp, class _Allocator>
1829
+ typename deque<_Tp, _Allocator>::iterator
1830
+ deque<_Tp, _Allocator>::insert(const_iterator __p, const value_type& __v)
1831
+ {
1832
+ size_type __pos = __p - __base::begin();
1833
+ size_type __to_end = __base::size() - __pos;
1834
+ allocator_type& __a = __base::__alloc();
1835
+ if (__pos < __to_end)
1836
+ { // insert by shifting things backward
1837
+ if (__front_spare() == 0)
1838
+ __add_front_capacity();
1839
+ // __front_spare() >= 1
1840
+ if (__pos == 0)
1841
+ {
1842
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), __v);
1843
+ --__base::__start_;
1844
+ ++__base::size();
1845
+ }
1846
+ else
1847
+ {
1848
+ const_pointer __vt = pointer_traits<const_pointer>::pointer_to(__v);
1849
+ iterator __b = __base::begin();
1850
+ iterator __bm1 = _VSTD::prev(__b);
1851
+ if (__vt == pointer_traits<const_pointer>::pointer_to(*__b))
1852
+ __vt = pointer_traits<const_pointer>::pointer_to(*__bm1);
1853
+ __alloc_traits::construct(__a, _VSTD::addressof(*__bm1), _VSTD::move(*__b));
1854
+ --__base::__start_;
1855
+ ++__base::size();
1856
+ if (__pos > 1)
1857
+ __b = __move_and_check(_VSTD::next(__b), __b + __pos, __b, __vt);
1858
+ *__b = *__vt;
1859
+ }
1860
+ }
1861
+ else
1862
+ { // insert by shifting things forward
1863
+ if (__back_spare() == 0)
1864
+ __add_back_capacity();
1865
+ // __back_capacity >= 1
1866
+ size_type __de = __base::size() - __pos;
1867
+ if (__de == 0)
1868
+ {
1869
+ __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), __v);
1870
+ ++__base::size();
1871
+ }
1872
+ else
1873
+ {
1874
+ const_pointer __vt = pointer_traits<const_pointer>::pointer_to(__v);
1875
+ iterator __e = __base::end();
1876
+ iterator __em1 = _VSTD::prev(__e);
1877
+ if (__vt == pointer_traits<const_pointer>::pointer_to(*__em1))
1878
+ __vt = pointer_traits<const_pointer>::pointer_to(*__e);
1879
+ __alloc_traits::construct(__a, _VSTD::addressof(*__e), _VSTD::move(*__em1));
1880
+ ++__base::size();
1881
+ if (__de > 1)
1882
+ __e = __move_backward_and_check(__e - __de, __em1, __e, __vt);
1883
+ *--__e = *__vt;
1884
+ }
1885
+ }
1886
+ return __base::begin() + __pos;
1887
+ }
1888
+
1889
+ #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1890
+
1891
+ template <class _Tp, class _Allocator>
1892
+ typename deque<_Tp, _Allocator>::iterator
1893
+ deque<_Tp, _Allocator>::insert(const_iterator __p, value_type&& __v)
1894
+ {
1895
+ size_type __pos = __p - __base::begin();
1896
+ size_type __to_end = __base::size() - __pos;
1897
+ allocator_type& __a = __base::__alloc();
1898
+ if (__pos < __to_end)
1899
+ { // insert by shifting things backward
1900
+ if (__front_spare() == 0)
1901
+ __add_front_capacity();
1902
+ // __front_spare() >= 1
1903
+ if (__pos == 0)
1904
+ {
1905
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::move(__v));
1906
+ --__base::__start_;
1907
+ ++__base::size();
1908
+ }
1909
+ else
1910
+ {
1911
+ iterator __b = __base::begin();
1912
+ iterator __bm1 = _VSTD::prev(__b);
1913
+ __alloc_traits::construct(__a, _VSTD::addressof(*__bm1), _VSTD::move(*__b));
1914
+ --__base::__start_;
1915
+ ++__base::size();
1916
+ if (__pos > 1)
1917
+ __b = _VSTD::move(_VSTD::next(__b), __b + __pos, __b);
1918
+ *__b = _VSTD::move(__v);
1919
+ }
1920
+ }
1921
+ else
1922
+ { // insert by shifting things forward
1923
+ if (__back_spare() == 0)
1924
+ __add_back_capacity();
1925
+ // __back_capacity >= 1
1926
+ size_type __de = __base::size() - __pos;
1927
+ if (__de == 0)
1928
+ {
1929
+ __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), _VSTD::move(__v));
1930
+ ++__base::size();
1931
+ }
1932
+ else
1933
+ {
1934
+ iterator __e = __base::end();
1935
+ iterator __em1 = _VSTD::prev(__e);
1936
+ __alloc_traits::construct(__a, _VSTD::addressof(*__e), _VSTD::move(*__em1));
1937
+ ++__base::size();
1938
+ if (__de > 1)
1939
+ __e = _VSTD::move_backward(__e - __de, __em1, __e);
1940
+ *--__e = _VSTD::move(__v);
1941
+ }
1942
+ }
1943
+ return __base::begin() + __pos;
1944
+ }
1945
+
1946
+ #ifndef _LIBCPP_HAS_NO_VARIADICS
1947
+
1948
+ template <class _Tp, class _Allocator>
1949
+ template <class... _Args>
1950
+ typename deque<_Tp, _Allocator>::iterator
1951
+ deque<_Tp, _Allocator>::emplace(const_iterator __p, _Args&&... __args)
1952
+ {
1953
+ size_type __pos = __p - __base::begin();
1954
+ size_type __to_end = __base::size() - __pos;
1955
+ allocator_type& __a = __base::__alloc();
1956
+ if (__pos < __to_end)
1957
+ { // insert by shifting things backward
1958
+ if (__front_spare() == 0)
1959
+ __add_front_capacity();
1960
+ // __front_spare() >= 1
1961
+ if (__pos == 0)
1962
+ {
1963
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::forward<_Args>(__args)...);
1964
+ --__base::__start_;
1965
+ ++__base::size();
1966
+ }
1967
+ else
1968
+ {
1969
+ value_type __tmp(_VSTD::forward<_Args>(__args)...);
1970
+ iterator __b = __base::begin();
1971
+ iterator __bm1 = _VSTD::prev(__b);
1972
+ __alloc_traits::construct(__a, _VSTD::addressof(*__bm1), _VSTD::move(*__b));
1973
+ --__base::__start_;
1974
+ ++__base::size();
1975
+ if (__pos > 1)
1976
+ __b = _VSTD::move(_VSTD::next(__b), __b + __pos, __b);
1977
+ *__b = _VSTD::move(__tmp);
1978
+ }
1979
+ }
1980
+ else
1981
+ { // insert by shifting things forward
1982
+ if (__back_spare() == 0)
1983
+ __add_back_capacity();
1984
+ // __back_capacity >= 1
1985
+ size_type __de = __base::size() - __pos;
1986
+ if (__de == 0)
1987
+ {
1988
+ __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), _VSTD::forward<_Args>(__args)...);
1989
+ ++__base::size();
1990
+ }
1991
+ else
1992
+ {
1993
+ value_type __tmp(_VSTD::forward<_Args>(__args)...);
1994
+ iterator __e = __base::end();
1995
+ iterator __em1 = _VSTD::prev(__e);
1996
+ __alloc_traits::construct(__a, _VSTD::addressof(*__e), _VSTD::move(*__em1));
1997
+ ++__base::size();
1998
+ if (__de > 1)
1999
+ __e = _VSTD::move_backward(__e - __de, __em1, __e);
2000
+ *--__e = _VSTD::move(__tmp);
2001
+ }
2002
+ }
2003
+ return __base::begin() + __pos;
2004
+ }
2005
+
2006
+ #endif // _LIBCPP_HAS_NO_VARIADICS
2007
+ #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
2008
+
2009
+ template <class _Tp, class _Allocator>
2010
+ typename deque<_Tp, _Allocator>::iterator
2011
+ deque<_Tp, _Allocator>::insert(const_iterator __p, size_type __n, const value_type& __v)
2012
+ {
2013
+ size_type __pos = __p - __base::begin();
2014
+ size_type __to_end = __base::size() - __pos;
2015
+ allocator_type& __a = __base::__alloc();
2016
+ if (__pos < __to_end)
2017
+ { // insert by shifting things backward
2018
+ if (__n > __front_spare())
2019
+ __add_front_capacity(__n - __front_spare());
2020
+ // __n <= __front_spare()
2021
+ size_type __old_n = __n;
2022
+ iterator __old_begin = __base::begin();
2023
+ iterator __i = __old_begin;
2024
+ if (__n > __pos)
2025
+ {
2026
+ for (size_type __m = __n - __pos; __m; --__m, --__base::__start_, ++__base::size())
2027
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__i), __v);
2028
+ __n = __pos;
2029
+ }
2030
+ if (__n > 0)
2031
+ {
2032
+ const_pointer __vt = pointer_traits<const_pointer>::pointer_to(__v);
2033
+ iterator __obn = __old_begin + __n;
2034
+ __move_construct_backward_and_check(__old_begin, __obn, __i, __vt);
2035
+ if (__n < __pos)
2036
+ __old_begin = __move_and_check(__obn, __old_begin + __pos, __old_begin, __vt);
2037
+ _VSTD::fill_n(__old_begin, __n, *__vt);
2038
+ }
2039
+ }
2040
+ else
2041
+ { // insert by shifting things forward
2042
+ size_type __back_capacity = __back_spare();
2043
+ if (__n > __back_capacity)
2044
+ __add_back_capacity(__n - __back_capacity);
2045
+ // __n <= __back_capacity
2046
+ size_type __old_n = __n;
2047
+ iterator __old_end = __base::end();
2048
+ iterator __i = __old_end;
2049
+ size_type __de = __base::size() - __pos;
2050
+ if (__n > __de)
2051
+ {
2052
+ for (size_type __m = __n - __de; __m; --__m, ++__i, ++__base::size())
2053
+ __alloc_traits::construct(__a, _VSTD::addressof(*__i), __v);
2054
+ __n = __de;
2055
+ }
2056
+ if (__n > 0)
2057
+ {
2058
+ const_pointer __vt = pointer_traits<const_pointer>::pointer_to(__v);
2059
+ iterator __oen = __old_end - __n;
2060
+ __move_construct_and_check(__oen, __old_end, __i, __vt);
2061
+ if (__n < __de)
2062
+ __old_end = __move_backward_and_check(__old_end - __de, __oen, __old_end, __vt);
2063
+ _VSTD::fill_n(__old_end - __n, __n, *__vt);
2064
+ }
2065
+ }
2066
+ return __base::begin() + __pos;
2067
+ }
2068
+
2069
+ template <class _Tp, class _Allocator>
2070
+ template <class _InputIter>
2071
+ typename deque<_Tp, _Allocator>::iterator
2072
+ deque<_Tp, _Allocator>::insert(const_iterator __p, _InputIter __f, _InputIter __l,
2073
+ typename enable_if<__is_input_iterator<_InputIter>::value
2074
+ &&!__is_bidirectional_iterator<_InputIter>::value>::type*)
2075
+ {
2076
+ __split_buffer<value_type, allocator_type&> __buf(__base::__alloc());
2077
+ __buf.__construct_at_end(__f, __l);
2078
+ typedef typename __split_buffer<value_type, allocator_type&>::iterator __bi;
2079
+ return insert(__p, move_iterator<__bi>(__buf.begin()), move_iterator<__bi>(__buf.end()));
2080
+ }
2081
+
2082
+ template <class _Tp, class _Allocator>
2083
+ template <class _BiIter>
2084
+ typename deque<_Tp, _Allocator>::iterator
2085
+ deque<_Tp, _Allocator>::insert(const_iterator __p, _BiIter __f, _BiIter __l,
2086
+ typename enable_if<__is_bidirectional_iterator<_BiIter>::value>::type*)
2087
+ {
2088
+ size_type __n = _VSTD::distance(__f, __l);
2089
+ size_type __pos = __p - __base::begin();
2090
+ size_type __to_end = __base::size() - __pos;
2091
+ allocator_type& __a = __base::__alloc();
2092
+ if (__pos < __to_end)
2093
+ { // insert by shifting things backward
2094
+ if (__n > __front_spare())
2095
+ __add_front_capacity(__n - __front_spare());
2096
+ // __n <= __front_spare()
2097
+ size_type __old_n = __n;
2098
+ iterator __old_begin = __base::begin();
2099
+ iterator __i = __old_begin;
2100
+ _BiIter __m = __f;
2101
+ if (__n > __pos)
2102
+ {
2103
+ __m = __pos < __n / 2 ? _VSTD::prev(__l, __pos) : _VSTD::next(__f, __n - __pos);
2104
+ for (_BiIter __j = __m; __j != __f; --__base::__start_, ++__base::size())
2105
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__i), *--__j);
2106
+ __n = __pos;
2107
+ }
2108
+ if (__n > 0)
2109
+ {
2110
+ iterator __obn = __old_begin + __n;
2111
+ for (iterator __j = __obn; __j != __old_begin;)
2112
+ {
2113
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__i), _VSTD::move(*--__j));
2114
+ --__base::__start_;
2115
+ ++__base::size();
2116
+ }
2117
+ if (__n < __pos)
2118
+ __old_begin = _VSTD::move(__obn, __old_begin + __pos, __old_begin);
2119
+ _VSTD::copy(__m, __l, __old_begin);
2120
+ }
2121
+ }
2122
+ else
2123
+ { // insert by shifting things forward
2124
+ size_type __back_capacity = __back_spare();
2125
+ if (__n > __back_capacity)
2126
+ __add_back_capacity(__n - __back_capacity);
2127
+ // __n <= __back_capacity
2128
+ size_type __old_n = __n;
2129
+ iterator __old_end = __base::end();
2130
+ iterator __i = __old_end;
2131
+ _BiIter __m = __l;
2132
+ size_type __de = __base::size() - __pos;
2133
+ if (__n > __de)
2134
+ {
2135
+ __m = __de < __n / 2 ? _VSTD::next(__f, __de) : _VSTD::prev(__l, __n - __de);
2136
+ for (_BiIter __j = __m; __j != __l; ++__i, ++__j, ++__base::size())
2137
+ __alloc_traits::construct(__a, _VSTD::addressof(*__i), *__j);
2138
+ __n = __de;
2139
+ }
2140
+ if (__n > 0)
2141
+ {
2142
+ iterator __oen = __old_end - __n;
2143
+ for (iterator __j = __oen; __j != __old_end; ++__i, ++__j, ++__base::size())
2144
+ __alloc_traits::construct(__a, _VSTD::addressof(*__i), _VSTD::move(*__j));
2145
+ if (__n < __de)
2146
+ __old_end = _VSTD::move_backward(__old_end - __de, __oen, __old_end);
2147
+ _VSTD::copy_backward(__f, __m, __old_end);
2148
+ }
2149
+ }
2150
+ return __base::begin() + __pos;
2151
+ }
2152
+
2153
+ template <class _Tp, class _Allocator>
2154
+ template <class _InpIter>
2155
+ void
2156
+ deque<_Tp, _Allocator>::__append(_InpIter __f, _InpIter __l,
2157
+ typename enable_if<__is_input_iterator<_InpIter>::value &&
2158
+ !__is_forward_iterator<_InpIter>::value>::type*)
2159
+ {
2160
+ for (; __f != __l; ++__f)
2161
+ push_back(*__f);
2162
+ }
2163
+
2164
+ template <class _Tp, class _Allocator>
2165
+ template <class _ForIter>
2166
+ void
2167
+ deque<_Tp, _Allocator>::__append(_ForIter __f, _ForIter __l,
2168
+ typename enable_if<__is_forward_iterator<_ForIter>::value>::type*)
2169
+ {
2170
+ size_type __n = _VSTD::distance(__f, __l);
2171
+ allocator_type& __a = __base::__alloc();
2172
+ size_type __back_capacity = __back_spare();
2173
+ if (__n > __back_capacity)
2174
+ __add_back_capacity(__n - __back_capacity);
2175
+ // __n <= __back_capacity
2176
+ for (iterator __i = __base::end(); __f != __l; ++__i, ++__f, ++__base::size())
2177
+ __alloc_traits::construct(__a, _VSTD::addressof(*__i), *__f);
2178
+ }
2179
+
2180
+ template <class _Tp, class _Allocator>
2181
+ void
2182
+ deque<_Tp, _Allocator>::__append(size_type __n)
2183
+ {
2184
+ allocator_type& __a = __base::__alloc();
2185
+ size_type __back_capacity = __back_spare();
2186
+ if (__n > __back_capacity)
2187
+ __add_back_capacity(__n - __back_capacity);
2188
+ // __n <= __back_capacity
2189
+ for (iterator __i = __base::end(); __n; --__n, ++__i, ++__base::size())
2190
+ __alloc_traits::construct(__a, _VSTD::addressof(*__i));
2191
+ }
2192
+
2193
+ template <class _Tp, class _Allocator>
2194
+ void
2195
+ deque<_Tp, _Allocator>::__append(size_type __n, const value_type& __v)
2196
+ {
2197
+ allocator_type& __a = __base::__alloc();
2198
+ size_type __back_capacity = __back_spare();
2199
+ if (__n > __back_capacity)
2200
+ __add_back_capacity(__n - __back_capacity);
2201
+ // __n <= __back_capacity
2202
+ for (iterator __i = __base::end(); __n; --__n, ++__i, ++__base::size())
2203
+ __alloc_traits::construct(__a, _VSTD::addressof(*__i), __v);
2204
+ }
2205
+
2206
+ // Create front capacity for one block of elements.
2207
+ // Strong guarantee. Either do it or don't touch anything.
2208
+ template <class _Tp, class _Allocator>
2209
+ void
2210
+ deque<_Tp, _Allocator>::__add_front_capacity()
2211
+ {
2212
+ allocator_type& __a = __base::__alloc();
2213
+ if (__back_spare() >= __base::__block_size)
2214
+ {
2215
+ __base::__start_ += __base::__block_size;
2216
+ pointer __pt = __base::__map_.back();
2217
+ __base::__map_.pop_back();
2218
+ __base::__map_.push_front(__pt);
2219
+ }
2220
+ // Else if __base::__map_.size() < __base::__map_.capacity() then we need to allocate 1 buffer
2221
+ else if (__base::__map_.size() < __base::__map_.capacity())
2222
+ { // we can put the new buffer into the map, but don't shift things around
2223
+ // until all buffers are allocated. If we throw, we don't need to fix
2224
+ // anything up (any added buffers are undetectible)
2225
+ if (__base::__map_.__front_spare() > 0)
2226
+ __base::__map_.push_front(__alloc_traits::allocate(__a, __base::__block_size));
2227
+ else
2228
+ {
2229
+ __base::__map_.push_back(__alloc_traits::allocate(__a, __base::__block_size));
2230
+ // Done allocating, reorder capacity
2231
+ pointer __pt = __base::__map_.back();
2232
+ __base::__map_.pop_back();
2233
+ __base::__map_.push_front(__pt);
2234
+ }
2235
+ __base::__start_ = __base::__map_.size() == 1 ?
2236
+ __base::__block_size / 2 :
2237
+ __base::__start_ + __base::__block_size;
2238
+ }
2239
+ // Else need to allocate 1 buffer, *and* we need to reallocate __map_.
2240
+ else
2241
+ {
2242
+ __split_buffer<pointer, typename __base::__pointer_allocator&>
2243
+ __buf(max<size_type>(2 * __base::__map_.capacity(), 1),
2244
+ 0, __base::__map_.__alloc());
2245
+ #ifndef _LIBCPP_NO_EXCEPTIONS
2246
+ try
2247
+ {
2248
+ #endif // _LIBCPP_NO_EXCEPTIONS
2249
+ __buf.push_back(__alloc_traits::allocate(__a, __base::__block_size));
2250
+ #ifndef _LIBCPP_NO_EXCEPTIONS
2251
+ }
2252
+ catch (...)
2253
+ {
2254
+ __alloc_traits::deallocate(__a, __buf.front(), __base::__block_size);
2255
+ throw;
2256
+ }
2257
+ #endif // _LIBCPP_NO_EXCEPTIONS
2258
+ for (typename __base::__map_pointer __i = __base::__map_.begin();
2259
+ __i != __base::__map_.end(); ++__i)
2260
+ __buf.push_back(*__i);
2261
+ _VSTD::swap(__base::__map_.__first_, __buf.__first_);
2262
+ _VSTD::swap(__base::__map_.__begin_, __buf.__begin_);
2263
+ _VSTD::swap(__base::__map_.__end_, __buf.__end_);
2264
+ _VSTD::swap(__base::__map_.__end_cap(), __buf.__end_cap());
2265
+ __base::__start_ = __base::__map_.size() == 1 ?
2266
+ __base::__block_size / 2 :
2267
+ __base::__start_ + __base::__block_size;
2268
+ }
2269
+ }
2270
+
2271
+ // Create front capacity for __n elements.
2272
+ // Strong guarantee. Either do it or don't touch anything.
2273
+ template <class _Tp, class _Allocator>
2274
+ void
2275
+ deque<_Tp, _Allocator>::__add_front_capacity(size_type __n)
2276
+ {
2277
+ allocator_type& __a = __base::__alloc();
2278
+ size_type __nb = __recommend_blocks(__n + __base::__map_.empty());
2279
+ // Number of unused blocks at back:
2280
+ size_type __back_capacity = __back_spare() / __base::__block_size;
2281
+ __back_capacity = _VSTD::min(__back_capacity, __nb); // don't take more than you need
2282
+ __nb -= __back_capacity; // number of blocks need to allocate
2283
+ // If __nb == 0, then we have sufficient capacity.
2284
+ if (__nb == 0)
2285
+ {
2286
+ __base::__start_ += __base::__block_size * __back_capacity;
2287
+ for (; __back_capacity > 0; --__back_capacity)
2288
+ {
2289
+ pointer __pt = __base::__map_.back();
2290
+ __base::__map_.pop_back();
2291
+ __base::__map_.push_front(__pt);
2292
+ }
2293
+ }
2294
+ // Else if __nb <= __map_.capacity() - __map_.size() then we need to allocate __nb buffers
2295
+ else if (__nb <= __base::__map_.capacity() - __base::__map_.size())
2296
+ { // we can put the new buffers into the map, but don't shift things around
2297
+ // until all buffers are allocated. If we throw, we don't need to fix
2298
+ // anything up (any added buffers are undetectible)
2299
+ for (; __nb > 0; --__nb, __base::__start_ += __base::__block_size - (__base::__map_.size() == 1))
2300
+ {
2301
+ if (__base::__map_.__front_spare() == 0)
2302
+ break;
2303
+ __base::__map_.push_front(__alloc_traits::allocate(__a, __base::__block_size));
2304
+ }
2305
+ for (; __nb > 0; --__nb, ++__back_capacity)
2306
+ __base::__map_.push_back(__alloc_traits::allocate(__a, __base::__block_size));
2307
+ // Done allocating, reorder capacity
2308
+ __base::__start_ += __back_capacity * __base::__block_size;
2309
+ for (; __back_capacity > 0; --__back_capacity)
2310
+ {
2311
+ pointer __pt = __base::__map_.back();
2312
+ __base::__map_.pop_back();
2313
+ __base::__map_.push_front(__pt);
2314
+ }
2315
+ }
2316
+ // Else need to allocate __nb buffers, *and* we need to reallocate __map_.
2317
+ else
2318
+ {
2319
+ size_type __ds = (__nb + __back_capacity) * __base::__block_size - __base::__map_.empty();
2320
+ __split_buffer<pointer, typename __base::__pointer_allocator&>
2321
+ __buf(max<size_type>(2* __base::__map_.capacity(),
2322
+ __nb + __base::__map_.size()),
2323
+ 0, __base::__map_.__alloc());
2324
+ #ifndef _LIBCPP_NO_EXCEPTIONS
2325
+ try
2326
+ {
2327
+ #endif // _LIBCPP_NO_EXCEPTIONS
2328
+ for (; __nb > 0; --__nb)
2329
+ __buf.push_back(__alloc_traits::allocate(__a, __base::__block_size));
2330
+ #ifndef _LIBCPP_NO_EXCEPTIONS
2331
+ }
2332
+ catch (...)
2333
+ {
2334
+ for (typename __base::__map_pointer __i = __buf.begin();
2335
+ __i != __buf.end(); ++__i)
2336
+ __alloc_traits::deallocate(__a, *__i, __base::__block_size);
2337
+ throw;
2338
+ }
2339
+ #endif // _LIBCPP_NO_EXCEPTIONS
2340
+ for (; __back_capacity > 0; --__back_capacity)
2341
+ {
2342
+ __buf.push_back(__base::__map_.back());
2343
+ __base::__map_.pop_back();
2344
+ }
2345
+ for (typename __base::__map_pointer __i = __base::__map_.begin();
2346
+ __i != __base::__map_.end(); ++__i)
2347
+ __buf.push_back(*__i);
2348
+ _VSTD::swap(__base::__map_.__first_, __buf.__first_);
2349
+ _VSTD::swap(__base::__map_.__begin_, __buf.__begin_);
2350
+ _VSTD::swap(__base::__map_.__end_, __buf.__end_);
2351
+ _VSTD::swap(__base::__map_.__end_cap(), __buf.__end_cap());
2352
+ __base::__start_ += __ds;
2353
+ }
2354
+ }
2355
+
2356
+ // Create back capacity for one block of elements.
2357
+ // Strong guarantee. Either do it or don't touch anything.
2358
+ template <class _Tp, class _Allocator>
2359
+ void
2360
+ deque<_Tp, _Allocator>::__add_back_capacity()
2361
+ {
2362
+ allocator_type& __a = __base::__alloc();
2363
+ if (__front_spare() >= __base::__block_size)
2364
+ {
2365
+ __base::__start_ -= __base::__block_size;
2366
+ pointer __pt = __base::__map_.front();
2367
+ __base::__map_.pop_front();
2368
+ __base::__map_.push_back(__pt);
2369
+ }
2370
+ // Else if __nb <= __map_.capacity() - __map_.size() then we need to allocate __nb buffers
2371
+ else if (__base::__map_.size() < __base::__map_.capacity())
2372
+ { // we can put the new buffer into the map, but don't shift things around
2373
+ // until it is allocated. If we throw, we don't need to fix
2374
+ // anything up (any added buffers are undetectible)
2375
+ if (__base::__map_.__back_spare() != 0)
2376
+ __base::__map_.push_back(__alloc_traits::allocate(__a, __base::__block_size));
2377
+ else
2378
+ {
2379
+ __base::__map_.push_front(__alloc_traits::allocate(__a, __base::__block_size));
2380
+ // Done allocating, reorder capacity
2381
+ pointer __pt = __base::__map_.front();
2382
+ __base::__map_.pop_front();
2383
+ __base::__map_.push_back(__pt);
2384
+ }
2385
+ }
2386
+ // Else need to allocate 1 buffer, *and* we need to reallocate __map_.
2387
+ else
2388
+ {
2389
+ __split_buffer<pointer, typename __base::__pointer_allocator&>
2390
+ __buf(max<size_type>(2* __base::__map_.capacity(), 1),
2391
+ __base::__map_.size(),
2392
+ __base::__map_.__alloc());
2393
+ #ifndef _LIBCPP_NO_EXCEPTIONS
2394
+ try
2395
+ {
2396
+ #endif // _LIBCPP_NO_EXCEPTIONS
2397
+ __buf.push_back(__alloc_traits::allocate(__a, __base::__block_size));
2398
+ #ifndef _LIBCPP_NO_EXCEPTIONS
2399
+ }
2400
+ catch (...)
2401
+ {
2402
+ __alloc_traits::deallocate(__a, __buf.back(), __base::__block_size);
2403
+ throw;
2404
+ }
2405
+ #endif // _LIBCPP_NO_EXCEPTIONS
2406
+ for (typename __base::__map_pointer __i = __base::__map_.end();
2407
+ __i != __base::__map_.begin();)
2408
+ __buf.push_front(*--__i);
2409
+ _VSTD::swap(__base::__map_.__first_, __buf.__first_);
2410
+ _VSTD::swap(__base::__map_.__begin_, __buf.__begin_);
2411
+ _VSTD::swap(__base::__map_.__end_, __buf.__end_);
2412
+ _VSTD::swap(__base::__map_.__end_cap(), __buf.__end_cap());
2413
+ }
2414
+ }
2415
+
2416
+ // Create back capacity for __n elements.
2417
+ // Strong guarantee. Either do it or don't touch anything.
2418
+ template <class _Tp, class _Allocator>
2419
+ void
2420
+ deque<_Tp, _Allocator>::__add_back_capacity(size_type __n)
2421
+ {
2422
+ allocator_type& __a = __base::__alloc();
2423
+ size_type __nb = __recommend_blocks(__n + __base::__map_.empty());
2424
+ // Number of unused blocks at front:
2425
+ size_type __front_capacity = __front_spare() / __base::__block_size;
2426
+ __front_capacity = _VSTD::min(__front_capacity, __nb); // don't take more than you need
2427
+ __nb -= __front_capacity; // number of blocks need to allocate
2428
+ // If __nb == 0, then we have sufficient capacity.
2429
+ if (__nb == 0)
2430
+ {
2431
+ __base::__start_ -= __base::__block_size * __front_capacity;
2432
+ for (; __front_capacity > 0; --__front_capacity)
2433
+ {
2434
+ pointer __pt = __base::__map_.front();
2435
+ __base::__map_.pop_front();
2436
+ __base::__map_.push_back(__pt);
2437
+ }
2438
+ }
2439
+ // Else if __nb <= __map_.capacity() - __map_.size() then we need to allocate __nb buffers
2440
+ else if (__nb <= __base::__map_.capacity() - __base::__map_.size())
2441
+ { // we can put the new buffers into the map, but don't shift things around
2442
+ // until all buffers are allocated. If we throw, we don't need to fix
2443
+ // anything up (any added buffers are undetectible)
2444
+ for (; __nb > 0; --__nb)
2445
+ {
2446
+ if (__base::__map_.__back_spare() == 0)
2447
+ break;
2448
+ __base::__map_.push_back(__alloc_traits::allocate(__a, __base::__block_size));
2449
+ }
2450
+ for (; __nb > 0; --__nb, ++__front_capacity, __base::__start_ +=
2451
+ __base::__block_size - (__base::__map_.size() == 1))
2452
+ __base::__map_.push_front(__alloc_traits::allocate(__a, __base::__block_size));
2453
+ // Done allocating, reorder capacity
2454
+ __base::__start_ -= __base::__block_size * __front_capacity;
2455
+ for (; __front_capacity > 0; --__front_capacity)
2456
+ {
2457
+ pointer __pt = __base::__map_.front();
2458
+ __base::__map_.pop_front();
2459
+ __base::__map_.push_back(__pt);
2460
+ }
2461
+ }
2462
+ // Else need to allocate __nb buffers, *and* we need to reallocate __map_.
2463
+ else
2464
+ {
2465
+ size_type __ds = __front_capacity * __base::__block_size;
2466
+ __split_buffer<pointer, typename __base::__pointer_allocator&>
2467
+ __buf(max<size_type>(2* __base::__map_.capacity(),
2468
+ __nb + __base::__map_.size()),
2469
+ __base::__map_.size() - __front_capacity,
2470
+ __base::__map_.__alloc());
2471
+ #ifndef _LIBCPP_NO_EXCEPTIONS
2472
+ try
2473
+ {
2474
+ #endif // _LIBCPP_NO_EXCEPTIONS
2475
+ for (; __nb > 0; --__nb)
2476
+ __buf.push_back(__alloc_traits::allocate(__a, __base::__block_size));
2477
+ #ifndef _LIBCPP_NO_EXCEPTIONS
2478
+ }
2479
+ catch (...)
2480
+ {
2481
+ for (typename __base::__map_pointer __i = __buf.begin();
2482
+ __i != __buf.end(); ++__i)
2483
+ __alloc_traits::deallocate(__a, *__i, __base::__block_size);
2484
+ throw;
2485
+ }
2486
+ #endif // _LIBCPP_NO_EXCEPTIONS
2487
+ for (; __front_capacity > 0; --__front_capacity)
2488
+ {
2489
+ __buf.push_back(__base::__map_.front());
2490
+ __base::__map_.pop_front();
2491
+ }
2492
+ for (typename __base::__map_pointer __i = __base::__map_.end();
2493
+ __i != __base::__map_.begin();)
2494
+ __buf.push_front(*--__i);
2495
+ _VSTD::swap(__base::__map_.__first_, __buf.__first_);
2496
+ _VSTD::swap(__base::__map_.__begin_, __buf.__begin_);
2497
+ _VSTD::swap(__base::__map_.__end_, __buf.__end_);
2498
+ _VSTD::swap(__base::__map_.__end_cap(), __buf.__end_cap());
2499
+ __base::__start_ -= __ds;
2500
+ }
2501
+ }
2502
+
2503
+ template <class _Tp, class _Allocator>
2504
+ void
2505
+ deque<_Tp, _Allocator>::pop_front()
2506
+ {
2507
+ allocator_type& __a = __base::__alloc();
2508
+ __alloc_traits::destroy(__a, *(__base::__map_.begin() +
2509
+ __base::__start_ / __base::__block_size) +
2510
+ __base::__start_ % __base::__block_size);
2511
+ --__base::size();
2512
+ if (++__base::__start_ >= 2 * __base::__block_size)
2513
+ {
2514
+ __alloc_traits::deallocate(__a, __base::__map_.front(), __base::__block_size);
2515
+ __base::__map_.pop_front();
2516
+ __base::__start_ -= __base::__block_size;
2517
+ }
2518
+ }
2519
+
2520
+ template <class _Tp, class _Allocator>
2521
+ void
2522
+ deque<_Tp, _Allocator>::pop_back()
2523
+ {
2524
+ allocator_type& __a = __base::__alloc();
2525
+ size_type __p = __base::size() + __base::__start_ - 1;
2526
+ __alloc_traits::destroy(__a, *(__base::__map_.begin() +
2527
+ __p / __base::__block_size) +
2528
+ __p % __base::__block_size);
2529
+ --__base::size();
2530
+ if (__back_spare() >= 2 * __base::__block_size)
2531
+ {
2532
+ __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size);
2533
+ __base::__map_.pop_back();
2534
+ }
2535
+ }
2536
+
2537
+ // move assign [__f, __l) to [__r, __r + (__l-__f)).
2538
+ // If __vt points into [__f, __l), then subtract (__f - __r) from __vt.
2539
+ template <class _Tp, class _Allocator>
2540
+ typename deque<_Tp, _Allocator>::iterator
2541
+ deque<_Tp, _Allocator>::__move_and_check(iterator __f, iterator __l, iterator __r,
2542
+ const_pointer& __vt)
2543
+ {
2544
+ // as if
2545
+ // for (; __f != __l; ++__f, ++__r)
2546
+ // *__r = _VSTD::move(*__f);
2547
+ difference_type __n = __l - __f;
2548
+ while (__n > 0)
2549
+ {
2550
+ pointer __fb = __f.__ptr_;
2551
+ pointer __fe = *__f.__m_iter_ + __base::__block_size;
2552
+ difference_type __bs = __fe - __fb;
2553
+ if (__bs > __n)
2554
+ {
2555
+ __bs = __n;
2556
+ __fe = __fb + __bs;
2557
+ }
2558
+ if (__fb <= __vt && __vt < __fe)
2559
+ __vt = (const_iterator(__f.__m_iter_, __vt) -= __f - __r).__ptr_;
2560
+ __r = _VSTD::move(__fb, __fe, __r);
2561
+ __n -= __bs;
2562
+ __f += __bs;
2563
+ }
2564
+ return __r;
2565
+ }
2566
+
2567
+ // move assign [__f, __l) to [__r - (__l-__f), __r) backwards.
2568
+ // If __vt points into [__f, __l), then add (__r - __l) to __vt.
2569
+ template <class _Tp, class _Allocator>
2570
+ typename deque<_Tp, _Allocator>::iterator
2571
+ deque<_Tp, _Allocator>::__move_backward_and_check(iterator __f, iterator __l, iterator __r,
2572
+ const_pointer& __vt)
2573
+ {
2574
+ // as if
2575
+ // while (__f != __l)
2576
+ // *--__r = _VSTD::move(*--__l);
2577
+ difference_type __n = __l - __f;
2578
+ while (__n > 0)
2579
+ {
2580
+ --__l;
2581
+ pointer __lb = *__l.__m_iter_;
2582
+ pointer __le = __l.__ptr_ + 1;
2583
+ difference_type __bs = __le - __lb;
2584
+ if (__bs > __n)
2585
+ {
2586
+ __bs = __n;
2587
+ __lb = __le - __bs;
2588
+ }
2589
+ if (__lb <= __vt && __vt < __le)
2590
+ __vt = (const_iterator(__l.__m_iter_, __vt) += __r - __l - 1).__ptr_;
2591
+ __r = _VSTD::move_backward(__lb, __le, __r);
2592
+ __n -= __bs;
2593
+ __l -= __bs - 1;
2594
+ }
2595
+ return __r;
2596
+ }
2597
+
2598
+ // move construct [__f, __l) to [__r, __r + (__l-__f)).
2599
+ // If __vt points into [__f, __l), then add (__r - __f) to __vt.
2600
+ template <class _Tp, class _Allocator>
2601
+ void
2602
+ deque<_Tp, _Allocator>::__move_construct_and_check(iterator __f, iterator __l,
2603
+ iterator __r, const_pointer& __vt)
2604
+ {
2605
+ allocator_type& __a = __base::__alloc();
2606
+ // as if
2607
+ // for (; __f != __l; ++__r, ++__f, ++__base::size())
2608
+ // __alloc_traits::construct(__a, _VSTD::addressof(*__r), _VSTD::move(*__f));
2609
+ difference_type __n = __l - __f;
2610
+ while (__n > 0)
2611
+ {
2612
+ pointer __fb = __f.__ptr_;
2613
+ pointer __fe = *__f.__m_iter_ + __base::__block_size;
2614
+ difference_type __bs = __fe - __fb;
2615
+ if (__bs > __n)
2616
+ {
2617
+ __bs = __n;
2618
+ __fe = __fb + __bs;
2619
+ }
2620
+ if (__fb <= __vt && __vt < __fe)
2621
+ __vt = (const_iterator(__f.__m_iter_, __vt) += __r - __f).__ptr_;
2622
+ for (; __fb != __fe; ++__fb, ++__r, ++__base::size())
2623
+ __alloc_traits::construct(__a, _VSTD::addressof(*__r), _VSTD::move(*__fb));
2624
+ __n -= __bs;
2625
+ __f += __bs;
2626
+ }
2627
+ }
2628
+
2629
+ // move construct [__f, __l) to [__r - (__l-__f), __r) backwards.
2630
+ // If __vt points into [__f, __l), then subtract (__l - __r) from __vt.
2631
+ template <class _Tp, class _Allocator>
2632
+ void
2633
+ deque<_Tp, _Allocator>::__move_construct_backward_and_check(iterator __f, iterator __l,
2634
+ iterator __r, const_pointer& __vt)
2635
+ {
2636
+ allocator_type& __a = __base::__alloc();
2637
+ // as if
2638
+ // for (iterator __j = __l; __j != __f;)
2639
+ // {
2640
+ // __alloc_traitsconstruct(__a, _VSTD::addressof(*--__r), _VSTD::move(*--__j));
2641
+ // --__base::__start_;
2642
+ // ++__base::size();
2643
+ // }
2644
+ difference_type __n = __l - __f;
2645
+ while (__n > 0)
2646
+ {
2647
+ --__l;
2648
+ pointer __lb = *__l.__m_iter_;
2649
+ pointer __le = __l.__ptr_ + 1;
2650
+ difference_type __bs = __le - __lb;
2651
+ if (__bs > __n)
2652
+ {
2653
+ __bs = __n;
2654
+ __lb = __le - __bs;
2655
+ }
2656
+ if (__lb <= __vt && __vt < __le)
2657
+ __vt = (const_iterator(__l.__m_iter_, __vt) -= __l - __r + 1).__ptr_;
2658
+ while (__le != __lb)
2659
+ {
2660
+ __alloc_traits::construct(__a, _VSTD::addressof(*--__r), _VSTD::move(*--__le));
2661
+ --__base::__start_;
2662
+ ++__base::size();
2663
+ }
2664
+ __n -= __bs;
2665
+ __l -= __bs - 1;
2666
+ }
2667
+ }
2668
+
2669
+ template <class _Tp, class _Allocator>
2670
+ typename deque<_Tp, _Allocator>::iterator
2671
+ deque<_Tp, _Allocator>::erase(const_iterator __f)
2672
+ {
2673
+ difference_type __n = 1;
2674
+ iterator __b = __base::begin();
2675
+ difference_type __pos = __f - __b;
2676
+ iterator __p = __b + __pos;
2677
+ allocator_type& __a = __base::__alloc();
2678
+ if (__pos < (__base::size() - 1) / 2)
2679
+ { // erase from front
2680
+ _VSTD::move_backward(__b, __p, _VSTD::next(__p));
2681
+ __alloc_traits::destroy(__a, _VSTD::addressof(*__b));
2682
+ --__base::size();
2683
+ ++__base::__start_;
2684
+ if (__front_spare() >= 2 * __base::__block_size)
2685
+ {
2686
+ __alloc_traits::deallocate(__a, __base::__map_.front(), __base::__block_size);
2687
+ __base::__map_.pop_front();
2688
+ __base::__start_ -= __base::__block_size;
2689
+ }
2690
+ }
2691
+ else
2692
+ { // erase from back
2693
+ iterator __i = _VSTD::move(_VSTD::next(__p), __base::end(), __p);
2694
+ __alloc_traits::destroy(__a, _VSTD::addressof(*__i));
2695
+ --__base::size();
2696
+ if (__back_spare() >= 2 * __base::__block_size)
2697
+ {
2698
+ __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size);
2699
+ __base::__map_.pop_back();
2700
+ }
2701
+ }
2702
+ return __base::begin() + __pos;
2703
+ }
2704
+
2705
+ template <class _Tp, class _Allocator>
2706
+ typename deque<_Tp, _Allocator>::iterator
2707
+ deque<_Tp, _Allocator>::erase(const_iterator __f, const_iterator __l)
2708
+ {
2709
+ difference_type __n = __l - __f;
2710
+ iterator __b = __base::begin();
2711
+ difference_type __pos = __f - __b;
2712
+ iterator __p = __b + __pos;
2713
+ if (__n > 0)
2714
+ {
2715
+ allocator_type& __a = __base::__alloc();
2716
+ if (__pos < (__base::size() - __n) / 2)
2717
+ { // erase from front
2718
+ iterator __i = _VSTD::move_backward(__b, __p, __p + __n);
2719
+ for (; __b != __i; ++__b)
2720
+ __alloc_traits::destroy(__a, _VSTD::addressof(*__b));
2721
+ __base::size() -= __n;
2722
+ __base::__start_ += __n;
2723
+ while (__front_spare() >= 2 * __base::__block_size)
2724
+ {
2725
+ __alloc_traits::deallocate(__a, __base::__map_.front(), __base::__block_size);
2726
+ __base::__map_.pop_front();
2727
+ __base::__start_ -= __base::__block_size;
2728
+ }
2729
+ }
2730
+ else
2731
+ { // erase from back
2732
+ iterator __i = _VSTD::move(__p + __n, __base::end(), __p);
2733
+ for (iterator __e = __base::end(); __i != __e; ++__i)
2734
+ __alloc_traits::destroy(__a, _VSTD::addressof(*__i));
2735
+ __base::size() -= __n;
2736
+ while (__back_spare() >= 2 * __base::__block_size)
2737
+ {
2738
+ __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size);
2739
+ __base::__map_.pop_back();
2740
+ }
2741
+ }
2742
+ }
2743
+ return __base::begin() + __pos;
2744
+ }
2745
+
2746
+ template <class _Tp, class _Allocator>
2747
+ void
2748
+ deque<_Tp, _Allocator>::__erase_to_end(const_iterator __f)
2749
+ {
2750
+ iterator __e = __base::end();
2751
+ difference_type __n = __e - __f;
2752
+ if (__n > 0)
2753
+ {
2754
+ allocator_type& __a = __base::__alloc();
2755
+ iterator __b = __base::begin();
2756
+ difference_type __pos = __f - __b;
2757
+ for (iterator __p = __b + __pos; __p != __e; ++__p)
2758
+ __alloc_traits::destroy(__a, _VSTD::addressof(*__p));
2759
+ __base::size() -= __n;
2760
+ while (__back_spare() >= 2 * __base::__block_size)
2761
+ {
2762
+ __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size);
2763
+ __base::__map_.pop_back();
2764
+ }
2765
+ }
2766
+ }
2767
+
2768
+ template <class _Tp, class _Allocator>
2769
+ inline _LIBCPP_INLINE_VISIBILITY
2770
+ void
2771
+ deque<_Tp, _Allocator>::swap(deque& __c)
2772
+ _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
2773
+ __is_nothrow_swappable<allocator_type>::value)
2774
+ {
2775
+ __base::swap(__c);
2776
+ }
2777
+
2778
+ template <class _Tp, class _Allocator>
2779
+ inline _LIBCPP_INLINE_VISIBILITY
2780
+ void
2781
+ deque<_Tp, _Allocator>::clear() _NOEXCEPT
2782
+ {
2783
+ __base::clear();
2784
+ }
2785
+
2786
+ template <class _Tp, class _Allocator>
2787
+ _LIBCPP_INLINE_VISIBILITY inline
2788
+ bool
2789
+ operator==(const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y)
2790
+ {
2791
+ const typename deque<_Tp, _Allocator>::size_type __sz = __x.size();
2792
+ return __sz == __y.size() && _VSTD::equal(__x.begin(), __x.end(), __y.begin());
2793
+ }
2794
+
2795
+ template <class _Tp, class _Allocator>
2796
+ _LIBCPP_INLINE_VISIBILITY inline
2797
+ bool
2798
+ operator!=(const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y)
2799
+ {
2800
+ return !(__x == __y);
2801
+ }
2802
+
2803
+ template <class _Tp, class _Allocator>
2804
+ _LIBCPP_INLINE_VISIBILITY inline
2805
+ bool
2806
+ operator< (const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y)
2807
+ {
2808
+ return _VSTD::lexicographical_compare(__x.begin(), __x.end(), __y.begin(), __y.end());
2809
+ }
2810
+
2811
+ template <class _Tp, class _Allocator>
2812
+ _LIBCPP_INLINE_VISIBILITY inline
2813
+ bool
2814
+ operator> (const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y)
2815
+ {
2816
+ return __y < __x;
2817
+ }
2818
+
2819
+ template <class _Tp, class _Allocator>
2820
+ _LIBCPP_INLINE_VISIBILITY inline
2821
+ bool
2822
+ operator>=(const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y)
2823
+ {
2824
+ return !(__x < __y);
2825
+ }
2826
+
2827
+ template <class _Tp, class _Allocator>
2828
+ _LIBCPP_INLINE_VISIBILITY inline
2829
+ bool
2830
+ operator<=(const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y)
2831
+ {
2832
+ return !(__y < __x);
2833
+ }
2834
+
2835
+ template <class _Tp, class _Allocator>
2836
+ _LIBCPP_INLINE_VISIBILITY inline
2837
+ void
2838
+ swap(deque<_Tp, _Allocator>& __x, deque<_Tp, _Allocator>& __y)
2839
+ _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
2840
+ {
2841
+ __x.swap(__y);
2842
+ }
2843
+
2844
+ _LIBCPP_END_NAMESPACE_STD
2845
+
2846
+ #endif // _LIBCPP_DEQUE