ruby-cbc 0.1.9 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (290) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  3. data/Rakefile +0 -2
  4. data/lib/ruby-cbc.rb +1 -1
  5. data/lib/ruby-cbc/problem.rb +6 -8
  6. data/lib/ruby-cbc/version.rb +1 -1
  7. data/ruby-cbc.gemspec +3 -2
  8. metadata +17 -287
  9. data/ext/ruby-cbc/cbc.i +0 -15
  10. data/ext/ruby-cbc/cbc_wrap.c +0 -4618
  11. data/ext/ruby-cbc/extconf.rb +0 -60
  12. data/ext/ruby-cbc/install/bin/cbc +0 -0
  13. data/ext/ruby-cbc/install/bin/clp +0 -0
  14. data/ext/ruby-cbc/install/include/coin/CbcBranchActual.hpp +0 -24
  15. data/ext/ruby-cbc/install/include/coin/CbcBranchAllDifferent.hpp +0 -62
  16. data/ext/ruby-cbc/install/include/coin/CbcBranchBase.hpp +0 -78
  17. data/ext/ruby-cbc/install/include/coin/CbcBranchCut.hpp +0 -183
  18. data/ext/ruby-cbc/install/include/coin/CbcBranchDecision.hpp +0 -129
  19. data/ext/ruby-cbc/install/include/coin/CbcBranchDefaultDecision.hpp +0 -100
  20. data/ext/ruby-cbc/install/include/coin/CbcBranchDynamic.hpp +0 -206
  21. data/ext/ruby-cbc/install/include/coin/CbcBranchLotsize.hpp +0 -242
  22. data/ext/ruby-cbc/install/include/coin/CbcBranchToFixLots.hpp +0 -94
  23. data/ext/ruby-cbc/install/include/coin/CbcBranchingObject.hpp +0 -236
  24. data/ext/ruby-cbc/install/include/coin/CbcClique.hpp +0 -303
  25. data/ext/ruby-cbc/install/include/coin/CbcCompare.hpp +0 -39
  26. data/ext/ruby-cbc/install/include/coin/CbcCompareActual.hpp +0 -14
  27. data/ext/ruby-cbc/install/include/coin/CbcCompareBase.hpp +0 -142
  28. data/ext/ruby-cbc/install/include/coin/CbcCompareDefault.hpp +0 -120
  29. data/ext/ruby-cbc/install/include/coin/CbcCompareDepth.hpp +0 -47
  30. data/ext/ruby-cbc/install/include/coin/CbcCompareEstimate.hpp +0 -48
  31. data/ext/ruby-cbc/install/include/coin/CbcCompareObjective.hpp +0 -49
  32. data/ext/ruby-cbc/install/include/coin/CbcConfig.h +0 -14
  33. data/ext/ruby-cbc/install/include/coin/CbcConsequence.hpp +0 -49
  34. data/ext/ruby-cbc/install/include/coin/CbcCountRowCut.hpp +0 -168
  35. data/ext/ruby-cbc/install/include/coin/CbcCutGenerator.hpp +0 -482
  36. data/ext/ruby-cbc/install/include/coin/CbcCutModifier.hpp +0 -57
  37. data/ext/ruby-cbc/install/include/coin/CbcCutSubsetModifier.hpp +0 -66
  38. data/ext/ruby-cbc/install/include/coin/CbcDummyBranchingObject.hpp +0 -83
  39. data/ext/ruby-cbc/install/include/coin/CbcEventHandler.hpp +0 -245
  40. data/ext/ruby-cbc/install/include/coin/CbcFathom.hpp +0 -137
  41. data/ext/ruby-cbc/install/include/coin/CbcFathomDynamicProgramming.hpp +0 -169
  42. data/ext/ruby-cbc/install/include/coin/CbcFeasibilityBase.hpp +0 -56
  43. data/ext/ruby-cbc/install/include/coin/CbcFixVariable.hpp +0 -67
  44. data/ext/ruby-cbc/install/include/coin/CbcFollowOn.hpp +0 -207
  45. data/ext/ruby-cbc/install/include/coin/CbcFullNodeInfo.hpp +0 -161
  46. data/ext/ruby-cbc/install/include/coin/CbcGeneral.hpp +0 -60
  47. data/ext/ruby-cbc/install/include/coin/CbcGeneralDepth.hpp +0 -279
  48. data/ext/ruby-cbc/install/include/coin/CbcHeuristic.hpp +0 -682
  49. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDINS.hpp +0 -96
  50. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDW.hpp +0 -309
  51. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDive.hpp +0 -192
  52. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveCoefficient.hpp +0 -52
  53. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveFractional.hpp +0 -52
  54. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveGuided.hpp +0 -55
  55. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveLineSearch.hpp +0 -52
  56. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDivePseudoCost.hpp +0 -60
  57. data/ext/ruby-cbc/install/include/coin/CbcHeuristicDiveVectorLength.hpp +0 -52
  58. data/ext/ruby-cbc/install/include/coin/CbcHeuristicFPump.hpp +0 -340
  59. data/ext/ruby-cbc/install/include/coin/CbcHeuristicGreedy.hpp +0 -280
  60. data/ext/ruby-cbc/install/include/coin/CbcHeuristicLocal.hpp +0 -271
  61. data/ext/ruby-cbc/install/include/coin/CbcHeuristicPivotAndFix.hpp +0 -58
  62. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRENS.hpp +0 -77
  63. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRINS.hpp +0 -102
  64. data/ext/ruby-cbc/install/include/coin/CbcHeuristicRandRound.hpp +0 -58
  65. data/ext/ruby-cbc/install/include/coin/CbcHeuristicVND.hpp +0 -94
  66. data/ext/ruby-cbc/install/include/coin/CbcLinked.hpp +0 -1406
  67. data/ext/ruby-cbc/install/include/coin/CbcMessage.hpp +0 -94
  68. data/ext/ruby-cbc/install/include/coin/CbcMipStartIO.hpp +0 -26
  69. data/ext/ruby-cbc/install/include/coin/CbcModel.hpp +0 -2952
  70. data/ext/ruby-cbc/install/include/coin/CbcNWay.hpp +0 -166
  71. data/ext/ruby-cbc/install/include/coin/CbcNode.hpp +0 -351
  72. data/ext/ruby-cbc/install/include/coin/CbcNodeInfo.hpp +0 -349
  73. data/ext/ruby-cbc/install/include/coin/CbcObject.hpp +0 -272
  74. data/ext/ruby-cbc/install/include/coin/CbcObjectUpdateData.hpp +0 -64
  75. data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.cpp +0 -4134
  76. data/ext/ruby-cbc/install/include/coin/CbcOrClpParam.hpp +0 -532
  77. data/ext/ruby-cbc/install/include/coin/CbcParam.hpp +0 -324
  78. data/ext/ruby-cbc/install/include/coin/CbcPartialNodeInfo.hpp +0 -110
  79. data/ext/ruby-cbc/install/include/coin/CbcSOS.hpp +0 -279
  80. data/ext/ruby-cbc/install/include/coin/CbcSimpleInteger.hpp +0 -286
  81. data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerDynamicPseudoCost.hpp +0 -564
  82. data/ext/ruby-cbc/install/include/coin/CbcSimpleIntegerPseudoCost.hpp +0 -114
  83. data/ext/ruby-cbc/install/include/coin/CbcSolver.hpp +0 -447
  84. data/ext/ruby-cbc/install/include/coin/CbcStrategy.hpp +0 -258
  85. data/ext/ruby-cbc/install/include/coin/CbcSubProblem.hpp +0 -83
  86. data/ext/ruby-cbc/install/include/coin/CbcTree.hpp +0 -490
  87. data/ext/ruby-cbc/install/include/coin/CbcTreeLocal.hpp +0 -372
  88. data/ext/ruby-cbc/install/include/coin/Cbc_C_Interface.h +0 -381
  89. data/ext/ruby-cbc/install/include/coin/Cgl012cut.hpp +0 -464
  90. data/ext/ruby-cbc/install/include/coin/CglAllDifferent.hpp +0 -115
  91. data/ext/ruby-cbc/install/include/coin/CglClique.hpp +0 -308
  92. data/ext/ruby-cbc/install/include/coin/CglConfig.h +0 -19
  93. data/ext/ruby-cbc/install/include/coin/CglCutGenerator.hpp +0 -121
  94. data/ext/ruby-cbc/install/include/coin/CglDuplicateRow.hpp +0 -189
  95. data/ext/ruby-cbc/install/include/coin/CglFlowCover.hpp +0 -371
  96. data/ext/ruby-cbc/install/include/coin/CglGMI.hpp +0 -364
  97. data/ext/ruby-cbc/install/include/coin/CglGMIParam.hpp +0 -313
  98. data/ext/ruby-cbc/install/include/coin/CglGomory.hpp +0 -204
  99. data/ext/ruby-cbc/install/include/coin/CglKnapsackCover.hpp +0 -310
  100. data/ext/ruby-cbc/install/include/coin/CglLandP.hpp +0 -306
  101. data/ext/ruby-cbc/install/include/coin/CglLandPValidator.hpp +0 -130
  102. data/ext/ruby-cbc/install/include/coin/CglLiftAndProject.hpp +0 -104
  103. data/ext/ruby-cbc/install/include/coin/CglMessage.hpp +0 -50
  104. data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding.hpp +0 -429
  105. data/ext/ruby-cbc/install/include/coin/CglMixedIntegerRounding2.hpp +0 -427
  106. data/ext/ruby-cbc/install/include/coin/CglOddHole.hpp +0 -160
  107. data/ext/ruby-cbc/install/include/coin/CglParam.hpp +0 -93
  108. data/ext/ruby-cbc/install/include/coin/CglPreProcess.hpp +0 -492
  109. data/ext/ruby-cbc/install/include/coin/CglProbing.hpp +0 -543
  110. data/ext/ruby-cbc/install/include/coin/CglRedSplit.hpp +0 -448
  111. data/ext/ruby-cbc/install/include/coin/CglRedSplit2.hpp +0 -494
  112. data/ext/ruby-cbc/install/include/coin/CglRedSplit2Param.hpp +0 -495
  113. data/ext/ruby-cbc/install/include/coin/CglRedSplitParam.hpp +0 -272
  114. data/ext/ruby-cbc/install/include/coin/CglResidualCapacity.hpp +0 -240
  115. data/ext/ruby-cbc/install/include/coin/CglSimpleRounding.hpp +0 -174
  116. data/ext/ruby-cbc/install/include/coin/CglStored.hpp +0 -125
  117. data/ext/ruby-cbc/install/include/coin/CglTreeInfo.hpp +0 -180
  118. data/ext/ruby-cbc/install/include/coin/CglTwomir.hpp +0 -565
  119. data/ext/ruby-cbc/install/include/coin/CglZeroHalf.hpp +0 -133
  120. data/ext/ruby-cbc/install/include/coin/ClpAmplObjective.hpp +0 -113
  121. data/ext/ruby-cbc/install/include/coin/ClpCholeskyBase.hpp +0 -294
  122. data/ext/ruby-cbc/install/include/coin/ClpCholeskyDense.hpp +0 -162
  123. data/ext/ruby-cbc/install/include/coin/ClpConfig.h +0 -17
  124. data/ext/ruby-cbc/install/include/coin/ClpConstraint.hpp +0 -125
  125. data/ext/ruby-cbc/install/include/coin/ClpConstraintAmpl.hpp +0 -108
  126. data/ext/ruby-cbc/install/include/coin/ClpConstraintLinear.hpp +0 -110
  127. data/ext/ruby-cbc/install/include/coin/ClpConstraintQuadratic.hpp +0 -119
  128. data/ext/ruby-cbc/install/include/coin/ClpDualRowDantzig.hpp +0 -71
  129. data/ext/ruby-cbc/install/include/coin/ClpDualRowPivot.hpp +0 -129
  130. data/ext/ruby-cbc/install/include/coin/ClpDualRowSteepest.hpp +0 -153
  131. data/ext/ruby-cbc/install/include/coin/ClpDummyMatrix.hpp +0 -183
  132. data/ext/ruby-cbc/install/include/coin/ClpDynamicExampleMatrix.hpp +0 -186
  133. data/ext/ruby-cbc/install/include/coin/ClpDynamicMatrix.hpp +0 -381
  134. data/ext/ruby-cbc/install/include/coin/ClpEventHandler.hpp +0 -187
  135. data/ext/ruby-cbc/install/include/coin/ClpFactorization.hpp +0 -432
  136. data/ext/ruby-cbc/install/include/coin/ClpGubDynamicMatrix.hpp +0 -247
  137. data/ext/ruby-cbc/install/include/coin/ClpGubMatrix.hpp +0 -358
  138. data/ext/ruby-cbc/install/include/coin/ClpInterior.hpp +0 -570
  139. data/ext/ruby-cbc/install/include/coin/ClpLinearObjective.hpp +0 -103
  140. data/ext/ruby-cbc/install/include/coin/ClpMatrixBase.hpp +0 -524
  141. data/ext/ruby-cbc/install/include/coin/ClpMessage.hpp +0 -131
  142. data/ext/ruby-cbc/install/include/coin/ClpModel.hpp +0 -1307
  143. data/ext/ruby-cbc/install/include/coin/ClpNetworkMatrix.hpp +0 -229
  144. data/ext/ruby-cbc/install/include/coin/ClpNode.hpp +0 -349
  145. data/ext/ruby-cbc/install/include/coin/ClpNonLinearCost.hpp +0 -401
  146. data/ext/ruby-cbc/install/include/coin/ClpObjective.hpp +0 -134
  147. data/ext/ruby-cbc/install/include/coin/ClpPackedMatrix.hpp +0 -638
  148. data/ext/ruby-cbc/install/include/coin/ClpParameters.hpp +0 -126
  149. data/ext/ruby-cbc/install/include/coin/ClpPdcoBase.hpp +0 -103
  150. data/ext/ruby-cbc/install/include/coin/ClpPlusMinusOneMatrix.hpp +0 -290
  151. data/ext/ruby-cbc/install/include/coin/ClpPresolve.hpp +0 -299
  152. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnDantzig.hpp +0 -72
  153. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnPivot.hpp +0 -155
  154. data/ext/ruby-cbc/install/include/coin/ClpPrimalColumnSteepest.hpp +0 -247
  155. data/ext/ruby-cbc/install/include/coin/ClpQuadraticObjective.hpp +0 -155
  156. data/ext/ruby-cbc/install/include/coin/ClpSimplex.hpp +0 -1797
  157. data/ext/ruby-cbc/install/include/coin/ClpSimplexDual.hpp +0 -300
  158. data/ext/ruby-cbc/install/include/coin/ClpSimplexNonlinear.hpp +0 -117
  159. data/ext/ruby-cbc/install/include/coin/ClpSimplexOther.hpp +0 -277
  160. data/ext/ruby-cbc/install/include/coin/ClpSimplexPrimal.hpp +0 -244
  161. data/ext/ruby-cbc/install/include/coin/ClpSolve.hpp +0 -446
  162. data/ext/ruby-cbc/install/include/coin/Clp_C_Interface.h +0 -525
  163. data/ext/ruby-cbc/install/include/coin/CoinAlloc.hpp +0 -176
  164. data/ext/ruby-cbc/install/include/coin/CoinBuild.hpp +0 -149
  165. data/ext/ruby-cbc/install/include/coin/CoinDenseFactorization.hpp +0 -419
  166. data/ext/ruby-cbc/install/include/coin/CoinDenseVector.hpp +0 -383
  167. data/ext/ruby-cbc/install/include/coin/CoinDistance.hpp +0 -48
  168. data/ext/ruby-cbc/install/include/coin/CoinError.hpp +0 -257
  169. data/ext/ruby-cbc/install/include/coin/CoinFactorization.hpp +0 -2044
  170. data/ext/ruby-cbc/install/include/coin/CoinFileIO.hpp +0 -166
  171. data/ext/ruby-cbc/install/include/coin/CoinFinite.hpp +0 -34
  172. data/ext/ruby-cbc/install/include/coin/CoinFloatEqual.hpp +0 -177
  173. data/ext/ruby-cbc/install/include/coin/CoinHelperFunctions.hpp +0 -1111
  174. data/ext/ruby-cbc/install/include/coin/CoinIndexedVector.hpp +0 -1164
  175. data/ext/ruby-cbc/install/include/coin/CoinLpIO.hpp +0 -805
  176. data/ext/ruby-cbc/install/include/coin/CoinMessage.hpp +0 -96
  177. data/ext/ruby-cbc/install/include/coin/CoinMessageHandler.hpp +0 -666
  178. data/ext/ruby-cbc/install/include/coin/CoinModel.hpp +0 -1054
  179. data/ext/ruby-cbc/install/include/coin/CoinModelUseful.hpp +0 -441
  180. data/ext/ruby-cbc/install/include/coin/CoinMpsIO.hpp +0 -1056
  181. data/ext/ruby-cbc/install/include/coin/CoinOslFactorization.hpp +0 -280
  182. data/ext/ruby-cbc/install/include/coin/CoinPackedMatrix.hpp +0 -947
  183. data/ext/ruby-cbc/install/include/coin/CoinPackedVector.hpp +0 -657
  184. data/ext/ruby-cbc/install/include/coin/CoinPackedVectorBase.hpp +0 -269
  185. data/ext/ruby-cbc/install/include/coin/CoinParam.hpp +0 -644
  186. data/ext/ruby-cbc/install/include/coin/CoinPragma.hpp +0 -26
  187. data/ext/ruby-cbc/install/include/coin/CoinPresolveDoubleton.hpp +0 -73
  188. data/ext/ruby-cbc/install/include/coin/CoinPresolveDual.hpp +0 -85
  189. data/ext/ruby-cbc/install/include/coin/CoinPresolveDupcol.hpp +0 -226
  190. data/ext/ruby-cbc/install/include/coin/CoinPresolveEmpty.hpp +0 -116
  191. data/ext/ruby-cbc/install/include/coin/CoinPresolveFixed.hpp +0 -181
  192. data/ext/ruby-cbc/install/include/coin/CoinPresolveForcing.hpp +0 -61
  193. data/ext/ruby-cbc/install/include/coin/CoinPresolveImpliedFree.hpp +0 -60
  194. data/ext/ruby-cbc/install/include/coin/CoinPresolveIsolated.hpp +0 -51
  195. data/ext/ruby-cbc/install/include/coin/CoinPresolveMatrix.hpp +0 -1842
  196. data/ext/ruby-cbc/install/include/coin/CoinPresolveMonitor.hpp +0 -105
  197. data/ext/ruby-cbc/install/include/coin/CoinPresolvePsdebug.hpp +0 -166
  198. data/ext/ruby-cbc/install/include/coin/CoinPresolveSingleton.hpp +0 -112
  199. data/ext/ruby-cbc/install/include/coin/CoinPresolveSubst.hpp +0 -101
  200. data/ext/ruby-cbc/install/include/coin/CoinPresolveTighten.hpp +0 -55
  201. data/ext/ruby-cbc/install/include/coin/CoinPresolveTripleton.hpp +0 -66
  202. data/ext/ruby-cbc/install/include/coin/CoinPresolveUseless.hpp +0 -63
  203. data/ext/ruby-cbc/install/include/coin/CoinPresolveZeros.hpp +0 -60
  204. data/ext/ruby-cbc/install/include/coin/CoinRational.hpp +0 -44
  205. data/ext/ruby-cbc/install/include/coin/CoinSearchTree.hpp +0 -465
  206. data/ext/ruby-cbc/install/include/coin/CoinShallowPackedVector.hpp +0 -148
  207. data/ext/ruby-cbc/install/include/coin/CoinSignal.hpp +0 -117
  208. data/ext/ruby-cbc/install/include/coin/CoinSimpFactorization.hpp +0 -431
  209. data/ext/ruby-cbc/install/include/coin/CoinSmartPtr.hpp +0 -528
  210. data/ext/ruby-cbc/install/include/coin/CoinSnapshot.hpp +0 -476
  211. data/ext/ruby-cbc/install/include/coin/CoinSort.hpp +0 -678
  212. data/ext/ruby-cbc/install/include/coin/CoinStructuredModel.hpp +0 -247
  213. data/ext/ruby-cbc/install/include/coin/CoinTime.hpp +0 -310
  214. data/ext/ruby-cbc/install/include/coin/CoinTypes.hpp +0 -64
  215. data/ext/ruby-cbc/install/include/coin/CoinUtility.hpp +0 -19
  216. data/ext/ruby-cbc/install/include/coin/CoinUtilsConfig.h +0 -34
  217. data/ext/ruby-cbc/install/include/coin/CoinWarmStart.hpp +0 -58
  218. data/ext/ruby-cbc/install/include/coin/CoinWarmStartBasis.hpp +0 -456
  219. data/ext/ruby-cbc/install/include/coin/CoinWarmStartDual.hpp +0 -166
  220. data/ext/ruby-cbc/install/include/coin/CoinWarmStartPrimalDual.hpp +0 -211
  221. data/ext/ruby-cbc/install/include/coin/CoinWarmStartVector.hpp +0 -488
  222. data/ext/ruby-cbc/install/include/coin/Coin_C_defines.h +0 -115
  223. data/ext/ruby-cbc/install/include/coin/Idiot.hpp +0 -298
  224. data/ext/ruby-cbc/install/include/coin/OsiAuxInfo.hpp +0 -206
  225. data/ext/ruby-cbc/install/include/coin/OsiBranchingObject.hpp +0 -1005
  226. data/ext/ruby-cbc/install/include/coin/OsiCbcSolverInterface.hpp +0 -764
  227. data/ext/ruby-cbc/install/include/coin/OsiChooseVariable.hpp +0 -534
  228. data/ext/ruby-cbc/install/include/coin/OsiClpSolverInterface.hpp +0 -1509
  229. data/ext/ruby-cbc/install/include/coin/OsiColCut.hpp +0 -324
  230. data/ext/ruby-cbc/install/include/coin/OsiCollections.hpp +0 -35
  231. data/ext/ruby-cbc/install/include/coin/OsiConfig.h +0 -19
  232. data/ext/ruby-cbc/install/include/coin/OsiCut.hpp +0 -245
  233. data/ext/ruby-cbc/install/include/coin/OsiCuts.hpp +0 -474
  234. data/ext/ruby-cbc/install/include/coin/OsiPresolve.hpp +0 -252
  235. data/ext/ruby-cbc/install/include/coin/OsiRowCut.hpp +0 -331
  236. data/ext/ruby-cbc/install/include/coin/OsiRowCutDebugger.hpp +0 -187
  237. data/ext/ruby-cbc/install/include/coin/OsiSolverBranch.hpp +0 -152
  238. data/ext/ruby-cbc/install/include/coin/OsiSolverInterface.hpp +0 -2143
  239. data/ext/ruby-cbc/install/include/coin/OsiSolverParameters.hpp +0 -142
  240. data/ext/ruby-cbc/install/include/coin/OsiUnitTests.hpp +0 -374
  241. data/ext/ruby-cbc/install/lib/libCbc.la +0 -35
  242. data/ext/ruby-cbc/install/lib/libCbc.so +0 -0
  243. data/ext/ruby-cbc/install/lib/libCbc.so.3 +0 -0
  244. data/ext/ruby-cbc/install/lib/libCbc.so.3.9.7 +0 -0
  245. data/ext/ruby-cbc/install/lib/libCbcSolver.la +0 -35
  246. data/ext/ruby-cbc/install/lib/libCbcSolver.so +0 -0
  247. data/ext/ruby-cbc/install/lib/libCbcSolver.so.3 +0 -0
  248. data/ext/ruby-cbc/install/lib/libCbcSolver.so.3.9.7 +0 -0
  249. data/ext/ruby-cbc/install/lib/libCgl.la +0 -35
  250. data/ext/ruby-cbc/install/lib/libCgl.so +0 -0
  251. data/ext/ruby-cbc/install/lib/libCgl.so.1 +0 -0
  252. data/ext/ruby-cbc/install/lib/libCgl.so.1.9.7 +0 -0
  253. data/ext/ruby-cbc/install/lib/libClp.la +0 -35
  254. data/ext/ruby-cbc/install/lib/libClp.so +0 -0
  255. data/ext/ruby-cbc/install/lib/libClp.so.1 +0 -0
  256. data/ext/ruby-cbc/install/lib/libClp.so.1.13.9 +0 -0
  257. data/ext/ruby-cbc/install/lib/libClpSolver.la +0 -35
  258. data/ext/ruby-cbc/install/lib/libClpSolver.so +0 -0
  259. data/ext/ruby-cbc/install/lib/libClpSolver.so.1 +0 -0
  260. data/ext/ruby-cbc/install/lib/libClpSolver.so.1.13.9 +0 -0
  261. data/ext/ruby-cbc/install/lib/libCoinUtils.la +0 -35
  262. data/ext/ruby-cbc/install/lib/libCoinUtils.so +0 -0
  263. data/ext/ruby-cbc/install/lib/libCoinUtils.so.3 +0 -0
  264. data/ext/ruby-cbc/install/lib/libCoinUtils.so.3.10.11 +0 -0
  265. data/ext/ruby-cbc/install/lib/libOsi.la +0 -35
  266. data/ext/ruby-cbc/install/lib/libOsi.so +0 -0
  267. data/ext/ruby-cbc/install/lib/libOsi.so.1 +0 -0
  268. data/ext/ruby-cbc/install/lib/libOsi.so.1.12.6 +0 -0
  269. data/ext/ruby-cbc/install/lib/libOsiCbc.la +0 -35
  270. data/ext/ruby-cbc/install/lib/libOsiCbc.so +0 -0
  271. data/ext/ruby-cbc/install/lib/libOsiCbc.so.3 +0 -0
  272. data/ext/ruby-cbc/install/lib/libOsiCbc.so.3.9.7 +0 -0
  273. data/ext/ruby-cbc/install/lib/libOsiClp.la +0 -35
  274. data/ext/ruby-cbc/install/lib/libOsiClp.so +0 -0
  275. data/ext/ruby-cbc/install/lib/libOsiClp.so.1 +0 -0
  276. data/ext/ruby-cbc/install/lib/libOsiClp.so.1.13.9 +0 -0
  277. data/ext/ruby-cbc/install/lib/libOsiCommonTests.la +0 -35
  278. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so +0 -0
  279. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1 +0 -0
  280. data/ext/ruby-cbc/install/lib/libOsiCommonTests.so.1.12.6 +0 -0
  281. data/ext/ruby-cbc/install/lib/pkgconfig/cbc.pc +0 -12
  282. data/ext/ruby-cbc/install/lib/pkgconfig/cgl.pc +0 -12
  283. data/ext/ruby-cbc/install/lib/pkgconfig/clp.pc +0 -12
  284. data/ext/ruby-cbc/install/lib/pkgconfig/coindatamiplib3.pc +0 -9
  285. data/ext/ruby-cbc/install/lib/pkgconfig/coindatasample.pc +0 -9
  286. data/ext/ruby-cbc/install/lib/pkgconfig/coinutils.pc +0 -12
  287. data/ext/ruby-cbc/install/lib/pkgconfig/osi-cbc.pc +0 -12
  288. data/ext/ruby-cbc/install/lib/pkgconfig/osi-clp.pc +0 -12
  289. data/ext/ruby-cbc/install/lib/pkgconfig/osi-unittests.pc +0 -12
  290. data/ext/ruby-cbc/install/lib/pkgconfig/osi.pc +0 -12
@@ -1,166 +0,0 @@
1
- /* $Id: CoinFileIO.hpp 1439 2011-06-13 16:31:21Z stefan $ */
2
- // Copyright (C) 2005, COIN-OR. All Rights Reserved.
3
- // This code is licensed under the terms of the Eclipse Public License (EPL).
4
-
5
- #ifndef CoinFileIO_H
6
- #define CoinFileIO_H
7
-
8
- #include <string>
9
-
10
- /// Base class for FileIO classes.
11
- class CoinFileIOBase
12
- {
13
- public:
14
- /// Constructor.
15
- /// @param fileName The name of the file used by this object.
16
- CoinFileIOBase (const std::string &fileName);
17
-
18
- /// Destructor.
19
- ~CoinFileIOBase ();
20
-
21
- /// Return the name of the file used by this object.
22
- const char *getFileName () const;
23
-
24
- /// Return the method of reading being used
25
- inline std::string getReadType () const
26
- { return readType_.c_str();}
27
- protected:
28
- std::string readType_;
29
- private:
30
- CoinFileIOBase ();
31
- CoinFileIOBase (const CoinFileIOBase &);
32
-
33
- std::string fileName_;
34
- };
35
-
36
- /// Abstract base class for file input classes.
37
- class CoinFileInput: public CoinFileIOBase
38
- {
39
- public:
40
- /// indicates whether CoinFileInput supports gzip'ed files
41
- static bool haveGzipSupport();
42
- /// indicates whether CoinFileInput supports bzip2'ed files
43
- static bool haveBzip2Support();
44
-
45
- /// Factory method, that creates a CoinFileInput (more precisely
46
- /// a subclass of it) for the file specified. This method reads the
47
- /// first few bytes of the file and determines if this is a compressed
48
- /// or a plain file and returns the correct subclass to handle it.
49
- /// If the file does not exist or uses a compression not compiled in
50
- /// an exception is thrown.
51
- /// @param fileName The file that should be read.
52
- static CoinFileInput *create (const std::string &fileName);
53
-
54
- /// Constructor (don't use this, use the create method instead).
55
- /// @param fileName The name of the file used by this object.
56
- CoinFileInput (const std::string &fileName);
57
-
58
- /// Destructor.
59
- virtual ~CoinFileInput ();
60
-
61
- /// Read a block of data from the file, similar to fread.
62
- /// @param buffer Address of a buffer to store the data into.
63
- /// @param size Number of bytes to read (buffer should be large enough).
64
- /// @return Number of bytes read.
65
- virtual int read (void *buffer, int size) = 0;
66
-
67
- /// Reads up to (size-1) characters an stores them into the buffer,
68
- /// similar to fgets.
69
- /// Reading ends, when EOF or a newline occurs or (size-1) characters have
70
- /// been read. The resulting string is terminated with '\0'. If reading
71
- /// ends due to an encoutered newline, the '\n' is put into the buffer,
72
- /// before the '\0' is appended.
73
- /// @param buffer The buffer to put the string into.
74
- /// @param size The size of the buffer in characters.
75
- /// @return buffer on success, or 0 if no characters have been read.
76
- virtual char *gets (char *buffer, int size) = 0;
77
- };
78
-
79
- /// Abstract base class for file output classes.
80
- class CoinFileOutput: public CoinFileIOBase
81
- {
82
- public:
83
-
84
- /// The compression method.
85
- enum Compression {
86
- COMPRESS_NONE = 0, ///< No compression.
87
- COMPRESS_GZIP = 1, ///< gzip compression.
88
- COMPRESS_BZIP2 = 2 ///< bzip2 compression.
89
- };
90
-
91
- /// Returns whether the specified compression method is supported
92
- /// (i.e. was compiled into COIN).
93
- static bool compressionSupported (Compression compression);
94
-
95
- /// Factory method, that creates a CoinFileOutput (more precisely
96
- /// a subclass of it) for the file specified. If the compression method
97
- /// is not supported an exception is thrown (so use compressionSupported
98
- /// first, if this is a problem). The reason for not providing direct
99
- /// access to the subclasses (and using such a method instead) is that
100
- /// depending on the build configuration some of the classes are not
101
- /// available (or functional). This way we can handle all required ifdefs
102
- /// here instead of polluting other files.
103
- /// @param fileName The file that should be read.
104
- /// @param compression Compression method used.
105
- static CoinFileOutput *create (const std::string &fileName,
106
- Compression compression);
107
-
108
- /// Constructor (don't use this, use the create method instead).
109
- /// @param fileName The name of the file used by this object.
110
- CoinFileOutput (const std::string &fileName);
111
-
112
- /// Destructor.
113
- virtual ~CoinFileOutput ();
114
-
115
- /// Write a block of data to the file, similar to fwrite.
116
- /// @param buffer Address of a buffer containing the data to be written.
117
- /// @param size Number of bytes to write.
118
- /// @return Number of bytes written.
119
- virtual int write (const void * buffer, int size) = 0;
120
-
121
- /// Write a string to the file (like fputs).
122
- /// Just as with fputs no trailing newline is inserted!
123
- /// The terminating '\0' is not written to the file.
124
- /// The default implementation determines the length of the string
125
- /// and calls write on it.
126
- /// @param s The zero terminated string to be written.
127
- /// @return true on success, false on error.
128
- virtual bool puts (const char *s);
129
-
130
- /// Convenience method: just a 'puts(s.c_str())'.
131
- inline bool puts (const std::string &s)
132
- {
133
- return puts (s.c_str ());
134
- }
135
- };
136
-
137
- /*! \relates CoinFileInput
138
- \brief Test if the given string looks like an absolute file path
139
-
140
- The criteria are:
141
- - unix: string begins with `/'
142
- - windows: string begins with `\' or with `drv:' (drive specifier)
143
- */
144
- bool fileAbsPath (const std::string &path) ;
145
-
146
- /*! \relates CoinFileInput
147
- \brief Test if the file is readable, using likely versions of the file
148
- name, and return the name that worked.
149
-
150
- The file name is constructed from \p name using the following rules:
151
- <ul>
152
- <li> An absolute path is not modified.
153
- <li> If the name begins with `~', an attempt is made to replace `~'
154
- with the value of the environment variable HOME.
155
- <li> If a default prefix (\p dfltPrefix) is provided, it is
156
- prepended to the name.
157
- </ul>
158
- If the constructed file name cannot be opened, and CoinUtils was built
159
- with support for compressed files, fileCoinReadable will try any
160
- standard extensions for supported compressed files.
161
-
162
- The value returned in \p name is the file name that actually worked.
163
- */
164
- bool fileCoinReadable(std::string &name,
165
- const std::string &dfltPrefix = std::string(""));
166
- #endif
@@ -1,34 +0,0 @@
1
- /* $Id: CoinFinite.hpp 1762 2014-12-29 20:37:12Z tkr $ */
2
- // Copyright (C) 2002, International Business Machines
3
- // Corporation and others. All Rights Reserved.
4
- // This code is licensed under the terms of the Eclipse Public License (EPL).
5
-
6
- /* Defines COIN_DBL_MAX and relatives and provides CoinFinite and CoinIsnan. */
7
-
8
- #ifndef CoinFinite_H
9
- #define CoinFinite_H
10
-
11
- #include <limits>
12
-
13
- //=============================================================================
14
- // Smallest positive double value and Plus infinity (double and int)
15
-
16
- #if 1
17
- const double COIN_DBL_MIN = (std::numeric_limits<double>::min)();
18
- const double COIN_DBL_MAX = (std::numeric_limits<double>::max)();
19
- const int COIN_INT_MAX = (std::numeric_limits<int>::max)();
20
- const double COIN_INT_MAX_AS_DOUBLE = (std::numeric_limits<int>::max)();
21
- #else
22
- #define COIN_DBL_MIN (std::numeric_limits<double>::min())
23
- #define COIN_DBL_MAX (std::numeric_limits<double>::max())
24
- #define COIN_INT_MAX (std::numeric_limits<int>::max())
25
- #define COIN_INT_MAX_AS_DOUBLE (std::numeric_limits<int>::max())
26
- #endif
27
-
28
- /** checks if a double value is finite (not infinity and not NaN) */
29
- extern bool CoinFinite(double val);
30
-
31
- /** checks if a double value is not a number */
32
- extern bool CoinIsnan(double val);
33
-
34
- #endif
@@ -1,177 +0,0 @@
1
- /* $Id: CoinFloatEqual.hpp 1416 2011-04-17 09:57:29Z stefan $ */
2
- // Copyright (C) 2000, International Business Machines
3
- // Corporation and others. All Rights Reserved.
4
- // This code is licensed under the terms of the Eclipse Public License (EPL).
5
-
6
- #ifndef CoinFloatEqual_H
7
- #define CoinFloatEqual_H
8
-
9
- #include <algorithm>
10
- #include <cmath>
11
-
12
- #include "CoinFinite.hpp"
13
-
14
- /*! \file CoinFloatEqual.hpp
15
- \brief Function objects for testing equality of real numbers.
16
-
17
- Two objects are provided; one tests for equality to an absolute tolerance,
18
- one to a scaled tolerance. The tests will handle IEEE floating point, but
19
- note that infinity == infinity. Mathematicians are rolling in their graves,
20
- but this matches the behaviour for the common practice of using
21
- <code>DBL_MAX</code> (<code>numeric_limits<double>::max()</code>, or similar
22
- large finite number) as infinity.
23
-
24
- <p>
25
- Example usage:
26
- @verbatim
27
- double d1 = 3.14159 ;
28
- double d2 = d1 ;
29
- double d3 = d1+.0001 ;
30
-
31
- CoinAbsFltEq eq1 ;
32
- CoinAbsFltEq eq2(.001) ;
33
-
34
- assert( eq1(d1,d2) ) ;
35
- assert( !eq1(d1,d3) ) ;
36
- assert( eq2(d1,d3) ) ;
37
- @endverbatim
38
- CoinRelFltEq follows the same pattern. */
39
-
40
- /*! \brief Equality to an absolute tolerance
41
-
42
- Operands are considered equal if their difference is within an epsilon ;
43
- the test does not consider the relative magnitude of the operands.
44
- */
45
-
46
- class CoinAbsFltEq
47
- {
48
- public:
49
-
50
- //! Compare function
51
-
52
- inline bool operator() (const double f1, const double f2) const
53
-
54
- { if (CoinIsnan(f1) || CoinIsnan(f2)) return false ;
55
- if (f1 == f2) return true ;
56
- return (fabs(f1-f2) < epsilon_) ; }
57
-
58
- /*! \name Constructors and destructors */
59
- //@{
60
-
61
- /*! \brief Default constructor
62
-
63
- Default tolerance is 1.0e-10.
64
- */
65
-
66
- CoinAbsFltEq () : epsilon_(1.e-10) {}
67
-
68
- //! Alternate constructor with epsilon as a parameter
69
-
70
- CoinAbsFltEq (const double epsilon) : epsilon_(epsilon) {}
71
-
72
- //! Destructor
73
-
74
- virtual ~CoinAbsFltEq () {}
75
-
76
- //! Copy constructor
77
-
78
- CoinAbsFltEq (const CoinAbsFltEq& src) : epsilon_(src.epsilon_) {}
79
-
80
- //! Assignment
81
-
82
- CoinAbsFltEq& operator= (const CoinAbsFltEq& rhs)
83
-
84
- { if (this != &rhs) epsilon_ = rhs.epsilon_ ;
85
- return (*this) ; }
86
-
87
- //@}
88
-
89
- private:
90
-
91
- /*! \name Private member data */
92
- //@{
93
-
94
- //! Equality tolerance.
95
-
96
- double epsilon_ ;
97
-
98
- //@}
99
-
100
- } ;
101
-
102
-
103
-
104
- /*! \brief Equality to a scaled tolerance
105
-
106
- Operands are considered equal if their difference is within a scaled
107
- epsilon calculated as epsilon_*(1+CoinMax(|f1|,|f2|)).
108
- */
109
-
110
- class CoinRelFltEq
111
- {
112
- public:
113
-
114
- //! Compare function
115
-
116
- inline bool operator() (const double f1, const double f2) const
117
-
118
- { if (CoinIsnan(f1) || CoinIsnan(f2)) return false ;
119
- if (f1 == f2) return true ;
120
- if (!CoinFinite(f1) || !CoinFinite(f2)) return false ;
121
-
122
- double tol = (fabs(f1)>fabs(f2))?fabs(f1):fabs(f2) ;
123
-
124
- return (fabs(f1-f2) <= epsilon_*(1+tol)) ; }
125
-
126
- /*! \name Constructors and destructors */
127
- //@{
128
-
129
- #ifndef COIN_FLOAT
130
- /*! Default constructor
131
-
132
- Default tolerance is 1.0e-10.
133
- */
134
- CoinRelFltEq () : epsilon_(1.e-10) {}
135
- #else
136
- /*! Default constructor
137
-
138
- Default tolerance is 1.0e-6.
139
- */
140
- CoinRelFltEq () : epsilon_(1.e-6) {} ; // as float
141
- #endif
142
-
143
- //! Alternate constructor with epsilon as a parameter
144
-
145
- CoinRelFltEq (const double epsilon) : epsilon_(epsilon) {}
146
-
147
- //! Destructor
148
-
149
- virtual ~CoinRelFltEq () {}
150
-
151
- //! Copy constructor
152
-
153
- CoinRelFltEq (const CoinRelFltEq & src) : epsilon_(src.epsilon_) {}
154
-
155
- //! Assignment
156
-
157
- CoinRelFltEq& operator= (const CoinRelFltEq& rhs)
158
-
159
- { if (this != &rhs) epsilon_ = rhs.epsilon_ ;
160
- return (*this) ; }
161
-
162
- //@}
163
-
164
- private:
165
-
166
- /*! \name Private member data */
167
- //@{
168
-
169
- //! Base equality tolerance
170
-
171
- double epsilon_ ;
172
-
173
- //@}
174
-
175
- } ;
176
-
177
- #endif
@@ -1,1111 +0,0 @@
1
- /* $Id: CoinHelperFunctions.hpp 1679 2013-12-05 11:27:45Z forrest $ */
2
- // Copyright (C) 2000, International Business Machines
3
- // Corporation and others. All Rights Reserved.
4
- // This code is licensed under the terms of the Eclipse Public License (EPL).
5
-
6
- #ifndef CoinHelperFunctions_H
7
- #define CoinHelperFunctions_H
8
-
9
- #include "CoinUtilsConfig.h"
10
-
11
- #if defined(_MSC_VER)
12
- # include <direct.h>
13
- # include <cctype>
14
- # define getcwd _getcwd
15
- # include <cctype>
16
- #else
17
- # include <unistd.h>
18
- #endif
19
- //#define USE_MEMCPY
20
-
21
- #include <cstdlib>
22
- #include <cstdio>
23
- #include <algorithm>
24
- #include "CoinTypes.hpp"
25
- #include "CoinError.hpp"
26
-
27
- // Compilers can produce better code if they know about __restrict
28
- #ifndef COIN_RESTRICT
29
- #ifdef COIN_USE_RESTRICT
30
- #define COIN_RESTRICT __restrict
31
- #else
32
- #define COIN_RESTRICT
33
- #endif
34
- #endif
35
-
36
- //#############################################################################
37
-
38
- /** This helper function copies an array to another location using Duff's
39
- device (for a speedup of ~2). The arrays are given by pointers to their
40
- first entries and by the size of the source array. Overlapping arrays are
41
- handled correctly. */
42
-
43
- template <class T> inline void
44
- CoinCopyN(register const T* from, const int size, register T* to)
45
- {
46
- if (size == 0 || from == to)
47
- return;
48
-
49
- #ifndef NDEBUG
50
- if (size < 0)
51
- throw CoinError("trying to copy negative number of entries",
52
- "CoinCopyN", "");
53
- #endif
54
-
55
- register int n = (size + 7) / 8;
56
- if (to > from) {
57
- register const T* downfrom = from + size;
58
- register T* downto = to + size;
59
- // Use Duff's device to copy
60
- switch (size % 8) {
61
- case 0: do{ *--downto = *--downfrom;
62
- case 7: *--downto = *--downfrom;
63
- case 6: *--downto = *--downfrom;
64
- case 5: *--downto = *--downfrom;
65
- case 4: *--downto = *--downfrom;
66
- case 3: *--downto = *--downfrom;
67
- case 2: *--downto = *--downfrom;
68
- case 1: *--downto = *--downfrom;
69
- }while(--n>0);
70
- }
71
- } else {
72
- // Use Duff's device to copy
73
- --from;
74
- --to;
75
- switch (size % 8) {
76
- case 0: do{ *++to = *++from;
77
- case 7: *++to = *++from;
78
- case 6: *++to = *++from;
79
- case 5: *++to = *++from;
80
- case 4: *++to = *++from;
81
- case 3: *++to = *++from;
82
- case 2: *++to = *++from;
83
- case 1: *++to = *++from;
84
- }while(--n>0);
85
- }
86
- }
87
- }
88
-
89
- //-----------------------------------------------------------------------------
90
-
91
- /** This helper function copies an array to another location using Duff's
92
- device (for a speedup of ~2). The source array is given by its first and
93
- "after last" entry; the target array is given by its first entry.
94
- Overlapping arrays are handled correctly.
95
-
96
- All of the various CoinCopyN variants use an int for size. On 64-bit
97
- architectures, the address diff last-first will be a 64-bit quantity.
98
- Given that everything else uses an int, I'm going to choose to kick
99
- the difference down to int. -- lh, 100823 --
100
- */
101
- template <class T> inline void
102
- CoinCopy(register const T* first, register const T* last, register T* to)
103
- {
104
- CoinCopyN(first, static_cast<int>(last-first), to);
105
- }
106
-
107
- //-----------------------------------------------------------------------------
108
-
109
- /** This helper function copies an array to another location. The two arrays
110
- must not overlap (otherwise an exception is thrown). For speed 8 entries
111
- are copied at a time. The arrays are given by pointers to their first
112
- entries and by the size of the source array.
113
-
114
- Note JJF - the speed claim seems to be false on IA32 so I have added
115
- CoinMemcpyN which can be used for atomic data */
116
- template <class T> inline void
117
- CoinDisjointCopyN(register const T* from, const int size, register T* to)
118
- {
119
- #ifndef _MSC_VER
120
- if (size == 0 || from == to)
121
- return;
122
-
123
- #ifndef NDEBUG
124
- if (size < 0)
125
- throw CoinError("trying to copy negative number of entries",
126
- "CoinDisjointCopyN", "");
127
- #endif
128
-
129
- #if 0
130
- /* There is no point to do this test. If to and from are from different
131
- blocks then dist is undefined, so this can crash correct code. It's
132
- better to trust the user that the arrays are really disjoint. */
133
- const long dist = to - from;
134
- if (-size < dist && dist < size)
135
- throw CoinError("overlapping arrays", "CoinDisjointCopyN", "");
136
- #endif
137
-
138
- for (register int n = size / 8; n > 0; --n, from += 8, to += 8) {
139
- to[0] = from[0];
140
- to[1] = from[1];
141
- to[2] = from[2];
142
- to[3] = from[3];
143
- to[4] = from[4];
144
- to[5] = from[5];
145
- to[6] = from[6];
146
- to[7] = from[7];
147
- }
148
- switch (size % 8) {
149
- case 7: to[6] = from[6];
150
- case 6: to[5] = from[5];
151
- case 5: to[4] = from[4];
152
- case 4: to[3] = from[3];
153
- case 3: to[2] = from[2];
154
- case 2: to[1] = from[1];
155
- case 1: to[0] = from[0];
156
- case 0: break;
157
- }
158
- #else
159
- CoinCopyN(from, size, to);
160
- #endif
161
- }
162
-
163
- //-----------------------------------------------------------------------------
164
-
165
- /** This helper function copies an array to another location. The two arrays
166
- must not overlap (otherwise an exception is thrown). For speed 8 entries
167
- are copied at a time. The source array is given by its first and "after
168
- last" entry; the target array is given by its first entry. */
169
- template <class T> inline void
170
- CoinDisjointCopy(register const T* first, register const T* last,
171
- register T* to)
172
- {
173
- CoinDisjointCopyN(first, static_cast<int>(last - first), to);
174
- }
175
-
176
- //-----------------------------------------------------------------------------
177
-
178
- /*! \brief Return an array of length \p size filled with input from \p array,
179
- or null if \p array is null.
180
- */
181
-
182
- template <class T> inline T*
183
- CoinCopyOfArray( const T * array, const int size)
184
- {
185
- if (array) {
186
- T * arrayNew = new T[size];
187
- std::memcpy(arrayNew,array,size*sizeof(T));
188
- return arrayNew;
189
- } else {
190
- return NULL;
191
- }
192
- }
193
-
194
-
195
- /*! \brief Return an array of length \p size filled with first copySize from \p array,
196
- or null if \p array is null.
197
- */
198
-
199
- template <class T> inline T*
200
- CoinCopyOfArrayPartial( const T * array, const int size,const int copySize)
201
- {
202
- if (array||size) {
203
- T * arrayNew = new T[size];
204
- assert (copySize<=size);
205
- std::memcpy(arrayNew,array,copySize*sizeof(T));
206
- return arrayNew;
207
- } else {
208
- return NULL;
209
- }
210
- }
211
-
212
- /*! \brief Return an array of length \p size filled with input from \p array,
213
- or filled with (scalar) \p value if \p array is null
214
- */
215
-
216
- template <class T> inline T*
217
- CoinCopyOfArray( const T * array, const int size, T value)
218
- {
219
- T * arrayNew = new T[size];
220
- if (array) {
221
- std::memcpy(arrayNew,array,size*sizeof(T));
222
- } else {
223
- int i;
224
- for (i=0;i<size;i++)
225
- arrayNew[i] = value;
226
- }
227
- return arrayNew;
228
- }
229
-
230
-
231
- /*! \brief Return an array of length \p size filled with input from \p array,
232
- or filled with zero if \p array is null
233
- */
234
-
235
- template <class T> inline T*
236
- CoinCopyOfArrayOrZero( const T * array , const int size)
237
- {
238
- T * arrayNew = new T[size];
239
- if (array) {
240
- std::memcpy(arrayNew,array,size*sizeof(T));
241
- } else {
242
- std::memset(arrayNew,0,size*sizeof(T));
243
- }
244
- return arrayNew;
245
- }
246
-
247
-
248
- //-----------------------------------------------------------------------------
249
-
250
- /** This helper function copies an array to another location. The two arrays
251
- must not overlap (otherwise an exception is thrown). For speed 8 entries
252
- are copied at a time. The arrays are given by pointers to their first
253
- entries and by the size of the source array.
254
-
255
- Note JJF - the speed claim seems to be false on IA32 so I have added
256
- alternative coding if USE_MEMCPY defined*/
257
- #ifndef COIN_USE_RESTRICT
258
- template <class T> inline void
259
- CoinMemcpyN(register const T* from, const int size, register T* to)
260
- {
261
- #ifndef _MSC_VER
262
- #ifdef USE_MEMCPY
263
- // Use memcpy - seems a lot faster on Intel with gcc
264
- #ifndef NDEBUG
265
- // Some debug so check
266
- if (size < 0)
267
- throw CoinError("trying to copy negative number of entries",
268
- "CoinMemcpyN", "");
269
-
270
- #if 0
271
- /* There is no point to do this test. If to and from are from different
272
- blocks then dist is undefined, so this can crash correct code. It's
273
- better to trust the user that the arrays are really disjoint. */
274
- const long dist = to - from;
275
- if (-size < dist && dist < size)
276
- throw CoinError("overlapping arrays", "CoinMemcpyN", "");
277
- #endif
278
- #endif
279
- std::memcpy(to,from,size*sizeof(T));
280
- #else
281
- if (size == 0 || from == to)
282
- return;
283
-
284
- #ifndef NDEBUG
285
- if (size < 0)
286
- throw CoinError("trying to copy negative number of entries",
287
- "CoinMemcpyN", "");
288
- #endif
289
-
290
- #if 0
291
- /* There is no point to do this test. If to and from are from different
292
- blocks then dist is undefined, so this can crash correct code. It's
293
- better to trust the user that the arrays are really disjoint. */
294
- const long dist = to - from;
295
- if (-size < dist && dist < size)
296
- throw CoinError("overlapping arrays", "CoinMemcpyN", "");
297
- #endif
298
-
299
- for (register int n = size / 8; n > 0; --n, from += 8, to += 8) {
300
- to[0] = from[0];
301
- to[1] = from[1];
302
- to[2] = from[2];
303
- to[3] = from[3];
304
- to[4] = from[4];
305
- to[5] = from[5];
306
- to[6] = from[6];
307
- to[7] = from[7];
308
- }
309
- switch (size % 8) {
310
- case 7: to[6] = from[6];
311
- case 6: to[5] = from[5];
312
- case 5: to[4] = from[4];
313
- case 4: to[3] = from[3];
314
- case 3: to[2] = from[2];
315
- case 2: to[1] = from[1];
316
- case 1: to[0] = from[0];
317
- case 0: break;
318
- }
319
- #endif
320
- #else
321
- CoinCopyN(from, size, to);
322
- #endif
323
- }
324
- #else
325
- template <class T> inline void
326
- CoinMemcpyN(const T * COIN_RESTRICT from, int size, T* COIN_RESTRICT to)
327
- {
328
- #ifdef USE_MEMCPY
329
- std::memcpy(to,from,size*sizeof(T));
330
- #else
331
- T * COIN_RESTRICT put = to;
332
- const T * COIN_RESTRICT get = from;
333
- for ( ; 0<size ; --size)
334
- *put++ = *get++;
335
- #endif
336
- }
337
- #endif
338
-
339
- //-----------------------------------------------------------------------------
340
-
341
- /** This helper function copies an array to another location. The two arrays
342
- must not overlap (otherwise an exception is thrown). For speed 8 entries
343
- are copied at a time. The source array is given by its first and "after
344
- last" entry; the target array is given by its first entry. */
345
- template <class T> inline void
346
- CoinMemcpy(register const T* first, register const T* last,
347
- register T* to)
348
- {
349
- CoinMemcpyN(first, static_cast<int>(last - first), to);
350
- }
351
-
352
- //#############################################################################
353
-
354
- /** This helper function fills an array with a given value. For speed 8 entries
355
- are filled at a time. The array is given by a pointer to its first entry
356
- and its size.
357
-
358
- Note JJF - the speed claim seems to be false on IA32 so I have added
359
- CoinZero to allow for memset. */
360
- template <class T> inline void
361
- CoinFillN(register T* to, const int size, register const T value)
362
- {
363
- if (size == 0)
364
- return;
365
-
366
- #ifndef NDEBUG
367
- if (size < 0)
368
- throw CoinError("trying to fill negative number of entries",
369
- "CoinFillN", "");
370
- #endif
371
- #if 1
372
- for (register int n = size / 8; n > 0; --n, to += 8) {
373
- to[0] = value;
374
- to[1] = value;
375
- to[2] = value;
376
- to[3] = value;
377
- to[4] = value;
378
- to[5] = value;
379
- to[6] = value;
380
- to[7] = value;
381
- }
382
- switch (size % 8) {
383
- case 7: to[6] = value;
384
- case 6: to[5] = value;
385
- case 5: to[4] = value;
386
- case 4: to[3] = value;
387
- case 3: to[2] = value;
388
- case 2: to[1] = value;
389
- case 1: to[0] = value;
390
- case 0: break;
391
- }
392
- #else
393
- // Use Duff's device to fill
394
- register int n = (size + 7) / 8;
395
- --to;
396
- switch (size % 8) {
397
- case 0: do{ *++to = value;
398
- case 7: *++to = value;
399
- case 6: *++to = value;
400
- case 5: *++to = value;
401
- case 4: *++to = value;
402
- case 3: *++to = value;
403
- case 2: *++to = value;
404
- case 1: *++to = value;
405
- }while(--n>0);
406
- }
407
- #endif
408
- }
409
-
410
- //-----------------------------------------------------------------------------
411
-
412
- /** This helper function fills an array with a given value. For speed 8
413
- entries are filled at a time. The array is given by its first and "after
414
- last" entry. */
415
- template <class T> inline void
416
- CoinFill(register T* first, register T* last, const T value)
417
- {
418
- CoinFillN(first, last - first, value);
419
- }
420
-
421
- //#############################################################################
422
-
423
- /** This helper function fills an array with zero. For speed 8 entries
424
- are filled at a time. The array is given by a pointer to its first entry
425
- and its size.
426
-
427
- Note JJF - the speed claim seems to be false on IA32 so I have allowed
428
- for memset as an alternative */
429
- template <class T> inline void
430
- CoinZeroN(register T* to, const int size)
431
- {
432
- #ifdef USE_MEMCPY
433
- // Use memset - seems faster on Intel with gcc
434
- #ifndef NDEBUG
435
- // Some debug so check
436
- if (size < 0)
437
- throw CoinError("trying to fill negative number of entries",
438
- "CoinZeroN", "");
439
- #endif
440
- memset(to,0,size*sizeof(T));
441
- #else
442
- if (size == 0)
443
- return;
444
-
445
- #ifndef NDEBUG
446
- if (size < 0)
447
- throw CoinError("trying to fill negative number of entries",
448
- "CoinZeroN", "");
449
- #endif
450
- #if 1
451
- for (register int n = size / 8; n > 0; --n, to += 8) {
452
- to[0] = 0;
453
- to[1] = 0;
454
- to[2] = 0;
455
- to[3] = 0;
456
- to[4] = 0;
457
- to[5] = 0;
458
- to[6] = 0;
459
- to[7] = 0;
460
- }
461
- switch (size % 8) {
462
- case 7: to[6] = 0;
463
- case 6: to[5] = 0;
464
- case 5: to[4] = 0;
465
- case 4: to[3] = 0;
466
- case 3: to[2] = 0;
467
- case 2: to[1] = 0;
468
- case 1: to[0] = 0;
469
- case 0: break;
470
- }
471
- #else
472
- // Use Duff's device to fill
473
- register int n = (size + 7) / 8;
474
- --to;
475
- switch (size % 8) {
476
- case 0: do{ *++to = 0;
477
- case 7: *++to = 0;
478
- case 6: *++to = 0;
479
- case 5: *++to = 0;
480
- case 4: *++to = 0;
481
- case 3: *++to = 0;
482
- case 2: *++to = 0;
483
- case 1: *++to = 0;
484
- }while(--n>0);
485
- }
486
- #endif
487
- #endif
488
- }
489
- /// This Debug helper function checks an array is all zero
490
- inline void
491
- CoinCheckDoubleZero(double * to, const int size)
492
- {
493
- int n=0;
494
- for (int j=0;j<size;j++) {
495
- if (to[j])
496
- n++;
497
- }
498
- if (n) {
499
- printf("array of length %d should be zero has %d nonzero\n",size,n);
500
- }
501
- }
502
- /// This Debug helper function checks an array is all zero
503
- inline void
504
- CoinCheckIntZero(int * to, const int size)
505
- {
506
- int n=0;
507
- for (int j=0;j<size;j++) {
508
- if (to[j])
509
- n++;
510
- }
511
- if (n) {
512
- printf("array of length %d should be zero has %d nonzero\n",size,n);
513
- }
514
- }
515
-
516
- //-----------------------------------------------------------------------------
517
-
518
- /** This helper function fills an array with a given value. For speed 8
519
- entries are filled at a time. The array is given by its first and "after
520
- last" entry. */
521
- template <class T> inline void
522
- CoinZero(register T* first, register T* last)
523
- {
524
- CoinZeroN(first, last - first);
525
- }
526
-
527
- //#############################################################################
528
-
529
- /** Returns strdup or NULL if original NULL */
530
- inline char * CoinStrdup(const char * name)
531
- {
532
- char* dup = NULL;
533
- if (name) {
534
- const int len = static_cast<int>(strlen(name));
535
- dup = static_cast<char*>(malloc(len+1));
536
- CoinMemcpyN(name, len, dup);
537
- dup[len] = 0;
538
- }
539
- return dup;
540
- }
541
-
542
- //#############################################################################
543
-
544
- /** Return the larger (according to <code>operator<()</code> of the arguments.
545
- This function was introduced because for some reason compiler tend to
546
- handle the <code>max()</code> function differently. */
547
- template <class T> inline T
548
- CoinMax(register const T x1, register const T x2)
549
- {
550
- return (x1 > x2) ? x1 : x2;
551
- }
552
-
553
- //-----------------------------------------------------------------------------
554
-
555
- /** Return the smaller (according to <code>operator<()</code> of the arguments.
556
- This function was introduced because for some reason compiler tend to
557
- handle the min() function differently. */
558
- template <class T> inline T
559
- CoinMin(register const T x1, register const T x2)
560
- {
561
- return (x1 < x2) ? x1 : x2;
562
- }
563
-
564
- //-----------------------------------------------------------------------------
565
-
566
- /** Return the absolute value of the argument. This function was introduced
567
- because for some reason compiler tend to handle the abs() function
568
- differently. */
569
- template <class T> inline T
570
- CoinAbs(const T value)
571
- {
572
- return value<0 ? -value : value;
573
- }
574
-
575
- //#############################################################################
576
-
577
- /** This helper function tests whether the entries of an array are sorted
578
- according to operator<. The array is given by a pointer to its first entry
579
- and by its size. */
580
- template <class T> inline bool
581
- CoinIsSorted(register const T* first, const int size)
582
- {
583
- if (size == 0)
584
- return true;
585
-
586
- #ifndef NDEBUG
587
- if (size < 0)
588
- throw CoinError("negative number of entries", "CoinIsSorted", "");
589
- #endif
590
- #if 1
591
- // size1 is the number of comparisons to be made
592
- const int size1 = size - 1;
593
- for (register int n = size1 / 8; n > 0; --n, first += 8) {
594
- if (first[8] < first[7]) return false;
595
- if (first[7] < first[6]) return false;
596
- if (first[6] < first[5]) return false;
597
- if (first[5] < first[4]) return false;
598
- if (first[4] < first[3]) return false;
599
- if (first[3] < first[2]) return false;
600
- if (first[2] < first[1]) return false;
601
- if (first[1] < first[0]) return false;
602
- }
603
-
604
- switch (size1 % 8) {
605
- case 7: if (first[7] < first[6]) return false;
606
- case 6: if (first[6] < first[5]) return false;
607
- case 5: if (first[5] < first[4]) return false;
608
- case 4: if (first[4] < first[3]) return false;
609
- case 3: if (first[3] < first[2]) return false;
610
- case 2: if (first[2] < first[1]) return false;
611
- case 1: if (first[1] < first[0]) return false;
612
- case 0: break;
613
- }
614
- #else
615
- register const T* next = first;
616
- register const T* last = first + size;
617
- for (++next; next != last; first = next, ++next)
618
- if (*next < *first)
619
- return false;
620
- #endif
621
- return true;
622
- }
623
-
624
- //-----------------------------------------------------------------------------
625
-
626
- /** This helper function tests whether the entries of an array are sorted
627
- according to operator<. The array is given by its first and "after
628
- last" entry. */
629
- template <class T> inline bool
630
- CoinIsSorted(register const T* first, register const T* last)
631
- {
632
- return CoinIsSorted(first, static_cast<int>(last - first));
633
- }
634
-
635
- //#############################################################################
636
-
637
- /** This helper function fills an array with the values init, init+1, init+2,
638
- etc. For speed 8 entries are filled at a time. The array is given by a
639
- pointer to its first entry and its size. */
640
- template <class T> inline void
641
- CoinIotaN(register T* first, const int size, register T init)
642
- {
643
- if (size == 0)
644
- return;
645
-
646
- #ifndef NDEBUG
647
- if (size < 0)
648
- throw CoinError("negative number of entries", "CoinIotaN", "");
649
- #endif
650
- #if 1
651
- for (register int n = size / 8; n > 0; --n, first += 8, init += 8) {
652
- first[0] = init;
653
- first[1] = init + 1;
654
- first[2] = init + 2;
655
- first[3] = init + 3;
656
- first[4] = init + 4;
657
- first[5] = init + 5;
658
- first[6] = init + 6;
659
- first[7] = init + 7;
660
- }
661
- switch (size % 8) {
662
- case 7: first[6] = init + 6;
663
- case 6: first[5] = init + 5;
664
- case 5: first[4] = init + 4;
665
- case 4: first[3] = init + 3;
666
- case 3: first[2] = init + 2;
667
- case 2: first[1] = init + 1;
668
- case 1: first[0] = init;
669
- case 0: break;
670
- }
671
- #else
672
- // Use Duff's device to fill
673
- register int n = (size + 7) / 8;
674
- --first;
675
- --init;
676
- switch (size % 8) {
677
- case 0: do{ *++first = ++init;
678
- case 7: *++first = ++init;
679
- case 6: *++first = ++init;
680
- case 5: *++first = ++init;
681
- case 4: *++first = ++init;
682
- case 3: *++first = ++init;
683
- case 2: *++first = ++init;
684
- case 1: *++first = ++init;
685
- }while(--n>0);
686
- }
687
- #endif
688
- }
689
-
690
- //-----------------------------------------------------------------------------
691
-
692
- /** This helper function fills an array with the values init, init+1, init+2,
693
- etc. For speed 8 entries are filled at a time. The array is given by its
694
- first and "after last" entry. */
695
- template <class T> inline void
696
- CoinIota(T* first, const T* last, T init)
697
- {
698
- CoinIotaN(first, last-first, init);
699
- }
700
-
701
- //#############################################################################
702
-
703
- /** This helper function deletes certain entries from an array. The array is
704
- given by pointers to its first and "after last" entry (first two
705
- arguments). The positions of the entries to be deleted are given in the
706
- integer array specified by the last two arguments (again, first and "after
707
- last" entry). */
708
- template <class T> inline T *
709
- CoinDeleteEntriesFromArray(register T * arrayFirst, register T * arrayLast,
710
- const int * firstDelPos, const int * lastDelPos)
711
- {
712
- int delNum = static_cast<int>(lastDelPos - firstDelPos);
713
- if (delNum == 0)
714
- return arrayLast;
715
-
716
- if (delNum < 0)
717
- throw CoinError("trying to delete negative number of entries",
718
- "CoinDeleteEntriesFromArray", "");
719
-
720
- int * delSortedPos = NULL;
721
- if (! (CoinIsSorted(firstDelPos, lastDelPos) &&
722
- std::adjacent_find(firstDelPos, lastDelPos) == lastDelPos)) {
723
- // the positions of the to be deleted is either not sorted or not unique
724
- delSortedPos = new int[delNum];
725
- CoinDisjointCopy(firstDelPos, lastDelPos, delSortedPos);
726
- std::sort(delSortedPos, delSortedPos + delNum);
727
- delNum = static_cast<int>(std::unique(delSortedPos,
728
- delSortedPos+delNum) - delSortedPos);
729
- }
730
- const int * delSorted = delSortedPos ? delSortedPos : firstDelPos;
731
-
732
- const int last = delNum - 1;
733
- int size = delSorted[0];
734
- for (int i = 0; i < last; ++i) {
735
- const int copyFirst = delSorted[i] + 1;
736
- const int copyLast = delSorted[i+1];
737
- CoinCopy(arrayFirst + copyFirst, arrayFirst + copyLast,
738
- arrayFirst + size);
739
- size += copyLast - copyFirst;
740
- }
741
- const int copyFirst = delSorted[last] + 1;
742
- const int copyLast = static_cast<int>(arrayLast - arrayFirst);
743
- CoinCopy(arrayFirst + copyFirst, arrayFirst + copyLast,
744
- arrayFirst + size);
745
- size += copyLast - copyFirst;
746
-
747
- if (delSortedPos)
748
- delete[] delSortedPos;
749
-
750
- return arrayFirst + size;
751
- }
752
-
753
- //#############################################################################
754
-
755
- #define COIN_OWN_RANDOM_32
756
-
757
- #if defined COIN_OWN_RANDOM_32
758
- /* Thanks to Stefano Gliozzi for providing an operating system
759
- independent random number generator. */
760
-
761
- /*! \brief Return a random number between 0 and 1
762
-
763
- A platform-independent linear congruential generator. For a given seed, the
764
- generated sequence is always the same regardless of the (32-bit)
765
- architecture. This allows to build & test in different environments, getting
766
- in most cases the same optimization path.
767
-
768
- Set \p isSeed to true and supply an integer seed to set the seed
769
- (vid. #CoinSeedRandom)
770
-
771
- \todo Anyone want to volunteer an upgrade for 64-bit architectures?
772
- */
773
- inline double CoinDrand48 (bool isSeed = false, unsigned int seed = 1)
774
- {
775
- static unsigned int last = 123456;
776
- if (isSeed) {
777
- last = seed;
778
- } else {
779
- last = 1664525*last+1013904223;
780
- return ((static_cast<double> (last))/4294967296.0);
781
- }
782
- return (0.0);
783
- }
784
-
785
- /// Set the seed for the random number generator
786
- inline void CoinSeedRandom(int iseed)
787
- {
788
- CoinDrand48(true, iseed);
789
- }
790
-
791
- #else // COIN_OWN_RANDOM_32
792
-
793
- #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN32__)
794
-
795
- /// Return a random number between 0 and 1
796
- inline double CoinDrand48() { return rand() / (double) RAND_MAX; }
797
- /// Set the seed for the random number generator
798
- inline void CoinSeedRandom(int iseed) { srand(iseed + 69822); }
799
-
800
- #else
801
-
802
- /// Return a random number between 0 and 1
803
- inline double CoinDrand48() { return drand48(); }
804
- /// Set the seed for the random number generator
805
- inline void CoinSeedRandom(int iseed) { srand48(iseed + 69822); }
806
-
807
- #endif
808
-
809
- #endif // COIN_OWN_RANDOM_32
810
-
811
- //#############################################################################
812
-
813
- /** This function figures out whether file names should contain slashes or
814
- backslashes as directory separator */
815
- inline char CoinFindDirSeparator()
816
- {
817
- int size = 1000;
818
- char* buf = 0;
819
- while (true) {
820
- buf = new char[size];
821
- if (getcwd(buf, size))
822
- break;
823
- delete[] buf;
824
- buf = 0;
825
- size = 2*size;
826
- }
827
- // if first char is '/' then it's unix and the dirsep is '/'. otherwise we
828
- // assume it's dos and the dirsep is '\'
829
- char dirsep = buf[0] == '/' ? '/' : '\\';
830
- delete[] buf;
831
- return dirsep;
832
- }
833
- //#############################################################################
834
-
835
- inline int CoinStrNCaseCmp(const char* s0, const char* s1,
836
- const size_t len)
837
- {
838
- for (size_t i = 0; i < len; ++i) {
839
- if (s0[i] == 0) {
840
- return s1[i] == 0 ? 0 : -1;
841
- }
842
- if (s1[i] == 0) {
843
- return 1;
844
- }
845
- const int c0 = std::tolower(s0[i]);
846
- const int c1 = std::tolower(s1[i]);
847
- if (c0 < c1)
848
- return -1;
849
- if (c0 > c1)
850
- return 1;
851
- }
852
- return 0;
853
- }
854
-
855
- //#############################################################################
856
-
857
- /// Swap the arguments.
858
- template <class T> inline void CoinSwap (T &x, T &y)
859
- {
860
- T t = x;
861
- x = y;
862
- y = t;
863
- }
864
-
865
- //#############################################################################
866
-
867
- /** This helper function copies an array to file
868
- Returns 0 if OK, 1 if bad write.
869
- */
870
-
871
- template <class T> inline int
872
- CoinToFile( const T* array, CoinBigIndex size, FILE * fp)
873
- {
874
- CoinBigIndex numberWritten;
875
- if (array&&size) {
876
- numberWritten =
877
- static_cast<CoinBigIndex>(fwrite(&size,sizeof(int),1,fp));
878
- if (numberWritten!=1)
879
- return 1;
880
- numberWritten =
881
- static_cast<CoinBigIndex>(fwrite(array,sizeof(T),size_t(size),fp));
882
- if (numberWritten!=size)
883
- return 1;
884
- } else {
885
- size = 0;
886
- numberWritten =
887
- static_cast<CoinBigIndex>(fwrite(&size,sizeof(int),1,fp));
888
- if (numberWritten!=1)
889
- return 1;
890
- }
891
- return 0;
892
- }
893
-
894
- //#############################################################################
895
-
896
- /** This helper function copies an array from file and creates with new.
897
- Passed in array is ignored i.e. not deleted.
898
- But if NULL and size does not match and newSize 0 then leaves as NULL and 0
899
- Returns 0 if OK, 1 if bad read, 2 if size did not match.
900
- */
901
-
902
- template <class T> inline int
903
- CoinFromFile( T* &array, CoinBigIndex size, FILE * fp, CoinBigIndex & newSize)
904
- {
905
- CoinBigIndex numberRead;
906
- numberRead =
907
- static_cast<CoinBigIndex>(fread(&newSize,sizeof(int),1,fp));
908
- if (numberRead!=1)
909
- return 1;
910
- int returnCode=0;
911
- if (size!=newSize&&(newSize||array))
912
- returnCode=2;
913
- if (newSize) {
914
- array = new T [newSize];
915
- numberRead =
916
- static_cast<CoinBigIndex>(fread(array,sizeof(T),newSize,fp));
917
- if (numberRead!=newSize)
918
- returnCode=1;
919
- } else {
920
- array = NULL;
921
- }
922
- return returnCode;
923
- }
924
-
925
- //#############################################################################
926
-
927
- /// Cube Root
928
- #if 0
929
- inline double CoinCbrt(double x)
930
- {
931
- #if defined(_MSC_VER)
932
- return pow(x,(1./3.));
933
- #else
934
- return cbrt(x);
935
- #endif
936
- }
937
- #endif
938
-
939
- //-----------------------------------------------------------------------------
940
-
941
- /// This helper returns "sizeof" as an int
942
- #define CoinSizeofAsInt(type) (static_cast<int>(sizeof(type)))
943
- /// This helper returns "strlen" as an int
944
- inline int
945
- CoinStrlenAsInt(const char * string)
946
- {
947
- return static_cast<int>(strlen(string));
948
- }
949
-
950
- /** Class for thread specific random numbers
951
- */
952
- #if defined COIN_OWN_RANDOM_32
953
- class CoinThreadRandom {
954
- public:
955
- /**@name Constructors, destructor */
956
-
957
- //@{
958
- /** Default constructor. */
959
- CoinThreadRandom()
960
- { seed_=12345678;}
961
- /** Constructor wih seed. */
962
- CoinThreadRandom(int seed)
963
- {
964
- seed_ = seed;
965
- }
966
- /** Destructor */
967
- ~CoinThreadRandom() {}
968
- // Copy
969
- CoinThreadRandom(const CoinThreadRandom & rhs)
970
- { seed_ = rhs.seed_;}
971
- // Assignment
972
- CoinThreadRandom& operator=(const CoinThreadRandom & rhs)
973
- {
974
- if (this != &rhs) {
975
- seed_ = rhs.seed_;
976
- }
977
- return *this;
978
- }
979
-
980
- //@}
981
-
982
- /**@name Sets/gets */
983
-
984
- //@{
985
- /** Set seed. */
986
- inline void setSeed(int seed)
987
- {
988
- seed_ = seed;
989
- }
990
- /** Get seed. */
991
- inline unsigned int getSeed() const
992
- {
993
- return seed_;
994
- }
995
- /// return a random number
996
- inline double randomDouble() const
997
- {
998
- double retVal;
999
- seed_ = 1664525*(seed_)+1013904223;
1000
- retVal = ((static_cast<double> (seed_))/4294967296.0);
1001
- return retVal;
1002
- }
1003
- /// make more random (i.e. for startup)
1004
- inline void randomize(int n=0)
1005
- {
1006
- if (!n)
1007
- n=seed_ & 255;
1008
- for (int i=0;i<n;i++)
1009
- randomDouble();
1010
- }
1011
- //@}
1012
-
1013
-
1014
- protected:
1015
- /**@name Data members
1016
- The data members are protected to allow access for derived classes. */
1017
- //@{
1018
- /// Current seed
1019
- mutable unsigned int seed_;
1020
- //@}
1021
- };
1022
- #else
1023
- class CoinThreadRandom {
1024
- public:
1025
- /**@name Constructors, destructor */
1026
-
1027
- //@{
1028
- /** Default constructor. */
1029
- CoinThreadRandom()
1030
- { seed_[0]=50000;seed_[1]=40000;seed_[2]=30000;}
1031
- /** Constructor wih seed. */
1032
- CoinThreadRandom(const unsigned short seed[3])
1033
- { memcpy(seed_,seed,3*sizeof(unsigned short));}
1034
- /** Constructor wih seed. */
1035
- CoinThreadRandom(int seed)
1036
- {
1037
- union { int i[2]; unsigned short int s[4];} put;
1038
- put.i[0]=seed;
1039
- put.i[1]=seed;
1040
- memcpy(seed_,put.s,3*sizeof(unsigned short));
1041
- }
1042
- /** Destructor */
1043
- ~CoinThreadRandom() {}
1044
- // Copy
1045
- CoinThreadRandom(const CoinThreadRandom & rhs)
1046
- { memcpy(seed_,rhs.seed_,3*sizeof(unsigned short));}
1047
- // Assignment
1048
- CoinThreadRandom& operator=(const CoinThreadRandom & rhs)
1049
- {
1050
- if (this != &rhs) {
1051
- memcpy(seed_,rhs.seed_,3*sizeof(unsigned short));
1052
- }
1053
- return *this;
1054
- }
1055
-
1056
- //@}
1057
-
1058
- /**@name Sets/gets */
1059
-
1060
- //@{
1061
- /** Set seed. */
1062
- inline void setSeed(const unsigned short seed[3])
1063
- { memcpy(seed_,seed,3*sizeof(unsigned short));}
1064
- /** Set seed. */
1065
- inline void setSeed(int seed)
1066
- {
1067
- union { int i[2]; unsigned short int s[4];} put;
1068
- put.i[0]=seed;
1069
- put.i[1]=seed;
1070
- memcpy(seed_,put.s,3*sizeof(unsigned short));
1071
- }
1072
- /// return a random number
1073
- inline double randomDouble() const
1074
- {
1075
- double retVal;
1076
- #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN32__)
1077
- retVal=rand();
1078
- retVal=retVal/(double) RAND_MAX;
1079
- #else
1080
- retVal = erand48(seed_);
1081
- #endif
1082
- return retVal;
1083
- }
1084
- /// make more random (i.e. for startup)
1085
- inline void randomize(int n=0)
1086
- {
1087
- if (!n) {
1088
- n=seed_[0]+seed_[1]+seed_[2];
1089
- n &= 255;
1090
- }
1091
- for (int i=0;i<n;i++)
1092
- randomDouble();
1093
- }
1094
- //@}
1095
-
1096
-
1097
- protected:
1098
- /**@name Data members
1099
- The data members are protected to allow access for derived classes. */
1100
- //@{
1101
- /// Current seed
1102
- mutable unsigned short seed_[3];
1103
- //@}
1104
- };
1105
- #endif
1106
- #ifndef COIN_DETAIL
1107
- #define COIN_DETAIL_PRINT(s) {}
1108
- #else
1109
- #define COIN_DETAIL_PRINT(s) s
1110
- #endif
1111
- #endif