ruby-bullet 0.1.0-x86-linux → 0.1.1-x86-linux

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +3 -0
  3. data/Rakefile +14 -2
  4. data/bindings/bullet/interface/BulletCollision/CollisionDispatch/btCollisionWorld.i +2 -2
  5. data/bindings/bullet/interface/bullet_wrap.cpp +17548 -6035
  6. data/bindings/bullet/interface/bullet_wrap.h +7 -7
  7. data/bindings/bullet/interface/bullet_wrap.o +0 -0
  8. data/lib/bullet.so +0 -0
  9. data/lib/ruby-bullet/version.rb +1 -1
  10. data/ruby-bullet.gemspec +0 -3
  11. metadata +169 -444
  12. data/deps/include/bullet/Bullet-C-Api.h +0 -176
  13. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.h +0 -1051
  14. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h +0 -82
  15. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h +0 -270
  16. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h +0 -80
  17. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvt.h +0 -1257
  18. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h +0 -146
  19. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btDispatcher.h +0 -110
  20. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h +0 -151
  21. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h +0 -469
  22. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h +0 -40
  23. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.h +0 -579
  24. data/deps/include/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h +0 -171
  25. data/deps/include/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.h +0 -51
  26. data/deps/include/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h +0 -36
  27. data/deps/include/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h +0 -66
  28. data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h +0 -66
  29. data/deps/include/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.h +0 -44
  30. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionConfiguration.h +0 -48
  31. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h +0 -45
  32. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.h +0 -172
  33. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionObject.h +0 -524
  34. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.h +0 -509
  35. data/deps/include/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h +0 -86
  36. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h +0 -95
  37. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h +0 -116
  38. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h +0 -109
  39. data/deps/include/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h +0 -84
  40. data/deps/include/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h +0 -137
  41. data/deps/include/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h +0 -54
  42. data/deps/include/bullet/BulletCollision/CollisionDispatch/btGhostObject.h +0 -175
  43. data/deps/include/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h +0 -46
  44. data/deps/include/bullet/BulletCollision/CollisionDispatch/btManifoldResult.h +0 -128
  45. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.h +0 -81
  46. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h +0 -75
  47. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h +0 -66
  48. data/deps/include/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h +0 -69
  49. data/deps/include/bullet/BulletCollision/CollisionDispatch/btUnionFind.h +0 -129
  50. data/deps/include/bullet/BulletCollision/CollisionShapes/btBox2dShape.h +0 -369
  51. data/deps/include/bullet/BulletCollision/CollisionShapes/btBoxShape.h +0 -312
  52. data/deps/include/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h +0 -139
  53. data/deps/include/bullet/BulletCollision/CollisionShapes/btCapsuleShape.h +0 -173
  54. data/deps/include/bullet/BulletCollision/CollisionShapes/btCollisionMargin.h +0 -27
  55. data/deps/include/bullet/BulletCollision/CollisionShapes/btCollisionShape.h +0 -150
  56. data/deps/include/bullet/BulletCollision/CollisionShapes/btCompoundShape.h +0 -212
  57. data/deps/include/bullet/BulletCollision/CollisionShapes/btConcaveShape.h +0 -60
  58. data/deps/include/bullet/BulletCollision/CollisionShapes/btConeShape.h +0 -103
  59. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvex2dShape.h +0 -80
  60. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexHullShape.h +0 -122
  61. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.h +0 -224
  62. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.h +0 -105
  63. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.h +0 -62
  64. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexShape.h +0 -84
  65. data/deps/include/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h +0 -75
  66. data/deps/include/bullet/BulletCollision/CollisionShapes/btCylinderShape.h +0 -200
  67. data/deps/include/bullet/BulletCollision/CollisionShapes/btEmptyShape.h +0 -70
  68. data/deps/include/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h +0 -161
  69. data/deps/include/bullet/BulletCollision/CollisionShapes/btMaterial.h +0 -35
  70. data/deps/include/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.h +0 -60
  71. data/deps/include/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.h +0 -99
  72. data/deps/include/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h +0 -120
  73. data/deps/include/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.h +0 -65
  74. data/deps/include/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h +0 -112
  75. data/deps/include/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h +0 -93
  76. data/deps/include/bullet/BulletCollision/CollisionShapes/btShapeHull.h +0 -59
  77. data/deps/include/bullet/BulletCollision/CollisionShapes/btSphereShape.h +0 -73
  78. data/deps/include/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.h +0 -103
  79. data/deps/include/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.h +0 -162
  80. data/deps/include/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.h +0 -74
  81. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.h +0 -69
  82. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleCallback.h +0 -42
  83. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h +0 -133
  84. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h +0 -84
  85. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleInfoMap.h +0 -241
  86. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMesh.h +0 -69
  87. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.h +0 -89
  88. data/deps/include/bullet/BulletCollision/CollisionShapes/btTriangleShape.h +0 -182
  89. data/deps/include/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.h +0 -87
  90. data/deps/include/bullet/BulletCollision/Gimpact/btBoxCollision.h +0 -647
  91. data/deps/include/bullet/BulletCollision/Gimpact/btClipPolygon.h +0 -182
  92. data/deps/include/bullet/BulletCollision/Gimpact/btContactProcessing.h +0 -145
  93. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactBvh.h +0 -396
  94. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h +0 -306
  95. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactMassUtil.h +0 -60
  96. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.h +0 -372
  97. data/deps/include/bullet/BulletCollision/Gimpact/btGImpactShape.h +0 -1171
  98. data/deps/include/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.h +0 -163
  99. data/deps/include/bullet/BulletCollision/Gimpact/btGeometryOperations.h +0 -212
  100. data/deps/include/bullet/BulletCollision/Gimpact/btQuantization.h +0 -88
  101. data/deps/include/bullet/BulletCollision/Gimpact/btTriangleShapeEx.h +0 -180
  102. data/deps/include/bullet/BulletCollision/Gimpact/gim_array.h +0 -326
  103. data/deps/include/bullet/BulletCollision/Gimpact/gim_basic_geometry_operations.h +0 -543
  104. data/deps/include/bullet/BulletCollision/Gimpact/gim_bitset.h +0 -123
  105. data/deps/include/bullet/BulletCollision/Gimpact/gim_box_collision.h +0 -590
  106. data/deps/include/bullet/BulletCollision/Gimpact/gim_box_set.h +0 -674
  107. data/deps/include/bullet/BulletCollision/Gimpact/gim_clip_polygon.h +0 -210
  108. data/deps/include/bullet/BulletCollision/Gimpact/gim_contact.h +0 -164
  109. data/deps/include/bullet/BulletCollision/Gimpact/gim_geom_types.h +0 -97
  110. data/deps/include/bullet/BulletCollision/Gimpact/gim_geometry.h +0 -42
  111. data/deps/include/bullet/BulletCollision/Gimpact/gim_hash_table.h +0 -902
  112. data/deps/include/bullet/BulletCollision/Gimpact/gim_linear_math.h +0 -1573
  113. data/deps/include/bullet/BulletCollision/Gimpact/gim_math.h +0 -157
  114. data/deps/include/bullet/BulletCollision/Gimpact/gim_memory.h +0 -190
  115. data/deps/include/bullet/BulletCollision/Gimpact/gim_radixsort.h +0 -406
  116. data/deps/include/bullet/BulletCollision/Gimpact/gim_tri_collision.h +0 -379
  117. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h +0 -59
  118. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.h +0 -73
  119. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h +0 -42
  120. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h +0 -91
  121. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h +0 -50
  122. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.h +0 -75
  123. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h +0 -43
  124. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h +0 -103
  125. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h +0 -158
  126. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h +0 -40
  127. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h +0 -228
  128. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPointCollector.h +0 -64
  129. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h +0 -46
  130. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h +0 -72
  131. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h +0 -63
  132. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h +0 -50
  133. data/deps/include/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h +0 -179
  134. data/deps/include/bullet/BulletCollision/btBulletCollisionCommon.h +0 -69
  135. data/deps/include/bullet/BulletDynamics/Character/btCharacterControllerInterface.h +0 -46
  136. data/deps/include/bullet/BulletDynamics/Character/btKinematicCharacterController.h +0 -163
  137. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h +0 -346
  138. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btConstraintSolver.h +0 -52
  139. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.h +0 -71
  140. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btContactSolverInfo.h +0 -87
  141. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h +0 -614
  142. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h +0 -99
  143. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.h +0 -58
  144. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h +0 -381
  145. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btJacobianEntry.h +0 -156
  146. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h +0 -161
  147. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h +0 -130
  148. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h +0 -333
  149. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h +0 -107
  150. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolverBody.h +0 -191
  151. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btSolverConstraint.h +0 -98
  152. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.h +0 -452
  153. data/deps/include/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.h +0 -62
  154. data/deps/include/bullet/BulletDynamics/Dynamics/btActionInterface.h +0 -46
  155. data/deps/include/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h +0 -203
  156. data/deps/include/bullet/BulletDynamics/Dynamics/btDynamicsWorld.h +0 -151
  157. data/deps/include/bullet/BulletDynamics/Dynamics/btRigidBody.h +0 -691
  158. data/deps/include/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h +0 -89
  159. data/deps/include/bullet/BulletDynamics/Vehicle/btRaycastVehicle.h +0 -236
  160. data/deps/include/bullet/BulletDynamics/Vehicle/btVehicleRaycaster.h +0 -35
  161. data/deps/include/bullet/BulletDynamics/Vehicle/btWheelInfo.h +0 -119
  162. data/deps/include/bullet/BulletDynamics/btBulletDynamicsCommon.h +0 -48
  163. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverBuffer_DX11.h +0 -323
  164. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverLinkData_DX11.h +0 -103
  165. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverLinkData_DX11SIMDAware.h +0 -173
  166. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverTriangleData_DX11.h +0 -96
  167. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverVertexBuffer_DX11.h +0 -107
  168. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolverVertexData_DX11.h +0 -63
  169. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11.h +0 -691
  170. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/DX11/btSoftBodySolver_DX11SIMDAware.h +0 -81
  171. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverBuffer_OpenCL.h +0 -209
  172. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverLinkData_OpenCL.h +0 -99
  173. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverLinkData_OpenCLSIMDAware.h +0 -169
  174. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverOutputCLtoGL.h +0 -62
  175. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverTriangleData_OpenCL.h +0 -84
  176. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverVertexBuffer_OpenGL.h +0 -166
  177. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolverVertexData_OpenCL.h +0 -52
  178. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCL.h +0 -527
  179. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/OpenCL/btSoftBodySolver_OpenCLSIMDAware.h +0 -81
  180. data/deps/include/bullet/BulletMultiThreaded/GpuSoftBodySolvers/Shared/btSoftBodySolverData.h +0 -748
  181. data/deps/include/bullet/BulletMultiThreaded/HeapManager.h +0 -117
  182. data/deps/include/bullet/BulletMultiThreaded/PlatformDefinitions.h +0 -99
  183. data/deps/include/bullet/BulletMultiThreaded/PosixThreadSupport.h +0 -142
  184. data/deps/include/bullet/BulletMultiThreaded/PpuAddressSpace.h +0 -37
  185. data/deps/include/bullet/BulletMultiThreaded/SequentialThreadSupport.h +0 -96
  186. data/deps/include/bullet/BulletMultiThreaded/SpuCollisionObjectWrapper.h +0 -40
  187. data/deps/include/bullet/BulletMultiThreaded/SpuCollisionTaskProcess.h +0 -163
  188. data/deps/include/bullet/BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.h +0 -120
  189. data/deps/include/bullet/BulletMultiThreaded/SpuDoubleBuffer.h +0 -126
  190. data/deps/include/bullet/BulletMultiThreaded/SpuFakeDma.h +0 -135
  191. data/deps/include/bullet/BulletMultiThreaded/SpuGatheringCollisionDispatcher.h +0 -72
  192. data/deps/include/bullet/BulletMultiThreaded/SpuLibspe2Support.h +0 -180
  193. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/Box.h +0 -167
  194. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.h +0 -128
  195. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.h +0 -106
  196. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuConvexPenetrationDepthSolver.h +0 -51
  197. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h +0 -140
  198. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuLocalSupport.h +0 -19
  199. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.h +0 -48
  200. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuPreferredPenetrationDirections.h +0 -70
  201. data/deps/include/bullet/BulletMultiThreaded/SpuNarrowPhaseCollisionTask/boxBoxDistance.h +0 -65
  202. data/deps/include/bullet/BulletMultiThreaded/SpuSampleTask/SpuSampleTask.h +0 -54
  203. data/deps/include/bullet/BulletMultiThreaded/SpuSampleTaskProcess.h +0 -153
  204. data/deps/include/bullet/BulletMultiThreaded/SpuSync.h +0 -149
  205. data/deps/include/bullet/BulletMultiThreaded/TrbDynBody.h +0 -79
  206. data/deps/include/bullet/BulletMultiThreaded/TrbStateVec.h +0 -339
  207. data/deps/include/bullet/BulletMultiThreaded/Win32ThreadSupport.h +0 -138
  208. data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphase.h +0 -138
  209. data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphaseSharedCode.h +0 -430
  210. data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphaseSharedDefs.h +0 -61
  211. data/deps/include/bullet/BulletMultiThreaded/btGpu3DGridBroadphaseSharedTypes.h +0 -67
  212. data/deps/include/bullet/BulletMultiThreaded/btGpuDefines.h +0 -211
  213. data/deps/include/bullet/BulletMultiThreaded/btGpuUtilsSharedCode.h +0 -55
  214. data/deps/include/bullet/BulletMultiThreaded/btGpuUtilsSharedDefs.h +0 -52
  215. data/deps/include/bullet/BulletMultiThreaded/btParallelConstraintSolver.h +0 -285
  216. data/deps/include/bullet/BulletMultiThreaded/btThreadSupportInterface.h +0 -85
  217. data/deps/include/bullet/BulletMultiThreaded/vectormath2bullet.h +0 -73
  218. data/deps/include/bullet/BulletSoftBody/btDefaultSoftBodySolver.h +0 -63
  219. data/deps/include/bullet/BulletSoftBody/btSoftBody.h +0 -987
  220. data/deps/include/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.h +0 -153
  221. data/deps/include/bullet/BulletSoftBody/btSoftBodyData.h +0 -217
  222. data/deps/include/bullet/BulletSoftBody/btSoftBodyHelpers.h +0 -143
  223. data/deps/include/bullet/BulletSoftBody/btSoftBodyInternals.h +0 -930
  224. data/deps/include/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h +0 -48
  225. data/deps/include/bullet/BulletSoftBody/btSoftBodySolverVertexBuffer.h +0 -165
  226. data/deps/include/bullet/BulletSoftBody/btSoftBodySolvers.h +0 -154
  227. data/deps/include/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.h +0 -75
  228. data/deps/include/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.h +0 -107
  229. data/deps/include/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.h +0 -69
  230. data/deps/include/bullet/BulletSoftBody/btSparseSDF.h +0 -306
  231. data/deps/include/bullet/LinearMath/btAabbUtil2.h +0 -236
  232. data/deps/include/bullet/LinearMath/btAlignedAllocator.h +0 -107
  233. data/deps/include/bullet/LinearMath/btAlignedObjectArray.h +0 -494
  234. data/deps/include/bullet/LinearMath/btConvexHull.h +0 -241
  235. data/deps/include/bullet/LinearMath/btConvexHullComputer.h +0 -103
  236. data/deps/include/bullet/LinearMath/btDefaultMotionState.h +0 -40
  237. data/deps/include/bullet/LinearMath/btGeometryUtil.h +0 -42
  238. data/deps/include/bullet/LinearMath/btGrahamScan2dConvexHull.h +0 -110
  239. data/deps/include/bullet/LinearMath/btHashMap.h +0 -450
  240. data/deps/include/bullet/LinearMath/btIDebugDraw.h +0 -418
  241. data/deps/include/bullet/LinearMath/btList.h +0 -73
  242. data/deps/include/bullet/LinearMath/btMatrix3x3.h +0 -771
  243. data/deps/include/bullet/LinearMath/btMinMax.h +0 -71
  244. data/deps/include/bullet/LinearMath/btMotionState.h +0 -40
  245. data/deps/include/bullet/LinearMath/btPoolAllocator.h +0 -121
  246. data/deps/include/bullet/LinearMath/btQuadWord.h +0 -180
  247. data/deps/include/bullet/LinearMath/btQuaternion.h +0 -430
  248. data/deps/include/bullet/LinearMath/btQuickprof.h +0 -203
  249. data/deps/include/bullet/LinearMath/btRandom.h +0 -42
  250. data/deps/include/bullet/LinearMath/btScalar.h +0 -539
  251. data/deps/include/bullet/LinearMath/btSerializer.h +0 -639
  252. data/deps/include/bullet/LinearMath/btStackAlloc.h +0 -116
  253. data/deps/include/bullet/LinearMath/btTransform.h +0 -307
  254. data/deps/include/bullet/LinearMath/btTransformUtil.h +0 -228
  255. data/deps/include/bullet/LinearMath/btVector3.h +0 -766
  256. data/deps/include/bullet/MiniCL/MiniCLTask/MiniCLTask.h +0 -62
  257. data/deps/include/bullet/MiniCL/MiniCLTaskScheduler.h +0 -194
  258. data/deps/include/bullet/MiniCL/cl.h +0 -867
  259. data/deps/include/bullet/MiniCL/cl_MiniCL_Defs.h +0 -439
  260. data/deps/include/bullet/MiniCL/cl_gl.h +0 -113
  261. data/deps/include/bullet/MiniCL/cl_platform.h +0 -254
  262. data/deps/include/bullet/btBulletCollisionCommon.h +0 -69
  263. data/deps/include/bullet/btBulletDynamicsCommon.h +0 -48
  264. data/deps/include/bullet/vectormath/scalar/boolInVec.h +0 -225
  265. data/deps/include/bullet/vectormath/scalar/floatInVec.h +0 -343
  266. data/deps/include/bullet/vectormath/scalar/mat_aos.h +0 -1630
  267. data/deps/include/bullet/vectormath/scalar/quat_aos.h +0 -433
  268. data/deps/include/bullet/vectormath/scalar/vec_aos.h +0 -1426
  269. data/deps/include/bullet/vectormath/scalar/vectormath_aos.h +0 -1872
  270. data/deps/include/bullet/vectormath/sse/boolInVec.h +0 -247
  271. data/deps/include/bullet/vectormath/sse/floatInVec.h +0 -340
  272. data/deps/include/bullet/vectormath/sse/mat_aos.h +0 -2190
  273. data/deps/include/bullet/vectormath/sse/quat_aos.h +0 -579
  274. data/deps/include/bullet/vectormath/sse/vec_aos.h +0 -1455
  275. data/deps/include/bullet/vectormath/sse/vecidx_aos.h +0 -80
  276. data/deps/include/bullet/vectormath/sse/vectormath_aos.h +0 -2547
  277. data/deps/include/bullet/vectormath/vmInclude.h +0 -27
  278. data/deps/lib/libBulletCollision.a +0 -0
  279. data/deps/lib/libBulletDynamics.a +0 -0
  280. data/deps/lib/libBulletMultiThreaded.a +0 -0
  281. data/deps/lib/libBulletSoftBody.a +0 -0
  282. data/deps/lib/libBulletSoftBodySolvers_OpenCL_Mini.a +0 -0
  283. data/deps/lib/libLinearMath.a +0 -0
  284. data/deps/lib/libMiniCL.a +0 -0
@@ -1,902 +0,0 @@
1
- #ifndef GIM_HASH_TABLE_H_INCLUDED
2
- #define GIM_HASH_TABLE_H_INCLUDED
3
- /*! \file gim_trimesh_data.h
4
- \author Francisco Leon Najera
5
- */
6
- /*
7
- -----------------------------------------------------------------------------
8
- This source file is part of GIMPACT Library.
9
-
10
- For the latest info, see http://gimpact.sourceforge.net/
11
-
12
- Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
13
- email: projectileman@yahoo.com
14
-
15
- This library is free software; you can redistribute it and/or
16
- modify it under the terms of EITHER:
17
- (1) The GNU Lesser General Public License as published by the Free
18
- Software Foundation; either version 2.1 of the License, or (at
19
- your option) any later version. The text of the GNU Lesser
20
- General Public License is included with this library in the
21
- file GIMPACT-LICENSE-LGPL.TXT.
22
- (2) The BSD-style license that is included with this library in
23
- the file GIMPACT-LICENSE-BSD.TXT.
24
- (3) The zlib/libpng license that is included with this library in
25
- the file GIMPACT-LICENSE-ZLIB.TXT.
26
-
27
- This library is distributed in the hope that it will be useful,
28
- but WITHOUT ANY WARRANTY; without even the implied warranty of
29
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
30
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
31
-
32
- -----------------------------------------------------------------------------
33
- */
34
-
35
- #include "gim_radixsort.h"
36
-
37
-
38
- #define GIM_INVALID_HASH 0xffffffff //!< A very very high value
39
- #define GIM_DEFAULT_HASH_TABLE_SIZE 380
40
- #define GIM_DEFAULT_HASH_TABLE_NODE_SIZE 4
41
- #define GIM_HASH_TABLE_GROW_FACTOR 2
42
-
43
- #define GIM_MIN_RADIX_SORT_SIZE 860 //!< calibrated on a PIII
44
-
45
- template<typename T>
46
- struct GIM_HASH_TABLE_NODE
47
- {
48
- GUINT m_key;
49
- T m_data;
50
- GIM_HASH_TABLE_NODE()
51
- {
52
- }
53
-
54
- GIM_HASH_TABLE_NODE(const GIM_HASH_TABLE_NODE & value)
55
- {
56
- m_key = value.m_key;
57
- m_data = value.m_data;
58
- }
59
-
60
- GIM_HASH_TABLE_NODE(GUINT key, const T & data)
61
- {
62
- m_key = key;
63
- m_data = data;
64
- }
65
-
66
- bool operator <(const GIM_HASH_TABLE_NODE<T> & other) const
67
- {
68
- ///inverse order, further objects are first
69
- if(m_key < other.m_key) return true;
70
- return false;
71
- }
72
-
73
- bool operator >(const GIM_HASH_TABLE_NODE<T> & other) const
74
- {
75
- ///inverse order, further objects are first
76
- if(m_key > other.m_key) return true;
77
- return false;
78
- }
79
-
80
- bool operator ==(const GIM_HASH_TABLE_NODE<T> & other) const
81
- {
82
- ///inverse order, further objects are first
83
- if(m_key == other.m_key) return true;
84
- return false;
85
- }
86
- };
87
-
88
- ///Macro for getting the key
89
- class GIM_HASH_NODE_GET_KEY
90
- {
91
- public:
92
- template<class T>
93
- inline GUINT operator()( const T& a)
94
- {
95
- return a.m_key;
96
- }
97
- };
98
-
99
-
100
-
101
- ///Macro for comparing the key and the element
102
- class GIM_HASH_NODE_CMP_KEY_MACRO
103
- {
104
- public:
105
- template<class T>
106
- inline int operator() ( const T& a, GUINT key)
107
- {
108
- return ((int)(a.m_key - key));
109
- }
110
- };
111
-
112
- ///Macro for comparing Hash nodes
113
- class GIM_HASH_NODE_CMP_MACRO
114
- {
115
- public:
116
- template<class T>
117
- inline int operator() ( const T& a, const T& b )
118
- {
119
- return ((int)(a.m_key - b.m_key));
120
- }
121
- };
122
-
123
-
124
-
125
-
126
-
127
- //! Sorting for hash table
128
- /*!
129
- switch automatically between quicksort and radixsort
130
- */
131
- template<typename T>
132
- void gim_sort_hash_node_array(T * array, GUINT array_count)
133
- {
134
- if(array_count<GIM_MIN_RADIX_SORT_SIZE)
135
- {
136
- gim_heap_sort(array,array_count,GIM_HASH_NODE_CMP_MACRO());
137
- }
138
- else
139
- {
140
- memcopy_elements_func cmpfunc;
141
- gim_radix_sort(array,array_count,GIM_HASH_NODE_GET_KEY(),cmpfunc);
142
- }
143
- }
144
-
145
-
146
-
147
-
148
-
149
-
150
- // Note: assumes long is at least 32 bits.
151
- #define GIM_NUM_PRIME 28
152
-
153
- static const GUINT gim_prime_list[GIM_NUM_PRIME] =
154
- {
155
- 53ul, 97ul, 193ul, 389ul, 769ul,
156
- 1543ul, 3079ul, 6151ul, 12289ul, 24593ul,
157
- 49157ul, 98317ul, 196613ul, 393241ul, 786433ul,
158
- 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul,
159
- 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,
160
- 1610612741ul, 3221225473ul, 4294967291ul
161
- };
162
-
163
- inline GUINT gim_next_prime(GUINT number)
164
- {
165
- //Find nearest upper prime
166
- GUINT result_ind = 0;
167
- gim_binary_search(gim_prime_list,0,(GIM_NUM_PRIME-2),number,result_ind);
168
-
169
- // inv: result_ind < 28
170
- return gim_prime_list[result_ind];
171
- }
172
-
173
-
174
-
175
- //! A compact hash table implementation
176
- /*!
177
- A memory aligned compact hash table that coud be treated as an array.
178
- It could be a simple sorted array without the overhead of the hash key bucked, or could
179
- be a formely hash table with an array of keys.
180
- You can use switch_to_hashtable() and switch_to_sorted_array for saving space or increase speed.
181
- </br>
182
-
183
- <ul>
184
- <li> if node_size = 0, then this container becomes a simple sorted array allocator. reserve_size is used for reserve memory in m_nodes.
185
- When the array size reaches the size equivalent to 'min_hash_table_size', then it becomes a hash table by calling check_for_switching_to_hashtable.
186
- <li> If node_size != 0, then this container becomes a hash table for ever
187
- </ul>
188
-
189
- */
190
- template<class T>
191
- class gim_hash_table
192
- {
193
- protected:
194
- typedef GIM_HASH_TABLE_NODE<T> _node_type;
195
-
196
- //!The nodes
197
- //array< _node_type, SuperAllocator<_node_type> > m_nodes;
198
- gim_array< _node_type > m_nodes;
199
- //SuperBufferedArray< _node_type > m_nodes;
200
- bool m_sorted;
201
-
202
- ///Hash table data management. The hash table has the indices to the corresponding m_nodes array
203
- GUINT * m_hash_table;//!<
204
- GUINT m_table_size;//!<
205
- GUINT m_node_size;//!<
206
- GUINT m_min_hash_table_size;
207
-
208
-
209
-
210
- //! Returns the cell index
211
- inline GUINT _find_cell(GUINT hashkey)
212
- {
213
- _node_type * nodesptr = m_nodes.pointer();
214
- GUINT start_index = (hashkey%m_table_size)*m_node_size;
215
- GUINT end_index = start_index + m_node_size;
216
-
217
- while(start_index<end_index)
218
- {
219
- GUINT value = m_hash_table[start_index];
220
- if(value != GIM_INVALID_HASH)
221
- {
222
- if(nodesptr[value].m_key == hashkey) return start_index;
223
- }
224
- start_index++;
225
- }
226
- return GIM_INVALID_HASH;
227
- }
228
-
229
- //! Find the avaliable cell for the hashkey, and return an existing cell if it has the same hash key
230
- inline GUINT _find_avaliable_cell(GUINT hashkey)
231
- {
232
- _node_type * nodesptr = m_nodes.pointer();
233
- GUINT avaliable_index = GIM_INVALID_HASH;
234
- GUINT start_index = (hashkey%m_table_size)*m_node_size;
235
- GUINT end_index = start_index + m_node_size;
236
-
237
- while(start_index<end_index)
238
- {
239
- GUINT value = m_hash_table[start_index];
240
- if(value == GIM_INVALID_HASH)
241
- {
242
- if(avaliable_index==GIM_INVALID_HASH)
243
- {
244
- avaliable_index = start_index;
245
- }
246
- }
247
- else if(nodesptr[value].m_key == hashkey)
248
- {
249
- return start_index;
250
- }
251
- start_index++;
252
- }
253
- return avaliable_index;
254
- }
255
-
256
-
257
-
258
- //! reserves the memory for the hash table.
259
- /*!
260
- \pre hash table must be empty
261
- \post reserves the memory for the hash table, an initializes all elements to GIM_INVALID_HASH.
262
- */
263
- inline void _reserve_table_memory(GUINT newtablesize)
264
- {
265
- if(newtablesize==0) return;
266
- if(m_node_size==0) return;
267
-
268
- //Get a Prime size
269
-
270
- m_table_size = gim_next_prime(newtablesize);
271
-
272
- GUINT datasize = m_table_size*m_node_size;
273
- //Alloc the data buffer
274
- m_hash_table = (GUINT *)gim_alloc(datasize*sizeof(GUINT));
275
- }
276
-
277
- inline void _invalidate_keys()
278
- {
279
- GUINT datasize = m_table_size*m_node_size;
280
- for(GUINT i=0;i<datasize;i++)
281
- {
282
- m_hash_table[i] = GIM_INVALID_HASH;// invalidate keys
283
- }
284
- }
285
-
286
- //! Clear all memory for the hash table
287
- inline void _clear_table_memory()
288
- {
289
- if(m_hash_table==NULL) return;
290
- gim_free(m_hash_table);
291
- m_hash_table = NULL;
292
- m_table_size = 0;
293
- }
294
-
295
- //! Invalidates the keys (Assigning GIM_INVALID_HASH to all) Reorders the hash keys
296
- inline void _rehash()
297
- {
298
- _invalidate_keys();
299
-
300
- _node_type * nodesptr = m_nodes.pointer();
301
- for(GUINT i=0;i<(GUINT)m_nodes.size();i++)
302
- {
303
- GUINT nodekey = nodesptr[i].m_key;
304
- if(nodekey != GIM_INVALID_HASH)
305
- {
306
- //Search for the avaliable cell in buffer
307
- GUINT index = _find_avaliable_cell(nodekey);
308
-
309
-
310
- if(m_hash_table[index]!=GIM_INVALID_HASH)
311
- {//The new index is alreade used... discard this new incomming object, repeated key
312
- btAssert(m_hash_table[index]==nodekey);
313
- nodesptr[i].m_key = GIM_INVALID_HASH;
314
- }
315
- else
316
- {
317
- //;
318
- //Assign the value for alloc
319
- m_hash_table[index] = i;
320
- }
321
- }
322
- }
323
- }
324
-
325
- //! Resize hash table indices
326
- inline void _resize_table(GUINT newsize)
327
- {
328
- //Clear memory
329
- _clear_table_memory();
330
- //Alloc the data
331
- _reserve_table_memory(newsize);
332
- //Invalidate keys and rehash
333
- _rehash();
334
- }
335
-
336
- //! Destroy hash table memory
337
- inline void _destroy()
338
- {
339
- if(m_hash_table==NULL) return;
340
- _clear_table_memory();
341
- }
342
-
343
- //! Finds an avaliable hash table cell, and resizes the table if there isn't space
344
- inline GUINT _assign_hash_table_cell(GUINT hashkey)
345
- {
346
- GUINT cell_index = _find_avaliable_cell(hashkey);
347
-
348
- if(cell_index==GIM_INVALID_HASH)
349
- {
350
- //rehashing
351
- _resize_table(m_table_size+1);
352
- GUINT cell_index = _find_avaliable_cell(hashkey);
353
- btAssert(cell_index!=GIM_INVALID_HASH);
354
- }
355
- return cell_index;
356
- }
357
-
358
- //! erase by index in hash table
359
- inline bool _erase_by_index_hash_table(GUINT index)
360
- {
361
- if(index >= m_nodes.size()) return false;
362
- if(m_nodes[index].m_key != GIM_INVALID_HASH)
363
- {
364
- //Search for the avaliable cell in buffer
365
- GUINT cell_index = _find_cell(m_nodes[index].m_key);
366
-
367
- btAssert(cell_index!=GIM_INVALID_HASH);
368
- btAssert(m_hash_table[cell_index]==index);
369
-
370
- m_hash_table[cell_index] = GIM_INVALID_HASH;
371
- }
372
-
373
- return this->_erase_unsorted(index);
374
- }
375
-
376
- //! erase by key in hash table
377
- inline bool _erase_hash_table(GUINT hashkey)
378
- {
379
- if(hashkey == GIM_INVALID_HASH) return false;
380
-
381
- //Search for the avaliable cell in buffer
382
- GUINT cell_index = _find_cell(hashkey);
383
- if(cell_index ==GIM_INVALID_HASH) return false;
384
-
385
- GUINT index = m_hash_table[cell_index];
386
- m_hash_table[cell_index] = GIM_INVALID_HASH;
387
-
388
- return this->_erase_unsorted(index);
389
- }
390
-
391
-
392
-
393
- //! insert an element in hash table
394
- /*!
395
- If the element exists, this won't insert the element
396
- \return the index in the array of the existing element,or GIM_INVALID_HASH if the element has been inserted
397
- If so, the element has been inserted at the last position of the array.
398
- */
399
- inline GUINT _insert_hash_table(GUINT hashkey, const T & value)
400
- {
401
- if(hashkey==GIM_INVALID_HASH)
402
- {
403
- //Insert anyway
404
- _insert_unsorted(hashkey,value);
405
- return GIM_INVALID_HASH;
406
- }
407
-
408
- GUINT cell_index = _assign_hash_table_cell(hashkey);
409
-
410
- GUINT value_key = m_hash_table[cell_index];
411
-
412
- if(value_key!= GIM_INVALID_HASH) return value_key;// Not overrited
413
-
414
- m_hash_table[cell_index] = m_nodes.size();
415
-
416
- _insert_unsorted(hashkey,value);
417
- return GIM_INVALID_HASH;
418
- }
419
-
420
- //! insert an element in hash table.
421
- /*!
422
- If the element exists, this replaces the element.
423
- \return the index in the array of the existing element,or GIM_INVALID_HASH if the element has been inserted
424
- If so, the element has been inserted at the last position of the array.
425
- */
426
- inline GUINT _insert_hash_table_replace(GUINT hashkey, const T & value)
427
- {
428
- if(hashkey==GIM_INVALID_HASH)
429
- {
430
- //Insert anyway
431
- _insert_unsorted(hashkey,value);
432
- return GIM_INVALID_HASH;
433
- }
434
-
435
- GUINT cell_index = _assign_hash_table_cell(hashkey);
436
-
437
- GUINT value_key = m_hash_table[cell_index];
438
-
439
- if(value_key!= GIM_INVALID_HASH)
440
- {//replaces the existing
441
- m_nodes[value_key] = _node_type(hashkey,value);
442
- return value_key;// index of the replaced element
443
- }
444
-
445
- m_hash_table[cell_index] = m_nodes.size();
446
-
447
- _insert_unsorted(hashkey,value);
448
- return GIM_INVALID_HASH;
449
-
450
- }
451
-
452
-
453
- ///Sorted array data management. The hash table has the indices to the corresponding m_nodes array
454
- inline bool _erase_sorted(GUINT index)
455
- {
456
- if(index>=(GUINT)m_nodes.size()) return false;
457
- m_nodes.erase_sorted(index);
458
- if(m_nodes.size()<2) m_sorted = false;
459
- return true;
460
- }
461
-
462
- //! faster, but unsorted
463
- inline bool _erase_unsorted(GUINT index)
464
- {
465
- if(index>=m_nodes.size()) return false;
466
-
467
- GUINT lastindex = m_nodes.size()-1;
468
- if(index<lastindex && m_hash_table!=0)
469
- {
470
- GUINT hashkey = m_nodes[lastindex].m_key;
471
- if(hashkey!=GIM_INVALID_HASH)
472
- {
473
- //update the new position of the last element
474
- GUINT cell_index = _find_cell(hashkey);
475
- btAssert(cell_index!=GIM_INVALID_HASH);
476
- //new position of the last element which will be swaped
477
- m_hash_table[cell_index] = index;
478
- }
479
- }
480
- m_nodes.erase(index);
481
- m_sorted = false;
482
- return true;
483
- }
484
-
485
- //! Insert in position ordered
486
- /*!
487
- Also checks if it is needed to transform this container to a hash table, by calling check_for_switching_to_hashtable
488
- */
489
- inline void _insert_in_pos(GUINT hashkey, const T & value, GUINT pos)
490
- {
491
- m_nodes.insert(_node_type(hashkey,value),pos);
492
- this->check_for_switching_to_hashtable();
493
- }
494
-
495
- //! Insert an element in an ordered array
496
- inline GUINT _insert_sorted(GUINT hashkey, const T & value)
497
- {
498
- if(hashkey==GIM_INVALID_HASH || size()==0)
499
- {
500
- m_nodes.push_back(_node_type(hashkey,value));
501
- return GIM_INVALID_HASH;
502
- }
503
- //Insert at last position
504
- //Sort element
505
-
506
-
507
- GUINT result_ind=0;
508
- GUINT last_index = m_nodes.size()-1;
509
- _node_type * ptr = m_nodes.pointer();
510
-
511
- bool found = gim_binary_search_ex(
512
- ptr,0,last_index,result_ind,hashkey,GIM_HASH_NODE_CMP_KEY_MACRO());
513
-
514
-
515
- //Insert before found index
516
- if(found)
517
- {
518
- return result_ind;
519
- }
520
- else
521
- {
522
- _insert_in_pos(hashkey, value, result_ind);
523
- }
524
- return GIM_INVALID_HASH;
525
- }
526
-
527
- inline GUINT _insert_sorted_replace(GUINT hashkey, const T & value)
528
- {
529
- if(hashkey==GIM_INVALID_HASH || size()==0)
530
- {
531
- m_nodes.push_back(_node_type(hashkey,value));
532
- return GIM_INVALID_HASH;
533
- }
534
- //Insert at last position
535
- //Sort element
536
- GUINT result_ind;
537
- GUINT last_index = m_nodes.size()-1;
538
- _node_type * ptr = m_nodes.pointer();
539
-
540
- bool found = gim_binary_search_ex(
541
- ptr,0,last_index,result_ind,hashkey,GIM_HASH_NODE_CMP_KEY_MACRO());
542
-
543
- //Insert before found index
544
- if(found)
545
- {
546
- m_nodes[result_ind] = _node_type(hashkey,value);
547
- }
548
- else
549
- {
550
- _insert_in_pos(hashkey, value, result_ind);
551
- }
552
- return result_ind;
553
- }
554
-
555
- //! Fast insertion in m_nodes array
556
- inline GUINT _insert_unsorted(GUINT hashkey, const T & value)
557
- {
558
- m_nodes.push_back(_node_type(hashkey,value));
559
- m_sorted = false;
560
- return GIM_INVALID_HASH;
561
- }
562
-
563
-
564
-
565
- public:
566
-
567
- /*!
568
- <li> if node_size = 0, then this container becomes a simple sorted array allocator. reserve_size is used for reserve memory in m_nodes.
569
- When the array size reaches the size equivalent to 'min_hash_table_size', then it becomes a hash table by calling check_for_switching_to_hashtable.
570
- <li> If node_size != 0, then this container becomes a hash table for ever
571
- </ul>
572
- */
573
- gim_hash_table(GUINT reserve_size = GIM_DEFAULT_HASH_TABLE_SIZE,
574
- GUINT node_size = GIM_DEFAULT_HASH_TABLE_NODE_SIZE,
575
- GUINT min_hash_table_size = GIM_INVALID_HASH)
576
- {
577
- m_hash_table = NULL;
578
- m_table_size = 0;
579
- m_sorted = false;
580
- m_node_size = node_size;
581
- m_min_hash_table_size = min_hash_table_size;
582
-
583
- if(m_node_size!=0)
584
- {
585
- if(reserve_size!=0)
586
- {
587
- m_nodes.reserve(reserve_size);
588
- _reserve_table_memory(reserve_size);
589
- _invalidate_keys();
590
- }
591
- else
592
- {
593
- m_nodes.reserve(GIM_DEFAULT_HASH_TABLE_SIZE);
594
- _reserve_table_memory(GIM_DEFAULT_HASH_TABLE_SIZE);
595
- _invalidate_keys();
596
- }
597
- }
598
- else if(reserve_size!=0)
599
- {
600
- m_nodes.reserve(reserve_size);
601
- }
602
-
603
- }
604
-
605
- ~gim_hash_table()
606
- {
607
- _destroy();
608
- }
609
-
610
- inline bool is_hash_table()
611
- {
612
- if(m_hash_table) return true;
613
- return false;
614
- }
615
-
616
- inline bool is_sorted()
617
- {
618
- if(size()<2) return true;
619
- return m_sorted;
620
- }
621
-
622
- bool sort()
623
- {
624
- if(is_sorted()) return true;
625
- if(m_nodes.size()<2) return false;
626
-
627
-
628
- _node_type * ptr = m_nodes.pointer();
629
- GUINT siz = m_nodes.size();
630
- gim_sort_hash_node_array(ptr,siz);
631
- m_sorted=true;
632
-
633
-
634
-
635
- if(m_hash_table)
636
- {
637
- _rehash();
638
- }
639
- return true;
640
- }
641
-
642
- bool switch_to_hashtable()
643
- {
644
- if(m_hash_table) return false;
645
- if(m_node_size==0) m_node_size = GIM_DEFAULT_HASH_TABLE_NODE_SIZE;
646
- if(m_nodes.size()<GIM_DEFAULT_HASH_TABLE_SIZE)
647
- {
648
- _resize_table(GIM_DEFAULT_HASH_TABLE_SIZE);
649
- }
650
- else
651
- {
652
- _resize_table(m_nodes.size()+1);
653
- }
654
-
655
- return true;
656
- }
657
-
658
- bool switch_to_sorted_array()
659
- {
660
- if(m_hash_table==NULL) return true;
661
- _clear_table_memory();
662
- return sort();
663
- }
664
-
665
- //!If the container reaches the
666
- bool check_for_switching_to_hashtable()
667
- {
668
- if(this->m_hash_table) return true;
669
-
670
- if(!(m_nodes.size()< m_min_hash_table_size))
671
- {
672
- if(m_node_size == 0)
673
- {
674
- m_node_size = GIM_DEFAULT_HASH_TABLE_NODE_SIZE;
675
- }
676
-
677
- _resize_table(m_nodes.size()+1);
678
- return true;
679
- }
680
- return false;
681
- }
682
-
683
- inline void set_sorted(bool value)
684
- {
685
- m_sorted = value;
686
- }
687
-
688
- //! Retrieves the amount of keys.
689
- inline GUINT size() const
690
- {
691
- return m_nodes.size();
692
- }
693
-
694
- //! Retrieves the hash key.
695
- inline GUINT get_key(GUINT index) const
696
- {
697
- return m_nodes[index].m_key;
698
- }
699
-
700
- //! Retrieves the value by index
701
- /*!
702
- */
703
- inline T * get_value_by_index(GUINT index)
704
- {
705
- return &m_nodes[index].m_data;
706
- }
707
-
708
- inline const T& operator[](GUINT index) const
709
- {
710
- return m_nodes[index].m_data;
711
- }
712
-
713
- inline T& operator[](GUINT index)
714
- {
715
- return m_nodes[index].m_data;
716
- }
717
-
718
- //! Finds the index of the element with the key
719
- /*!
720
- \return the index in the array of the existing element,or GIM_INVALID_HASH if the element has been inserted
721
- If so, the element has been inserted at the last position of the array.
722
- */
723
- inline GUINT find(GUINT hashkey)
724
- {
725
- if(m_hash_table)
726
- {
727
- GUINT cell_index = _find_cell(hashkey);
728
- if(cell_index==GIM_INVALID_HASH) return GIM_INVALID_HASH;
729
- return m_hash_table[cell_index];
730
- }
731
- GUINT last_index = m_nodes.size();
732
- if(last_index<2)
733
- {
734
- if(last_index==0) return GIM_INVALID_HASH;
735
- if(m_nodes[0].m_key == hashkey) return 0;
736
- return GIM_INVALID_HASH;
737
- }
738
- else if(m_sorted)
739
- {
740
- //Binary search
741
- GUINT result_ind = 0;
742
- last_index--;
743
- _node_type * ptr = m_nodes.pointer();
744
-
745
- bool found = gim_binary_search_ex(ptr,0,last_index,result_ind,hashkey,GIM_HASH_NODE_CMP_KEY_MACRO());
746
-
747
-
748
- if(found) return result_ind;
749
- }
750
- return GIM_INVALID_HASH;
751
- }
752
-
753
- //! Retrieves the value associated with the index
754
- /*!
755
- \return the found element, or null
756
- */
757
- inline T * get_value(GUINT hashkey)
758
- {
759
- GUINT index = find(hashkey);
760
- if(index == GIM_INVALID_HASH) return NULL;
761
- return &m_nodes[index].m_data;
762
- }
763
-
764
-
765
- /*!
766
- */
767
- inline bool erase_by_index(GUINT index)
768
- {
769
- if(index > m_nodes.size()) return false;
770
-
771
- if(m_hash_table == NULL)
772
- {
773
- if(is_sorted())
774
- {
775
- return this->_erase_sorted(index);
776
- }
777
- else
778
- {
779
- return this->_erase_unsorted(index);
780
- }
781
- }
782
- else
783
- {
784
- return this->_erase_by_index_hash_table(index);
785
- }
786
- return false;
787
- }
788
-
789
-
790
-
791
- inline bool erase_by_index_unsorted(GUINT index)
792
- {
793
- if(index > m_nodes.size()) return false;
794
-
795
- if(m_hash_table == NULL)
796
- {
797
- return this->_erase_unsorted(index);
798
- }
799
- else
800
- {
801
- return this->_erase_by_index_hash_table(index);
802
- }
803
- return false;
804
- }
805
-
806
-
807
-
808
- /*!
809
-
810
- */
811
- inline bool erase_by_key(GUINT hashkey)
812
- {
813
- if(size()==0) return false;
814
-
815
- if(m_hash_table)
816
- {
817
- return this->_erase_hash_table(hashkey);
818
- }
819
- //Binary search
820
-
821
- if(is_sorted()==false) return false;
822
-
823
- GUINT result_ind = find(hashkey);
824
- if(result_ind!= GIM_INVALID_HASH)
825
- {
826
- return this->_erase_sorted(result_ind);
827
- }
828
- return false;
829
- }
830
-
831
- void clear()
832
- {
833
- m_nodes.clear();
834
-
835
- if(m_hash_table==NULL) return;
836
- GUINT datasize = m_table_size*m_node_size;
837
- //Initialize the hashkeys.
838
- GUINT i;
839
- for(i=0;i<datasize;i++)
840
- {
841
- m_hash_table[i] = GIM_INVALID_HASH;// invalidate keys
842
- }
843
- m_sorted = false;
844
- }
845
-
846
- //! Insert an element into the hash
847
- /*!
848
- \return If GIM_INVALID_HASH, the object has been inserted succesfully. Else it returns the position
849
- of the existing element.
850
- */
851
- inline GUINT insert(GUINT hashkey, const T & element)
852
- {
853
- if(m_hash_table)
854
- {
855
- return this->_insert_hash_table(hashkey,element);
856
- }
857
- if(this->is_sorted())
858
- {
859
- return this->_insert_sorted(hashkey,element);
860
- }
861
- return this->_insert_unsorted(hashkey,element);
862
- }
863
-
864
- //! Insert an element into the hash, and could overrite an existing object with the same hash.
865
- /*!
866
- \return If GIM_INVALID_HASH, the object has been inserted succesfully. Else it returns the position
867
- of the replaced element.
868
- */
869
- inline GUINT insert_override(GUINT hashkey, const T & element)
870
- {
871
- if(m_hash_table)
872
- {
873
- return this->_insert_hash_table_replace(hashkey,element);
874
- }
875
- if(this->is_sorted())
876
- {
877
- return this->_insert_sorted_replace(hashkey,element);
878
- }
879
- this->_insert_unsorted(hashkey,element);
880
- return m_nodes.size();
881
- }
882
-
883
-
884
-
885
- //! Insert an element into the hash,But if this container is a sorted array, this inserts it unsorted
886
- /*!
887
- */
888
- inline GUINT insert_unsorted(GUINT hashkey,const T & element)
889
- {
890
- if(m_hash_table)
891
- {
892
- return this->_insert_hash_table(hashkey,element);
893
- }
894
- return this->_insert_unsorted(hashkey,element);
895
- }
896
-
897
-
898
- };
899
-
900
-
901
-
902
- #endif // GIM_CONTAINERS_H_INCLUDED