joybox 0.0.5 → 0.0.6

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 (393) hide show
  1. checksums.yaml +8 -8
  2. data/Gemfile.lock +1 -1
  3. data/LICENSE +1 -1
  4. data/LICENSE_Box2D +20 -0
  5. data/LICENSE_Cocos2D +24 -0
  6. data/README.md +34 -66
  7. data/Rakefile +2 -3
  8. data/bin/joybox +49 -0
  9. data/command/joybox/USAGE +24 -0
  10. data/command/joybox/templates/layer.erb +11 -0
  11. data/command/joybox/templates/layer_spec.erb +3 -0
  12. data/command/joybox/templates/scene.erb +11 -0
  13. data/command/joybox/templates/scene_spec.erb +3 -0
  14. data/command/joybox/templates/sprite.erb +11 -0
  15. data/command/joybox/templates/sprite_spec.erb +3 -0
  16. data/command/joybox_generate_command.rb +114 -0
  17. data/joybox.gemspec +44 -0
  18. data/lib/joybox/joybox-ios.rb +47 -0
  19. data/lib/joybox/joybox-osx.rb +47 -0
  20. data/lib/joybox/version.rb +1 -1
  21. data/lib/joybox.rb +18 -36
  22. data/{lib/joybox/cocos2d → motion/joybox}/actions/actions.rb +0 -0
  23. data/motion/joybox/actions/animate.rb +22 -0
  24. data/motion/joybox/actions/bezier.rb +33 -0
  25. data/motion/joybox/actions/blink.rb +24 -0
  26. data/motion/joybox/actions/ease.rb +149 -0
  27. data/motion/joybox/actions/fade.rb +38 -0
  28. data/motion/joybox/actions/jump.rb +39 -0
  29. data/{lib/joybox/cocos2d → motion/joybox}/actions/move.rb +4 -2
  30. data/motion/joybox/actions/place.rb +22 -0
  31. data/{lib/joybox/cocos2d → motion/joybox}/actions/repeat.rb +10 -1
  32. data/{lib/joybox/cocos2d → motion/joybox}/actions/rotate.rb +4 -2
  33. data/{lib/joybox/cocos2d → motion/joybox}/actions/scale.rb +4 -2
  34. data/{lib/joybox/cocos2d → motion/joybox}/actions/sequence.rb +3 -3
  35. data/{lib/joybox/cocos2d → motion/joybox}/actions/skew.rb +0 -0
  36. data/motion/joybox/actions/spawn.rb +22 -0
  37. data/motion/joybox/actions/tint.rb +37 -0
  38. data/motion/joybox/animations/animation.rb +60 -0
  39. data/{lib/joybox/cocos2d → motion/joybox}/common/color.rb +12 -1
  40. data/{lib/joybox/cocos2d → motion/joybox}/common/gc_size.rb +4 -4
  41. data/{lib/joybox/cocos2d → motion/joybox}/common/ns_set.rb +0 -0
  42. data/{lib/joybox/cocos2d → motion/joybox}/common/numeric.rb +0 -0
  43. data/{lib/joybox/cocos2d → motion/joybox}/common/screen.rb +4 -4
  44. data/motion/joybox/core/layer.rb +51 -0
  45. data/{lib/joybox/cocos2d → motion/joybox}/core/node.rb +0 -0
  46. data/{lib/joybox/cocos2d → motion/joybox}/core/scene.rb +0 -0
  47. data/{lib/joybox/cocos2d → motion/joybox}/core/sprite.rb +22 -3
  48. data/{lib/joybox/cocos2d → motion/joybox}/core/sprite_batch.rb +0 -0
  49. data/motion/joybox/core/sprite_frame_cache.rb +147 -0
  50. data/{lib/joybox/cocos2d/cocos2d.rb → motion/joybox/joybox.rb} +3 -1
  51. data/{lib/joybox/cocos2d → motion/joybox}/macros.rb +0 -0
  52. data/{lib/joybox/box2d → motion/joybox/physics}/body.rb +44 -17
  53. data/{lib/joybox/cocos2d/core → motion/joybox/physics}/physics_sprite.rb +1 -1
  54. data/motion/joybox/physics/world.rb +79 -0
  55. data/{lib/joybox/cocos2d → motion/joybox}/ui/label.rb +3 -2
  56. data/{lib/joybox/cocos2d → motion/joybox}/ui/menu.rb +0 -0
  57. data/{lib/joybox/cocos2d → motion/joybox}/ui/menu_image.rb +0 -0
  58. data/{lib/joybox/cocos2d → motion/joybox}/ui/menu_label.rb +0 -0
  59. data/{lib/joybox/cocos2d → motion/joybox}/ui/ui.rb +0 -0
  60. data/{lib/joybox/cocos2d → motion/joybox-ios}/common/cg_point.rb +9 -2
  61. data/{lib/joybox/cocos2d → motion/joybox-ios}/common/ui_touch.rb +1 -1
  62. data/{lib/joybox/cocos2d → motion/joybox-ios}/configuration/configuration.rb +0 -0
  63. data/{lib/joybox/cocos2d → motion/joybox-ios}/configuration/file_utils.rb +0 -3
  64. data/{lib/joybox/cocos2d → motion/joybox-ios}/configuration/gl_view.rb +0 -0
  65. data/{lib/joybox/cocos2d → motion/joybox-ios}/configuration/texture_2d.rb +0 -0
  66. data/{lib/joybox/cocos2d → motion/joybox-ios}/core/layer.rb +1 -45
  67. data/{lib/joybox/cocos2d → motion/joybox-ios}/director.rb +6 -6
  68. data/motion/joybox-osx/common/ats_point.rb +48 -0
  69. data/motion/joybox-osx/common/ns_event.rb +8 -0
  70. data/motion/joybox-osx/configuration/configuration.rb +46 -0
  71. data/motion/joybox-osx/configuration/gl_view.rb +57 -0
  72. data/motion/joybox-osx/core/layer.rb +135 -0
  73. data/motion/joybox-osx/director.rb +42 -0
  74. data/template/joybox-ios/files/Rakefile.erb +9 -0
  75. data/{app → template/joybox-ios/files/app}/app_delegate.rb +1 -5
  76. data/{resources → template/joybox-ios/files/resources}/fps_images-hd.png +0 -0
  77. data/{resources → template/joybox-ios/files/resources}/fps_images-ipadhd.png +0 -0
  78. data/{resources → template/joybox-ios/files/resources}/fps_images.png +0 -0
  79. data/template/joybox-ios/files/spec/main_spec.rb.erb +9 -0
  80. data/template/joybox-osx/files/Rakefile.erb +9 -0
  81. data/template/joybox-osx/files/app/app_delegate.rb +23 -0
  82. data/template/joybox-osx/files/app/layers/default_layer.rb +5 -0
  83. data/template/joybox-osx/files/app/menu.rb +51 -0
  84. data/template/joybox-osx/files/resources/Credits.rtf +29 -0
  85. data/template/joybox-osx/files/resources/fps_images-hd.png +0 -0
  86. data/template/joybox-osx/files/resources/fps_images-ipadhd.png +0 -0
  87. data/template/joybox-osx/files/resources/fps_images.png +0 -0
  88. data/template/joybox-osx/files/spec/main_spec.rb.erb +9 -0
  89. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Box2D +0 -0
  90. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Box2D.framework.bridgesupport +47 -37
  91. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Versions/A/Box2D +0 -0
  92. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Versions/A/Headers/Collision/B2DContactListener.h +0 -0
  93. data/vendor/vendor-ios/Box2D.framework/Versions/A/Headers/Collision/Shapes/B2DCircleShape.h +16 -0
  94. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Versions/A/Headers/Collision/Shapes/B2DEdgeShape.h +0 -0
  95. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Versions/A/Headers/Collision/Shapes/B2DPolygonShape.h +0 -0
  96. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Versions/A/Headers/Collision/Shapes/B2DShape.h +0 -0
  97. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Versions/A/Headers/Dynamics/B2DBody.h +6 -6
  98. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Versions/A/Headers/Dynamics/B2DWorld.h +0 -0
  99. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Versions/A/Resources/Box2DConfig.cmake +0 -0
  100. data/vendor/{Box2D.framework → vendor-ios/Box2D.framework}/Versions/A/Resources/CMakeLists.txt +0 -0
  101. data/vendor/vendor-ios/Box2D.framework/Versions/A/Resources/LICENSE +22 -0
  102. data/vendor/vendor-ios/cocos_2d/cocos_2d.bridgesupport +9154 -0
  103. data/vendor/vendor-ios/cocos_2d/cocos_2d_exceptions.bridgesupport +39 -0
  104. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCAction.h +23 -23
  105. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionCamera.h +21 -19
  106. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionCatmullRom.h +18 -6
  107. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionEase.h +117 -31
  108. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionGrid.h +19 -17
  109. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionGrid3D.h +45 -42
  110. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionInstant.h +21 -13
  111. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionInterval.h +123 -81
  112. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionManager.h +2 -2
  113. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionPageTurn3D.h +2 -1
  114. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionProgressTimer.h +4 -4
  115. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionTiledGrid.h +46 -38
  116. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCActionTween.h +3 -3
  117. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCAnimation.h +8 -8
  118. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCAnimationCache.h +2 -2
  119. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCAtlasNode.h +19 -17
  120. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCCamera.h +12 -12
  121. data/vendor/vendor-ios/cocos_2d/include/CCClippingNode.h +77 -0
  122. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCConfiguration.h +31 -13
  123. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCDirector.h +51 -42
  124. data/vendor/vendor-ios/cocos_2d/include/CCDrawNode.h +65 -0
  125. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCDrawingPrimitives.h +42 -8
  126. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCGLProgram.h +56 -21
  127. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCGrabber.h +2 -2
  128. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCGrid.h +29 -29
  129. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCLabelAtlas.h +5 -2
  130. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCLabelBMFont.h +56 -32
  131. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCLabelTTF.h +20 -20
  132. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCLayer.h +107 -79
  133. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCMenu.h +10 -14
  134. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCMenuItem.h +37 -32
  135. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCMotionStreak.h +18 -19
  136. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCNode+Debug.h +0 -0
  137. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCNode.h +87 -37
  138. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCParallaxNode.h +2 -2
  139. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCParticleBatchNode.h +2 -2
  140. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCParticleExamples.h +22 -0
  141. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCParticleSystem.h +51 -40
  142. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCParticleSystemQuad.h +4 -4
  143. data/vendor/vendor-ios/cocos_2d/include/CCPhysicsDebugNode.h +58 -0
  144. data/vendor/vendor-ios/cocos_2d/include/CCPhysicsSprite.h +82 -0
  145. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCProgressTimer.h +9 -11
  146. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCProtocols.h +54 -26
  147. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCRenderTexture.h +29 -9
  148. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCScene.h +4 -0
  149. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCScheduler.h +94 -40
  150. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCShaderCache.h +1 -1
  151. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCSprite.h +21 -28
  152. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCSpriteBatchNode.h +16 -9
  153. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCSpriteFrame.h +10 -10
  154. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCSpriteFrameCache.h +6 -6
  155. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTMXLayer.h +16 -16
  156. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTMXObjectGroup.h +4 -4
  157. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTMXTiledMap.h +9 -9
  158. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTMXXMLParser.h +44 -33
  159. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTexture2D.h +17 -25
  160. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTextureAtlas.h +10 -10
  161. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTextureCache.h +4 -4
  162. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTexturePVR.h +25 -8
  163. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTileMapAtlas.h +6 -6
  164. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTransition.h +57 -12
  165. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTransitionPageTurn.h +2 -2
  166. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/CCTransitionProgress.h +27 -5
  167. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Platforms}/CCGL.h +4 -2
  168. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Platforms}/CCNS.h +0 -0
  169. data/vendor/vendor-ios/cocos_2d/include/Platforms/Mac/CCDirectorMac.h +110 -0
  170. data/vendor/vendor-ios/cocos_2d/include/Platforms/Mac/CCEventDispatcher.h +343 -0
  171. data/vendor/vendor-ios/cocos_2d/include/Platforms/Mac/CCGLView.h +103 -0
  172. data/vendor/vendor-ios/cocos_2d/include/Platforms/Mac/CCWindow.h +41 -0
  173. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Platforms/iOS}/CCDirectorIOS.h +12 -5
  174. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Platforms/iOS}/CCES2Renderer.h +12 -12
  175. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Platforms/iOS}/CCESRenderer.h +0 -0
  176. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Platforms/iOS}/CCGLView.h +28 -13
  177. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Platforms/iOS}/CCTouchDelegateProtocol.h +4 -4
  178. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Platforms/iOS}/CCTouchDispatcher.h +2 -2
  179. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Platforms/iOS}/CCTouchHandler.h +7 -7
  180. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/CCArray.h +1 -1
  181. data/vendor/vendor-ios/cocos_2d/include/Support/CCFileUtils.h +394 -0
  182. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/CCProfiling.h +0 -0
  183. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/CCVertex.h +1 -1
  184. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/CGPointExtension.h +4 -2
  185. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/NSThread+performBlock.h +0 -0
  186. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/OpenGL_Internal.h +0 -0
  187. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/TGAlib.h +0 -0
  188. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/TransformUtils.h +0 -0
  189. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/ZipUtils.h +4 -4
  190. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/base64.h +0 -0
  191. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/ccCArray.h +15 -15
  192. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/ccUtils.h +0 -0
  193. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/uthash.h +129 -184
  194. data/vendor/{Cocos2D/include → vendor-ios/cocos_2d/include/Support}/utlist.h +298 -55
  195. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/ccConfig.h +56 -9
  196. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/ccDeprecated.h +131 -0
  197. data/vendor/vendor-ios/cocos_2d/include/ccFPSImages.h +39 -0
  198. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/ccGLStateCache.h +44 -26
  199. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/ccMacros.h +9 -9
  200. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionColorLengthTexture_frag.h +41 -0
  201. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionColorLengthTexture_vert.h +47 -0
  202. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionColor_frag.h +37 -0
  203. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionColor_vert.h +40 -0
  204. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionTextureA8Color_frag.h +41 -0
  205. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionTextureA8Color_vert.h +45 -0
  206. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionTextureColorAlphaTest_frag.h +47 -0
  207. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionTextureColor_frag.h +39 -0
  208. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionTextureColor_vert.h +45 -0
  209. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionTexture_frag.h +38 -0
  210. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionTexture_uColor_frag.h +41 -0
  211. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionTexture_uColor_vert.h +41 -0
  212. data/vendor/vendor-ios/cocos_2d/include/ccShader_PositionTexture_vert.h +41 -0
  213. data/vendor/vendor-ios/cocos_2d/include/ccShader_Position_uColor_frag.h +37 -0
  214. data/vendor/vendor-ios/cocos_2d/include/ccShader_Position_uColor_vert.h +43 -0
  215. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/ccShaders.h +11 -0
  216. data/vendor/vendor-ios/cocos_2d/include/ccTypes.h +392 -0
  217. data/vendor/vendor-ios/cocos_2d/include/cocos2d-ios-exceptions.bridgesupport +39 -0
  218. data/vendor/{Cocos2D → vendor-ios/cocos_2d}/include/cocos2d.h +28 -3
  219. data/vendor/vendor-ios/cocos_2d/include/gen_cocos2d_bridgesupport.sh +17 -0
  220. data/vendor/vendor-ios/cocos_2d/include/gen_cocos2d_complement.sh +17 -0
  221. data/vendor/vendor-ios/cocos_2d/libcocos2d.a +0 -0
  222. data/vendor/vendor-osx/box_2d/box_2d.bridgesupport +176 -0
  223. data/vendor/vendor-osx/box_2d/include/B2DBody.h +46 -0
  224. data/vendor/vendor-osx/box_2d/include/B2DCircleShape.h +16 -0
  225. data/vendor/vendor-osx/box_2d/include/B2DContactListener.h +30 -0
  226. data/vendor/vendor-osx/box_2d/include/B2DEdgeShape.h +17 -0
  227. data/vendor/vendor-osx/box_2d/include/B2DPolygonShape.h +16 -0
  228. data/vendor/vendor-osx/box_2d/include/B2DShape.h +18 -0
  229. data/vendor/vendor-osx/box_2d/include/B2DWorld.h +44 -0
  230. data/vendor/vendor-osx/box_2d/libBox2D.a +0 -0
  231. data/vendor/vendor-osx/cocos_2d/cocos_2d.bridgesupport +8292 -0
  232. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCAction.h +195 -0
  233. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionCamera.h +75 -0
  234. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionCatmullRom.h +151 -0
  235. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionEase.h +245 -0
  236. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionGrid.h +167 -0
  237. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionGrid3D.h +208 -0
  238. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionInstant.h +235 -0
  239. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionInterval.h +473 -0
  240. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionManager.h +113 -0
  241. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionPageTurn3D.h +43 -0
  242. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionProgressTimer.h +59 -0
  243. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionTiledGrid.h +219 -0
  244. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCActionTween.h +62 -0
  245. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCAnimation.h +150 -0
  246. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCAnimationCache.h +74 -0
  247. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCAtlasNode.h +98 -0
  248. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCCamera.h +98 -0
  249. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCClippingNode.h +77 -0
  250. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCConfiguration.h +144 -0
  251. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCDirector.h +353 -0
  252. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCDrawNode.h +65 -0
  253. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCDrawingPrimitives.h +173 -0
  254. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCGLProgram.h +185 -0
  255. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCGrabber.h +44 -0
  256. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCGrid.h +130 -0
  257. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCLabelAtlas.h +71 -0
  258. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCLabelBMFont.h +240 -0
  259. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCLabelTTF.h +132 -0
  260. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCLayer.h +308 -0
  261. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCMenu.h +96 -0
  262. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCMenuItem.h +428 -0
  263. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCMotionStreak.h +86 -0
  264. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCNode+Debug.h +39 -0
  265. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCNode.h +619 -0
  266. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCParallaxNode.h +50 -0
  267. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCParticleBatchNode.h +99 -0
  268. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCParticleExamples.h +117 -0
  269. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCParticleSystem.h +464 -0
  270. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCParticleSystemQuad.h +73 -0
  271. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCPhysicsDebugNode.h +58 -0
  272. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCPhysicsSprite.h +82 -0
  273. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCProgressTimer.h +92 -0
  274. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCProtocols.h +160 -0
  275. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCRenderTexture.h +159 -0
  276. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCScene.h +47 -0
  277. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCScheduler.h +284 -0
  278. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCShaderCache.h +60 -0
  279. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCSprite.h +281 -0
  280. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCSpriteBatchNode.h +145 -0
  281. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCSpriteFrame.h +126 -0
  282. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCSpriteFrameCache.h +121 -0
  283. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTMXLayer.h +164 -0
  284. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTMXObjectGroup.h +67 -0
  285. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTMXTiledMap.h +145 -0
  286. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTMXXMLParser.h +228 -0
  287. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTexture2D.h +349 -0
  288. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTextureAtlas.h +188 -0
  289. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTextureCache.h +146 -0
  290. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTexturePVR.h +146 -0
  291. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTileMapAtlas.h +83 -0
  292. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTransition.h +341 -0
  293. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTransitionPageTurn.h +60 -0
  294. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/CCTransitionProgress.h +84 -0
  295. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Platforms/CCGL.h +74 -0
  296. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Platforms/CCNS.h +54 -0
  297. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Platforms/Mac/CCDirectorMac.h +110 -0
  298. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Platforms/Mac/CCEventDispatcher.h +343 -0
  299. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Platforms/Mac/CCGLView.h +103 -0
  300. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Platforms/Mac/CCWindow.h +41 -0
  301. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/CCArray.h +119 -0
  302. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/CCFileUtils.h +394 -0
  303. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/CCProfiling.h +89 -0
  304. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/CCVertex.h +36 -0
  305. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/CGPointExtension.h +346 -0
  306. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/NSThread+performBlock.h +22 -0
  307. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/OpenGL_Internal.h +86 -0
  308. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/TGAlib.h +55 -0
  309. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/TransformUtils.h +36 -0
  310. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/ZipUtils.h +91 -0
  311. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/base64.h +33 -0
  312. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/ccCArray.h +229 -0
  313. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/ccUtils.h +36 -0
  314. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/uthash.h +917 -0
  315. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/Support/utlist.h +733 -0
  316. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccConfig.h +292 -0
  317. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccDeprecated.h +431 -0
  318. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccFPSImages.h +39 -0
  319. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccGLStateCache.h +156 -0
  320. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccMacros.h +353 -0
  321. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionColorLengthTexture_frag.h +41 -0
  322. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionColorLengthTexture_vert.h +47 -0
  323. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionColor_frag.h +37 -0
  324. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionColor_vert.h +40 -0
  325. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionTextureA8Color_frag.h +41 -0
  326. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionTextureA8Color_vert.h +45 -0
  327. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionTextureColorAlphaTest_frag.h +47 -0
  328. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionTextureColor_frag.h +39 -0
  329. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionTextureColor_vert.h +45 -0
  330. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionTexture_frag.h +38 -0
  331. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionTexture_uColor_frag.h +41 -0
  332. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionTexture_uColor_vert.h +41 -0
  333. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_PositionTexture_vert.h +41 -0
  334. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_Position_uColor_frag.h +37 -0
  335. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShader_Position_uColor_vert.h +43 -0
  336. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/ccShaders.h +56 -0
  337. data/vendor/{Cocos2D/include → vendor-osx/cocos_2d/cocos_2d_include}/ccTypes.h +39 -35
  338. data/vendor/vendor-osx/cocos_2d/cocos_2d_include/cocos2d.h +203 -0
  339. data/vendor/vendor-osx/cocos_2d/libcocos2d.a +0 -0
  340. metadata +363 -195
  341. data/app/layers/box2d_layer.rb +0 -109
  342. data/app/layers/cocos2d_layer.rb +0 -14
  343. data/app/layers/cocos_motion_layer.rb +0 -145
  344. data/app/layers/menu_layer.rb +0 -59
  345. data/lib/joybox/box2d/world.rb +0 -79
  346. data/resources/box2d/blocks_sprite_sheet.png +0 -0
  347. data/resources/cocos_motion/dot.png +0 -0
  348. data/resources/cocos_motion/dot_selected.png +0 -0
  349. data/resources/cocos_motion/grossini.png +0 -0
  350. data/resources/cocos_motion/grossinis_sister.png +0 -0
  351. data/resources/cocos_motion/grossinis_sister_two.png +0 -0
  352. data/resources/cocos_motion/left_arrow.png +0 -0
  353. data/resources/cocos_motion/left_arrow_selected.png +0 -0
  354. data/resources/cocos_motion/right_arrow.png +0 -0
  355. data/resources/cocos_motion/right_arrow_selected.png +0 -0
  356. data/vendor/Cocos2D/Cocos2D.bridgesupport +0 -7808
  357. data/vendor/Cocos2D/include/CCFileUtils.h +0 -188
  358. data/vendor/Cocos2D/include/CocosDenshion/CDAudioManager.h +0 -243
  359. data/vendor/Cocos2D/include/CocosDenshion/CDConfig.h +0 -60
  360. data/vendor/Cocos2D/include/CocosDenshion/CDOpenALSupport.h +0 -77
  361. data/vendor/Cocos2D/include/CocosDenshion/CDXPropertyModifierAction.h +0 -45
  362. data/vendor/Cocos2D/include/CocosDenshion/CocosDenshion.h +0 -440
  363. data/vendor/Cocos2D/include/CocosDenshion/SimpleAudioEngine.h +0 -90
  364. data/vendor/Cocos2D/include/RubyMotionSchedule.h +0 -7
  365. data/vendor/Cocos2D/include/ccShader_PositionColor_frag.h +0 -12
  366. data/vendor/Cocos2D/include/ccShader_PositionColor_vert.h +0 -17
  367. data/vendor/Cocos2D/include/ccShader_PositionTextureA8Color_frag.h +0 -16
  368. data/vendor/Cocos2D/include/ccShader_PositionTextureA8Color_vert.h +0 -21
  369. data/vendor/Cocos2D/include/ccShader_PositionTextureColorAlphaTest_frag.h +0 -23
  370. data/vendor/Cocos2D/include/ccShader_PositionTextureColor_frag.h +0 -14
  371. data/vendor/Cocos2D/include/ccShader_PositionTextureColor_vert.h +0 -22
  372. data/vendor/Cocos2D/include/ccShader_PositionTexture_frag.h +0 -13
  373. data/vendor/Cocos2D/include/ccShader_PositionTexture_uColor_frag.h +0 -16
  374. data/vendor/Cocos2D/include/ccShader_PositionTexture_uColor_vert.h +0 -18
  375. data/vendor/Cocos2D/include/ccShader_PositionTexture_vert.h +0 -17
  376. data/vendor/Cocos2D/include/ccShader_Position_uColor_frag.h +0 -12
  377. data/vendor/Cocos2D/include/ccShader_Position_uColor_vert.h +0 -19
  378. data/vendor/Cocos2D/include/kazmath/GL/mat4stack.h +0 -51
  379. data/vendor/Cocos2D/include/kazmath/GL/matrix.h +0 -58
  380. data/vendor/Cocos2D/include/kazmath/aabb.h +0 -53
  381. data/vendor/Cocos2D/include/kazmath/kazmath.h +0 -39
  382. data/vendor/Cocos2D/include/kazmath/mat3.h +0 -75
  383. data/vendor/Cocos2D/include/kazmath/mat4.h +0 -93
  384. data/vendor/Cocos2D/include/kazmath/neon_matrix_impl.h +0 -41
  385. data/vendor/Cocos2D/include/kazmath/plane.h +0 -70
  386. data/vendor/Cocos2D/include/kazmath/quaternion.h +0 -113
  387. data/vendor/Cocos2D/include/kazmath/ray2.h +0 -50
  388. data/vendor/Cocos2D/include/kazmath/utility.h +0 -74
  389. data/vendor/Cocos2D/include/kazmath/vec2.h +0 -64
  390. data/vendor/Cocos2D/include/kazmath/vec3.h +0 -68
  391. data/vendor/Cocos2D/include/kazmath/vec4.h +0 -68
  392. data/vendor/Cocos2D/libCocosDenshion.a +0 -0
  393. data/vendor/Cocos2D/libcocos2d.a +0 -0
@@ -0,0 +1,733 @@
1
+ /*
2
+ Copyright (c) 2007-2013, Troy D. Hanson http://uthash.sourceforge.net
3
+ All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ * Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+
11
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
12
+ IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
13
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
14
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
15
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
16
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
17
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
18
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
19
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
20
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
21
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22
+ */
23
+
24
+ #ifndef UTLIST_H
25
+ #define UTLIST_H
26
+
27
+ #define UTLIST_VERSION 1.9.7
28
+
29
+ #include <assert.h>
30
+
31
+ /*
32
+ * This file contains macros to manipulate singly and doubly-linked lists.
33
+ *
34
+ * 1. LL_ macros: singly-linked lists.
35
+ * 2. DL_ macros: doubly-linked lists.
36
+ * 3. CDL_ macros: circular doubly-linked lists.
37
+ *
38
+ * To use singly-linked lists, your structure must have a "next" pointer.
39
+ * To use doubly-linked lists, your structure must "prev" and "next" pointers.
40
+ * Either way, the pointer to the head of the list must be initialized to NULL.
41
+ *
42
+ * ----------------.EXAMPLE -------------------------
43
+ * struct item {
44
+ * int id;
45
+ * struct item *prev, *next;
46
+ * }
47
+ *
48
+ * struct item *list = NULL:
49
+ *
50
+ * int main() {
51
+ * struct item *item;
52
+ * ... allocate and populate item ...
53
+ * DL_APPEND(list, item);
54
+ * }
55
+ * --------------------------------------------------
56
+ *
57
+ * For doubly-linked lists, the append and delete macros are O(1)
58
+ * For singly-linked lists, append and delete are O(n) but prepend is O(1)
59
+ * The sort macro is O(n log(n)) for all types of single/double/circular lists.
60
+ */
61
+
62
+ /* These macros use decltype or the earlier __typeof GNU extension.
63
+ As decltype is only available in newer compilers (VS2010 or gcc 4.3+
64
+ when compiling c++ code), this code uses whatever method is needed
65
+ or, for VS2008 where neither is available, uses casting workarounds. */
66
+ #ifdef _MSC_VER /* MS compiler */
67
+ #if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
68
+ #define LDECLTYPE(x) decltype(x)
69
+ #else /* VS2008 or older (or VS2010 in C mode) */
70
+ #define NO_DECLTYPE
71
+ #define LDECLTYPE(x) char*
72
+ #endif
73
+ #else /* GNU, Sun and other compilers */
74
+ #define LDECLTYPE(x) __typeof(x)
75
+ #endif
76
+
77
+ /* for VS2008 we use some workarounds to get around the lack of decltype,
78
+ * namely, we always reassign our tmp variable to the list head if we need
79
+ * to dereference its prev/next pointers, and save/restore the real head.*/
80
+ #ifdef NO_DECLTYPE
81
+ #define _SV(elt,list) _tmp = (char*)(list); {char **_alias = (char**)&(list); *_alias = (elt); }
82
+ #define _NEXT(elt,list,next) ((char*)((list)->next))
83
+ #define _NEXTASGN(elt,list,to,next) { char **_alias = (char**)&((list)->next); *_alias=(char*)(to); }
84
+ /* #define _PREV(elt,list,prev) ((char*)((list)->prev)) */
85
+ #define _PREVASGN(elt,list,to,prev) { char **_alias = (char**)&((list)->prev); *_alias=(char*)(to); }
86
+ #define _RS(list) { char **_alias = (char**)&(list); *_alias=_tmp; }
87
+ #define _CASTASGN(a,b) { char **_alias = (char**)&(a); *_alias=(char*)(b); }
88
+ #else
89
+ #define _SV(elt,list)
90
+ #define _NEXT(elt,list,next) ((elt)->next)
91
+ #define _NEXTASGN(elt,list,to,next) ((elt)->next)=(to)
92
+ /* #define _PREV(elt,list,prev) ((elt)->prev) */
93
+ #define _PREVASGN(elt,list,to,prev) ((elt)->prev)=(to)
94
+ #define _RS(list)
95
+ #define _CASTASGN(a,b) (a)=(b)
96
+ #endif
97
+
98
+ /******************************************************************************
99
+ * The sort macro is an adaptation of Simon Tatham's O(n log(n)) mergesort *
100
+ * Unwieldy variable names used here to avoid shadowing passed-in variables. *
101
+ *****************************************************************************/
102
+ #define LL_SORT(list, cmp) \
103
+ LL_SORT2(list, cmp, next)
104
+
105
+ #define LL_SORT2(list, cmp, next) \
106
+ do { \
107
+ LDECLTYPE(list) _ls_p; \
108
+ LDECLTYPE(list) _ls_q; \
109
+ LDECLTYPE(list) _ls_e; \
110
+ LDECLTYPE(list) _ls_tail; \
111
+ LDECLTYPE(list) _ls_oldhead; \
112
+ LDECLTYPE(list) _tmp; \
113
+ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
114
+ if (list) { \
115
+ _ls_insize = 1; \
116
+ _ls_looping = 1; \
117
+ while (_ls_looping) { \
118
+ _CASTASGN(_ls_p,list); \
119
+ _CASTASGN(_ls_oldhead,list); \
120
+ list = NULL; \
121
+ _ls_tail = NULL; \
122
+ _ls_nmerges = 0; \
123
+ while (_ls_p) { \
124
+ _ls_nmerges++; \
125
+ _ls_q = _ls_p; \
126
+ _ls_psize = 0; \
127
+ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
128
+ _ls_psize++; \
129
+ _SV(_ls_q,list); _ls_q = _NEXT(_ls_q,list,next); _RS(list); \
130
+ if (!_ls_q) break; \
131
+ } \
132
+ _ls_qsize = _ls_insize; \
133
+ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
134
+ if (_ls_psize == 0) { \
135
+ _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \
136
+ _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \
137
+ } else if (_ls_qsize == 0 || !_ls_q) { \
138
+ _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \
139
+ _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \
140
+ } else if (cmp(_ls_p,_ls_q) <= 0) { \
141
+ _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \
142
+ _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \
143
+ } else { \
144
+ _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \
145
+ _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \
146
+ } \
147
+ if (_ls_tail) { \
148
+ _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_ls_e,next); _RS(list); \
149
+ } else { \
150
+ _CASTASGN(list,_ls_e); \
151
+ } \
152
+ _ls_tail = _ls_e; \
153
+ } \
154
+ _ls_p = _ls_q; \
155
+ } \
156
+ _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,NULL,next); _RS(list); \
157
+ if (_ls_nmerges <= 1) { \
158
+ _ls_looping=0; \
159
+ } \
160
+ _ls_insize *= 2; \
161
+ } \
162
+ } else _tmp=NULL; /* quiet gcc unused variable warning */ \
163
+ } while (0)
164
+
165
+
166
+ #define DL_SORT(list, cmp) \
167
+ DL_SORT2(list, cmp, prev, next)
168
+
169
+ #define DL_SORT2(list, cmp, prev, next) \
170
+ do { \
171
+ LDECLTYPE(list) _ls_p; \
172
+ LDECLTYPE(list) _ls_q; \
173
+ LDECLTYPE(list) _ls_e; \
174
+ LDECLTYPE(list) _ls_tail; \
175
+ LDECLTYPE(list) _ls_oldhead; \
176
+ LDECLTYPE(list) _tmp; \
177
+ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
178
+ if (list) { \
179
+ _ls_insize = 1; \
180
+ _ls_looping = 1; \
181
+ while (_ls_looping) { \
182
+ _CASTASGN(_ls_p,list); \
183
+ _CASTASGN(_ls_oldhead,list); \
184
+ list = NULL; \
185
+ _ls_tail = NULL; \
186
+ _ls_nmerges = 0; \
187
+ while (_ls_p) { \
188
+ _ls_nmerges++; \
189
+ _ls_q = _ls_p; \
190
+ _ls_psize = 0; \
191
+ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
192
+ _ls_psize++; \
193
+ _SV(_ls_q,list); _ls_q = _NEXT(_ls_q,list,next); _RS(list); \
194
+ if (!_ls_q) break; \
195
+ } \
196
+ _ls_qsize = _ls_insize; \
197
+ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
198
+ if (_ls_psize == 0) { \
199
+ _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \
200
+ _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \
201
+ } else if (_ls_qsize == 0 || !_ls_q) { \
202
+ _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \
203
+ _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \
204
+ } else if (cmp(_ls_p,_ls_q) <= 0) { \
205
+ _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \
206
+ _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \
207
+ } else { \
208
+ _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \
209
+ _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \
210
+ } \
211
+ if (_ls_tail) { \
212
+ _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_ls_e,next); _RS(list); \
213
+ } else { \
214
+ _CASTASGN(list,_ls_e); \
215
+ } \
216
+ _SV(_ls_e,list); _PREVASGN(_ls_e,list,_ls_tail,prev); _RS(list); \
217
+ _ls_tail = _ls_e; \
218
+ } \
219
+ _ls_p = _ls_q; \
220
+ } \
221
+ _CASTASGN(list->prev, _ls_tail); \
222
+ _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,NULL,next); _RS(list); \
223
+ if (_ls_nmerges <= 1) { \
224
+ _ls_looping=0; \
225
+ } \
226
+ _ls_insize *= 2; \
227
+ } \
228
+ } else _tmp=NULL; /* quiet gcc unused variable warning */ \
229
+ } while (0)
230
+
231
+ #define CDL_SORT(list, cmp) \
232
+ CDL_SORT2(list, cmp, prev, next)
233
+
234
+ #define CDL_SORT2(list, cmp, prev, next) \
235
+ do { \
236
+ LDECLTYPE(list) _ls_p; \
237
+ LDECLTYPE(list) _ls_q; \
238
+ LDECLTYPE(list) _ls_e; \
239
+ LDECLTYPE(list) _ls_tail; \
240
+ LDECLTYPE(list) _ls_oldhead; \
241
+ LDECLTYPE(list) _tmp; \
242
+ LDECLTYPE(list) _tmp2; \
243
+ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
244
+ if (list) { \
245
+ _ls_insize = 1; \
246
+ _ls_looping = 1; \
247
+ while (_ls_looping) { \
248
+ _CASTASGN(_ls_p,list); \
249
+ _CASTASGN(_ls_oldhead,list); \
250
+ list = NULL; \
251
+ _ls_tail = NULL; \
252
+ _ls_nmerges = 0; \
253
+ while (_ls_p) { \
254
+ _ls_nmerges++; \
255
+ _ls_q = _ls_p; \
256
+ _ls_psize = 0; \
257
+ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
258
+ _ls_psize++; \
259
+ _SV(_ls_q,list); \
260
+ if (_NEXT(_ls_q,list,next) == _ls_oldhead) { \
261
+ _ls_q = NULL; \
262
+ } else { \
263
+ _ls_q = _NEXT(_ls_q,list,next); \
264
+ } \
265
+ _RS(list); \
266
+ if (!_ls_q) break; \
267
+ } \
268
+ _ls_qsize = _ls_insize; \
269
+ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
270
+ if (_ls_psize == 0) { \
271
+ _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \
272
+ _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \
273
+ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
274
+ } else if (_ls_qsize == 0 || !_ls_q) { \
275
+ _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \
276
+ _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \
277
+ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
278
+ } else if (cmp(_ls_p,_ls_q) <= 0) { \
279
+ _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \
280
+ _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \
281
+ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
282
+ } else { \
283
+ _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \
284
+ _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \
285
+ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
286
+ } \
287
+ if (_ls_tail) { \
288
+ _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_ls_e,next); _RS(list); \
289
+ } else { \
290
+ _CASTASGN(list,_ls_e); \
291
+ } \
292
+ _SV(_ls_e,list); _PREVASGN(_ls_e,list,_ls_tail,prev); _RS(list); \
293
+ _ls_tail = _ls_e; \
294
+ } \
295
+ _ls_p = _ls_q; \
296
+ } \
297
+ _CASTASGN(list->prev,_ls_tail); \
298
+ _CASTASGN(_tmp2,list); \
299
+ _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_tmp2,next); _RS(list); \
300
+ if (_ls_nmerges <= 1) { \
301
+ _ls_looping=0; \
302
+ } \
303
+ _ls_insize *= 2; \
304
+ } \
305
+ } else _tmp=NULL; /* quiet gcc unused variable warning */ \
306
+ } while (0)
307
+
308
+ /******************************************************************************
309
+ * singly linked list macros (non-circular) *
310
+ *****************************************************************************/
311
+ #define LL_PREPEND(head,add) \
312
+ LL_PREPEND2(head,add,next)
313
+
314
+ #define LL_PREPEND2(head,add,next) \
315
+ do { \
316
+ (add)->next = head; \
317
+ head = add; \
318
+ } while (0)
319
+
320
+ #define LL_CONCAT(head1,head2) \
321
+ LL_CONCAT2(head1,head2,next)
322
+
323
+ #define LL_CONCAT2(head1,head2,next) \
324
+ do { \
325
+ LDECLTYPE(head1) _tmp; \
326
+ if (head1) { \
327
+ _tmp = head1; \
328
+ while (_tmp->next) { _tmp = _tmp->next; } \
329
+ _tmp->next=(head2); \
330
+ } else { \
331
+ (head1)=(head2); \
332
+ } \
333
+ } while (0)
334
+
335
+ #define LL_APPEND(head,add) \
336
+ LL_APPEND2(head,add,next)
337
+
338
+ #define LL_APPEND2(head,add,next) \
339
+ do { \
340
+ LDECLTYPE(head) _tmp; \
341
+ (add)->next=NULL; \
342
+ if (head) { \
343
+ _tmp = head; \
344
+ while (_tmp->next) { _tmp = _tmp->next; } \
345
+ _tmp->next=(add); \
346
+ } else { \
347
+ (head)=(add); \
348
+ } \
349
+ } while (0)
350
+
351
+ #define LL_DELETE(head,del) \
352
+ LL_DELETE2(head,del,next)
353
+
354
+ #define LL_DELETE2(head,del,next) \
355
+ do { \
356
+ LDECLTYPE(head) _tmp; \
357
+ if ((head) == (del)) { \
358
+ (head)=(head)->next; \
359
+ } else { \
360
+ _tmp = head; \
361
+ while (_tmp->next && (_tmp->next != (del))) { \
362
+ _tmp = _tmp->next; \
363
+ } \
364
+ if (_tmp->next) { \
365
+ _tmp->next = ((del)->next); \
366
+ } \
367
+ } \
368
+ } while (0)
369
+
370
+ /* Here are VS2008 replacements for LL_APPEND and LL_DELETE */
371
+ #define LL_APPEND_VS2008(head,add) \
372
+ LL_APPEND2_VS2008(head,add,next)
373
+
374
+ #define LL_APPEND2_VS2008(head,add,next) \
375
+ do { \
376
+ if (head) { \
377
+ (add)->next = head; /* use add->next as a temp variable */ \
378
+ while ((add)->next->next) { (add)->next = (add)->next->next; } \
379
+ (add)->next->next=(add); \
380
+ } else { \
381
+ (head)=(add); \
382
+ } \
383
+ (add)->next=NULL; \
384
+ } while (0)
385
+
386
+ #define LL_DELETE_VS2008(head,del) \
387
+ LL_DELETE2_VS2008(head,del,next)
388
+
389
+ #define LL_DELETE2_VS2008(head,del,next) \
390
+ do { \
391
+ if ((head) == (del)) { \
392
+ (head)=(head)->next; \
393
+ } else { \
394
+ char *_tmp = (char*)(head); \
395
+ while ((head)->next && ((head)->next != (del))) { \
396
+ head = (head)->next; \
397
+ } \
398
+ if ((head)->next) { \
399
+ (head)->next = ((del)->next); \
400
+ } \
401
+ { \
402
+ char **_head_alias = (char**)&(head); \
403
+ *_head_alias = _tmp; \
404
+ } \
405
+ } \
406
+ } while (0)
407
+ #ifdef NO_DECLTYPE
408
+ #undef LL_APPEND
409
+ #define LL_APPEND LL_APPEND_VS2008
410
+ #undef LL_DELETE
411
+ #define LL_DELETE LL_DELETE_VS2008
412
+ #undef LL_DELETE2
413
+ #define LL_DELETE2_VS2008
414
+ #undef LL_APPEND2
415
+ #define LL_APPEND2 LL_APPEND2_VS2008
416
+ #undef LL_CONCAT /* no LL_CONCAT_VS2008 */
417
+ #undef DL_CONCAT /* no DL_CONCAT_VS2008 */
418
+ #endif
419
+ /* end VS2008 replacements */
420
+
421
+ #define LL_FOREACH(head,el) \
422
+ LL_FOREACH2(head,el,next)
423
+
424
+ #define LL_FOREACH2(head,el,next) \
425
+ for(el=head;el;el=(el)->next)
426
+
427
+ #define LL_FOREACH_SAFE(head,el,tmp) \
428
+ LL_FOREACH_SAFE2(head,el,tmp,next)
429
+
430
+ #define LL_FOREACH_SAFE2(head,el,tmp,next) \
431
+ for((el)=(head);(el) && (tmp = (el)->next, 1); (el) = tmp)
432
+
433
+ #define LL_SEARCH_SCALAR(head,out,field,val) \
434
+ LL_SEARCH_SCALAR2(head,out,field,val,next)
435
+
436
+ #define LL_SEARCH_SCALAR2(head,out,field,val,next) \
437
+ do { \
438
+ LL_FOREACH2(head,out,next) { \
439
+ if ((out)->field == (val)) break; \
440
+ } \
441
+ } while(0)
442
+
443
+ #define LL_SEARCH(head,out,elt,cmp) \
444
+ LL_SEARCH2(head,out,elt,cmp,next)
445
+
446
+ #define LL_SEARCH2(head,out,elt,cmp,next) \
447
+ do { \
448
+ LL_FOREACH2(head,out,next) { \
449
+ if ((cmp(out,elt))==0) break; \
450
+ } \
451
+ } while(0)
452
+
453
+ #define LL_REPLACE_ELEM(head, el, add) \
454
+ do { \
455
+ LDECLTYPE(head) _tmp; \
456
+ assert(head != NULL); \
457
+ assert(el != NULL); \
458
+ assert(add != NULL); \
459
+ (add)->next = (el)->next; \
460
+ if ((head) == (el)) { \
461
+ (head) = (add); \
462
+ } else { \
463
+ _tmp = head; \
464
+ while (_tmp->next && (_tmp->next != (el))) { \
465
+ _tmp = _tmp->next; \
466
+ } \
467
+ if (_tmp->next) { \
468
+ _tmp->next = (add); \
469
+ } \
470
+ } \
471
+ } while (0)
472
+
473
+ #define LL_PREPEND_ELEM(head, el, add) \
474
+ do { \
475
+ LDECLTYPE(head) _tmp; \
476
+ assert(head != NULL); \
477
+ assert(el != NULL); \
478
+ assert(add != NULL); \
479
+ (add)->next = (el); \
480
+ if ((head) == (el)) { \
481
+ (head) = (add); \
482
+ } else { \
483
+ _tmp = head; \
484
+ while (_tmp->next && (_tmp->next != (el))) { \
485
+ _tmp = _tmp->next; \
486
+ } \
487
+ if (_tmp->next) { \
488
+ _tmp->next = (add); \
489
+ } \
490
+ } \
491
+ } while (0) \
492
+
493
+
494
+ /******************************************************************************
495
+ * doubly linked list macros (non-circular) *
496
+ *****************************************************************************/
497
+ #define DL_PREPEND(head,add) \
498
+ DL_PREPEND2(head,add,prev,next)
499
+
500
+ #define DL_PREPEND2(head,add,prev,next) \
501
+ do { \
502
+ (add)->next = head; \
503
+ if (head) { \
504
+ (add)->prev = (head)->prev; \
505
+ (head)->prev = (add); \
506
+ } else { \
507
+ (add)->prev = (add); \
508
+ } \
509
+ (head) = (add); \
510
+ } while (0)
511
+
512
+ #define DL_APPEND(head,add) \
513
+ DL_APPEND2(head,add,prev,next)
514
+
515
+ #define DL_APPEND2(head,add,prev,next) \
516
+ do { \
517
+ if (head) { \
518
+ (add)->prev = (head)->prev; \
519
+ (head)->prev->next = (add); \
520
+ (head)->prev = (add); \
521
+ (add)->next = NULL; \
522
+ } else { \
523
+ (head)=(add); \
524
+ (head)->prev = (head); \
525
+ (head)->next = NULL; \
526
+ } \
527
+ } while (0)
528
+
529
+ #define DL_CONCAT(head1,head2) \
530
+ DL_CONCAT2(head1,head2,prev,next)
531
+
532
+ #define DL_CONCAT2(head1,head2,prev,next) \
533
+ do { \
534
+ LDECLTYPE(head1) _tmp; \
535
+ if (head2) { \
536
+ if (head1) { \
537
+ _tmp = (head2)->prev; \
538
+ (head2)->prev = (head1)->prev; \
539
+ (head1)->prev->next = (head2); \
540
+ (head1)->prev = _tmp; \
541
+ } else { \
542
+ (head1)=(head2); \
543
+ } \
544
+ } \
545
+ } while (0)
546
+
547
+ #define DL_DELETE(head,del) \
548
+ DL_DELETE2(head,del,prev,next)
549
+
550
+ #define DL_DELETE2(head,del,prev,next) \
551
+ do { \
552
+ assert((del)->prev != NULL); \
553
+ if ((del)->prev == (del)) { \
554
+ (head)=NULL; \
555
+ } else if ((del)==(head)) { \
556
+ (del)->next->prev = (del)->prev; \
557
+ (head) = (del)->next; \
558
+ } else { \
559
+ (del)->prev->next = (del)->next; \
560
+ if ((del)->next) { \
561
+ (del)->next->prev = (del)->prev; \
562
+ } else { \
563
+ (head)->prev = (del)->prev; \
564
+ } \
565
+ } \
566
+ } while (0)
567
+
568
+
569
+ #define DL_FOREACH(head,el) \
570
+ DL_FOREACH2(head,el,next)
571
+
572
+ #define DL_FOREACH2(head,el,next) \
573
+ for(el=head;el;el=(el)->next)
574
+
575
+ /* this version is safe for deleting the elements during iteration */
576
+ #define DL_FOREACH_SAFE(head,el,tmp) \
577
+ DL_FOREACH_SAFE2(head,el,tmp,next)
578
+
579
+ #define DL_FOREACH_SAFE2(head,el,tmp,next) \
580
+ for((el)=(head);(el) && (tmp = (el)->next, 1); (el) = tmp)
581
+
582
+ /* these are identical to their singly-linked list counterparts */
583
+ #define DL_SEARCH_SCALAR LL_SEARCH_SCALAR
584
+ #define DL_SEARCH LL_SEARCH
585
+ #define DL_SEARCH_SCALAR2 LL_SEARCH_SCALAR2
586
+ #define DL_SEARCH2 LL_SEARCH2
587
+
588
+ #define DL_REPLACE_ELEM(head, el, add) \
589
+ do { \
590
+ assert(head != NULL); \
591
+ assert(el != NULL); \
592
+ assert(add != NULL); \
593
+ if ((head) == (el)) { \
594
+ (head) = (add); \
595
+ (add)->next = (el)->next; \
596
+ if ((el)->next == NULL) { \
597
+ (add)->prev = (add); \
598
+ } else { \
599
+ (add)->prev = (el)->prev; \
600
+ (add)->next->prev = (add); \
601
+ } \
602
+ } else { \
603
+ (add)->next = (el)->next; \
604
+ (add)->prev = (el)->prev; \
605
+ (add)->prev->next = (add); \
606
+ if ((el)->next == NULL) { \
607
+ (head)->prev = (add); \
608
+ } else { \
609
+ (add)->next->prev = (add); \
610
+ } \
611
+ } \
612
+ } while (0)
613
+
614
+ #define DL_PREPEND_ELEM(head, el, add) \
615
+ do { \
616
+ assert(head != NULL); \
617
+ assert(el != NULL); \
618
+ assert(add != NULL); \
619
+ (add)->next = (el); \
620
+ (add)->prev = (el)->prev; \
621
+ (el)->prev = (add); \
622
+ if ((head) == (el)) { \
623
+ (head) = (add); \
624
+ } else { \
625
+ (add)->prev->next = (add); \
626
+ } \
627
+ } while (0) \
628
+
629
+
630
+ /******************************************************************************
631
+ * circular doubly linked list macros *
632
+ *****************************************************************************/
633
+ #define CDL_PREPEND(head,add) \
634
+ CDL_PREPEND2(head,add,prev,next)
635
+
636
+ #define CDL_PREPEND2(head,add,prev,next) \
637
+ do { \
638
+ if (head) { \
639
+ (add)->prev = (head)->prev; \
640
+ (add)->next = (head); \
641
+ (head)->prev = (add); \
642
+ (add)->prev->next = (add); \
643
+ } else { \
644
+ (add)->prev = (add); \
645
+ (add)->next = (add); \
646
+ } \
647
+ (head)=(add); \
648
+ } while (0)
649
+
650
+ #define CDL_DELETE(head,del) \
651
+ CDL_DELETE2(head,del,prev,next)
652
+
653
+ #define CDL_DELETE2(head,del,prev,next) \
654
+ do { \
655
+ if ( ((head)==(del)) && ((head)->next == (head))) { \
656
+ (head) = 0L; \
657
+ } else { \
658
+ (del)->next->prev = (del)->prev; \
659
+ (del)->prev->next = (del)->next; \
660
+ if ((del) == (head)) (head)=(del)->next; \
661
+ } \
662
+ } while (0)
663
+
664
+ #define CDL_FOREACH(head,el) \
665
+ CDL_FOREACH2(head,el,next)
666
+
667
+ #define CDL_FOREACH2(head,el,next) \
668
+ for(el=head;el;el=((el)->next==head ? 0L : (el)->next))
669
+
670
+ #define CDL_FOREACH_SAFE(head,el,tmp1,tmp2) \
671
+ CDL_FOREACH_SAFE2(head,el,tmp1,tmp2,prev,next)
672
+
673
+ #define CDL_FOREACH_SAFE2(head,el,tmp1,tmp2,prev,next) \
674
+ for((el)=(head), ((tmp1)=(head)?((head)->prev):NULL); \
675
+ (el) && ((tmp2)=(el)->next, 1); \
676
+ ((el) = (((el)==(tmp1)) ? 0L : (tmp2))))
677
+
678
+ #define CDL_SEARCH_SCALAR(head,out,field,val) \
679
+ CDL_SEARCH_SCALAR2(head,out,field,val,next)
680
+
681
+ #define CDL_SEARCH_SCALAR2(head,out,field,val,next) \
682
+ do { \
683
+ CDL_FOREACH2(head,out,next) { \
684
+ if ((out)->field == (val)) break; \
685
+ } \
686
+ } while(0)
687
+
688
+ #define CDL_SEARCH(head,out,elt,cmp) \
689
+ CDL_SEARCH2(head,out,elt,cmp,next)
690
+
691
+ #define CDL_SEARCH2(head,out,elt,cmp,next) \
692
+ do { \
693
+ CDL_FOREACH2(head,out,next) { \
694
+ if ((cmp(out,elt))==0) break; \
695
+ } \
696
+ } while(0)
697
+
698
+ #define CDL_REPLACE_ELEM(head, el, add) \
699
+ do { \
700
+ assert(head != NULL); \
701
+ assert(el != NULL); \
702
+ assert(add != NULL); \
703
+ if ((el)->next == (el)) { \
704
+ (add)->next = (add); \
705
+ (add)->prev = (add); \
706
+ (head) = (add); \
707
+ } else { \
708
+ (add)->next = (el)->next; \
709
+ (add)->prev = (el)->prev; \
710
+ (add)->next->prev = (add); \
711
+ (add)->prev->next = (add); \
712
+ if ((head) == (el)) { \
713
+ (head) = (add); \
714
+ } \
715
+ } \
716
+ } while (0)
717
+
718
+ #define CDL_PREPEND_ELEM(head, el, add) \
719
+ do { \
720
+ assert(head != NULL); \
721
+ assert(el != NULL); \
722
+ assert(add != NULL); \
723
+ (add)->next = (el); \
724
+ (add)->prev = (el)->prev; \
725
+ (el)->prev = (add); \
726
+ (add)->prev->next = (add); \
727
+ if ((head) == (el)) { \
728
+ (head) = (add); \
729
+ } \
730
+ } while (0) \
731
+
732
+ #endif /* UTLIST_H */
733
+