rfreeimage 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (860) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +1 -0
  4. data/Rakefile +34 -0
  5. data/ext/rfreeimage/extconf.rb +35 -0
  6. data/ext/rfreeimage/rfi_main.c +389 -0
  7. data/lib/rfreeimage/image.rb +26 -0
  8. data/lib/rfreeimage/version.rb +3 -0
  9. data/lib/rfreeimage.rb +3 -0
  10. data/rfreeimage.gemspec +32 -0
  11. data/vendor/FreeImage/Makefile +34 -0
  12. data/vendor/FreeImage/Makefile.cygwin +74 -0
  13. data/vendor/FreeImage/Makefile.fip +84 -0
  14. data/vendor/FreeImage/Makefile.gnu +83 -0
  15. data/vendor/FreeImage/Makefile.iphone +96 -0
  16. data/vendor/FreeImage/Makefile.mingw +136 -0
  17. data/vendor/FreeImage/Makefile.osx +115 -0
  18. data/vendor/FreeImage/Makefile.solaris +66 -0
  19. data/vendor/FreeImage/Makefile.srcs +6 -0
  20. data/vendor/FreeImage/README.iphone +19 -0
  21. data/vendor/FreeImage/README.linux +50 -0
  22. data/vendor/FreeImage/README.minGW +236 -0
  23. data/vendor/FreeImage/README.osx +44 -0
  24. data/vendor/FreeImage/README.solaris +67 -0
  25. data/vendor/FreeImage/Source/CacheFile.h +92 -0
  26. data/vendor/FreeImage/Source/DeprecationManager/Deprecated.cpp +36 -0
  27. data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.cpp +103 -0
  28. data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.h +83 -0
  29. data/vendor/FreeImage/Source/FreeImage/BitmapAccess.cpp +1573 -0
  30. data/vendor/FreeImage/Source/FreeImage/CacheFile.cpp +271 -0
  31. data/vendor/FreeImage/Source/FreeImage/ColorLookup.cpp +785 -0
  32. data/vendor/FreeImage/Source/FreeImage/Conversion.cpp +551 -0
  33. data/vendor/FreeImage/Source/FreeImage/Conversion16_555.cpp +209 -0
  34. data/vendor/FreeImage/Source/FreeImage/Conversion16_565.cpp +204 -0
  35. data/vendor/FreeImage/Source/FreeImage/Conversion24.cpp +252 -0
  36. data/vendor/FreeImage/Source/FreeImage/Conversion32.cpp +345 -0
  37. data/vendor/FreeImage/Source/FreeImage/Conversion4.cpp +246 -0
  38. data/vendor/FreeImage/Source/FreeImage/Conversion8.cpp +305 -0
  39. data/vendor/FreeImage/Source/FreeImage/ConversionFloat.cpp +194 -0
  40. data/vendor/FreeImage/Source/FreeImage/ConversionRGB16.cpp +144 -0
  41. data/vendor/FreeImage/Source/FreeImage/ConversionRGBA16.cpp +147 -0
  42. data/vendor/FreeImage/Source/FreeImage/ConversionRGBAF.cpp +250 -0
  43. data/vendor/FreeImage/Source/FreeImage/ConversionRGBF.cpp +243 -0
  44. data/vendor/FreeImage/Source/FreeImage/ConversionType.cpp +699 -0
  45. data/vendor/FreeImage/Source/FreeImage/ConversionUINT16.cpp +134 -0
  46. data/vendor/FreeImage/Source/FreeImage/FreeImage.cpp +226 -0
  47. data/vendor/FreeImage/Source/FreeImage/FreeImageC.c +22 -0
  48. data/vendor/FreeImage/Source/FreeImage/FreeImageIO.cpp +175 -0
  49. data/vendor/FreeImage/Source/FreeImage/GetType.cpp +92 -0
  50. data/vendor/FreeImage/Source/FreeImage/Halftoning.cpp +474 -0
  51. data/vendor/FreeImage/Source/FreeImage/J2KHelper.cpp +591 -0
  52. data/vendor/FreeImage/Source/FreeImage/J2KHelper.h +36 -0
  53. data/vendor/FreeImage/Source/FreeImage/LFPQuantizer.cpp +208 -0
  54. data/vendor/FreeImage/Source/FreeImage/MNGHelper.cpp +1320 -0
  55. data/vendor/FreeImage/Source/FreeImage/MemoryIO.cpp +237 -0
  56. data/vendor/FreeImage/Source/FreeImage/MultiPage.cpp +974 -0
  57. data/vendor/FreeImage/Source/FreeImage/NNQuantizer.cpp +507 -0
  58. data/vendor/FreeImage/Source/FreeImage/PSDParser.cpp +1057 -0
  59. data/vendor/FreeImage/Source/FreeImage/PSDParser.h +271 -0
  60. data/vendor/FreeImage/Source/FreeImage/PixelAccess.cpp +197 -0
  61. data/vendor/FreeImage/Source/FreeImage/Plugin.cpp +822 -0
  62. data/vendor/FreeImage/Source/FreeImage/PluginBMP.cpp +1494 -0
  63. data/vendor/FreeImage/Source/FreeImage/PluginCUT.cpp +240 -0
  64. data/vendor/FreeImage/Source/FreeImage/PluginDDS.cpp +655 -0
  65. data/vendor/FreeImage/Source/FreeImage/PluginEXR.cpp +773 -0
  66. data/vendor/FreeImage/Source/FreeImage/PluginG3.cpp +433 -0
  67. data/vendor/FreeImage/Source/FreeImage/PluginGIF.cpp +1407 -0
  68. data/vendor/FreeImage/Source/FreeImage/PluginHDR.cpp +722 -0
  69. data/vendor/FreeImage/Source/FreeImage/PluginICO.cpp +824 -0
  70. data/vendor/FreeImage/Source/FreeImage/PluginIFF.cpp +459 -0
  71. data/vendor/FreeImage/Source/FreeImage/PluginJ2K.cpp +328 -0
  72. data/vendor/FreeImage/Source/FreeImage/PluginJNG.cpp +162 -0
  73. data/vendor/FreeImage/Source/FreeImage/PluginJP2.cpp +328 -0
  74. data/vendor/FreeImage/Source/FreeImage/PluginJPEG.cpp +1706 -0
  75. data/vendor/FreeImage/Source/FreeImage/PluginJXR.cpp +1475 -0
  76. data/vendor/FreeImage/Source/FreeImage/PluginKOALA.cpp +243 -0
  77. data/vendor/FreeImage/Source/FreeImage/PluginMNG.cpp +153 -0
  78. data/vendor/FreeImage/Source/FreeImage/PluginPCD.cpp +251 -0
  79. data/vendor/FreeImage/Source/FreeImage/PluginPCX.cpp +659 -0
  80. data/vendor/FreeImage/Source/FreeImage/PluginPFM.cpp +409 -0
  81. data/vendor/FreeImage/Source/FreeImage/PluginPICT.cpp +1343 -0
  82. data/vendor/FreeImage/Source/FreeImage/PluginPNG.cpp +1115 -0
  83. data/vendor/FreeImage/Source/FreeImage/PluginPNM.cpp +838 -0
  84. data/vendor/FreeImage/Source/FreeImage/PluginPSD.cpp +131 -0
  85. data/vendor/FreeImage/Source/FreeImage/PluginRAS.cpp +512 -0
  86. data/vendor/FreeImage/Source/FreeImage/PluginRAW.cpp +793 -0
  87. data/vendor/FreeImage/Source/FreeImage/PluginSGI.cpp +425 -0
  88. data/vendor/FreeImage/Source/FreeImage/PluginTARGA.cpp +1591 -0
  89. data/vendor/FreeImage/Source/FreeImage/PluginTIFF.cpp +2631 -0
  90. data/vendor/FreeImage/Source/FreeImage/PluginWBMP.cpp +372 -0
  91. data/vendor/FreeImage/Source/FreeImage/PluginWebP.cpp +698 -0
  92. data/vendor/FreeImage/Source/FreeImage/PluginXBM.cpp +399 -0
  93. data/vendor/FreeImage/Source/FreeImage/PluginXPM.cpp +487 -0
  94. data/vendor/FreeImage/Source/FreeImage/TIFFLogLuv.cpp +65 -0
  95. data/vendor/FreeImage/Source/FreeImage/ToneMapping.cpp +75 -0
  96. data/vendor/FreeImage/Source/FreeImage/WuQuantizer.cpp +559 -0
  97. data/vendor/FreeImage/Source/FreeImage/ZLibInterface.cpp +223 -0
  98. data/vendor/FreeImage/Source/FreeImage/tmoColorConvert.cpp +479 -0
  99. data/vendor/FreeImage/Source/FreeImage/tmoDrago03.cpp +295 -0
  100. data/vendor/FreeImage/Source/FreeImage/tmoFattal02.cpp +689 -0
  101. data/vendor/FreeImage/Source/FreeImage/tmoReinhard05.cpp +260 -0
  102. data/vendor/FreeImage/Source/FreeImage.h +1153 -0
  103. data/vendor/FreeImage/Source/FreeImageIO.h +63 -0
  104. data/vendor/FreeImage/Source/FreeImageToolkit/BSplineRotate.cpp +730 -0
  105. data/vendor/FreeImage/Source/FreeImageToolkit/Background.cpp +895 -0
  106. data/vendor/FreeImage/Source/FreeImageToolkit/Channels.cpp +488 -0
  107. data/vendor/FreeImage/Source/FreeImageToolkit/ClassicRotate.cpp +917 -0
  108. data/vendor/FreeImage/Source/FreeImageToolkit/Colors.cpp +967 -0
  109. data/vendor/FreeImage/Source/FreeImageToolkit/CopyPaste.cpp +861 -0
  110. data/vendor/FreeImage/Source/FreeImageToolkit/Display.cpp +230 -0
  111. data/vendor/FreeImage/Source/FreeImageToolkit/Filters.h +287 -0
  112. data/vendor/FreeImage/Source/FreeImageToolkit/Flip.cpp +166 -0
  113. data/vendor/FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp +623 -0
  114. data/vendor/FreeImage/Source/FreeImageToolkit/MultigridPoissonSolver.cpp +505 -0
  115. data/vendor/FreeImage/Source/FreeImageToolkit/Rescale.cpp +192 -0
  116. data/vendor/FreeImage/Source/FreeImageToolkit/Resize.cpp +2116 -0
  117. data/vendor/FreeImage/Source/FreeImageToolkit/Resize.h +196 -0
  118. data/vendor/FreeImage/Source/LibJPEG/ansi2knr.c +739 -0
  119. data/vendor/FreeImage/Source/LibJPEG/cderror.h +134 -0
  120. data/vendor/FreeImage/Source/LibJPEG/cdjpeg.c +181 -0
  121. data/vendor/FreeImage/Source/LibJPEG/cdjpeg.h +187 -0
  122. data/vendor/FreeImage/Source/LibJPEG/cjpeg.c +664 -0
  123. data/vendor/FreeImage/Source/LibJPEG/ckconfig.c +402 -0
  124. data/vendor/FreeImage/Source/LibJPEG/djpeg.c +617 -0
  125. data/vendor/FreeImage/Source/LibJPEG/example.c +433 -0
  126. data/vendor/FreeImage/Source/LibJPEG/jaricom.c +153 -0
  127. data/vendor/FreeImage/Source/LibJPEG/jcapimin.c +288 -0
  128. data/vendor/FreeImage/Source/LibJPEG/jcapistd.c +162 -0
  129. data/vendor/FreeImage/Source/LibJPEG/jcarith.c +944 -0
  130. data/vendor/FreeImage/Source/LibJPEG/jccoefct.c +454 -0
  131. data/vendor/FreeImage/Source/LibJPEG/jccolor.c +604 -0
  132. data/vendor/FreeImage/Source/LibJPEG/jcdctmgr.c +477 -0
  133. data/vendor/FreeImage/Source/LibJPEG/jchuff.c +1573 -0
  134. data/vendor/FreeImage/Source/LibJPEG/jcinit.c +84 -0
  135. data/vendor/FreeImage/Source/LibJPEG/jcmainct.c +297 -0
  136. data/vendor/FreeImage/Source/LibJPEG/jcmarker.c +719 -0
  137. data/vendor/FreeImage/Source/LibJPEG/jcmaster.c +856 -0
  138. data/vendor/FreeImage/Source/LibJPEG/jcomapi.c +106 -0
  139. data/vendor/FreeImage/Source/LibJPEG/jconfig.h +161 -0
  140. data/vendor/FreeImage/Source/LibJPEG/jcparam.c +675 -0
  141. data/vendor/FreeImage/Source/LibJPEG/jcprepct.c +358 -0
  142. data/vendor/FreeImage/Source/LibJPEG/jcsample.c +545 -0
  143. data/vendor/FreeImage/Source/LibJPEG/jctrans.c +385 -0
  144. data/vendor/FreeImage/Source/LibJPEG/jdapimin.c +399 -0
  145. data/vendor/FreeImage/Source/LibJPEG/jdapistd.c +276 -0
  146. data/vendor/FreeImage/Source/LibJPEG/jdarith.c +796 -0
  147. data/vendor/FreeImage/Source/LibJPEG/jdatadst.c +270 -0
  148. data/vendor/FreeImage/Source/LibJPEG/jdatasrc.c +275 -0
  149. data/vendor/FreeImage/Source/LibJPEG/jdcoefct.c +741 -0
  150. data/vendor/FreeImage/Source/LibJPEG/jdcolor.c +748 -0
  151. data/vendor/FreeImage/Source/LibJPEG/jdct.h +393 -0
  152. data/vendor/FreeImage/Source/LibJPEG/jddctmgr.c +384 -0
  153. data/vendor/FreeImage/Source/LibJPEG/jdhuff.c +1554 -0
  154. data/vendor/FreeImage/Source/LibJPEG/jdinput.c +662 -0
  155. data/vendor/FreeImage/Source/LibJPEG/jdmainct.c +513 -0
  156. data/vendor/FreeImage/Source/LibJPEG/jdmarker.c +1511 -0
  157. data/vendor/FreeImage/Source/LibJPEG/jdmaster.c +543 -0
  158. data/vendor/FreeImage/Source/LibJPEG/jdmerge.c +401 -0
  159. data/vendor/FreeImage/Source/LibJPEG/jdpostct.c +290 -0
  160. data/vendor/FreeImage/Source/LibJPEG/jdsample.c +361 -0
  161. data/vendor/FreeImage/Source/LibJPEG/jdtrans.c +140 -0
  162. data/vendor/FreeImage/Source/LibJPEG/jerror.c +253 -0
  163. data/vendor/FreeImage/Source/LibJPEG/jerror.h +304 -0
  164. data/vendor/FreeImage/Source/LibJPEG/jfdctflt.c +174 -0
  165. data/vendor/FreeImage/Source/LibJPEG/jfdctfst.c +230 -0
  166. data/vendor/FreeImage/Source/LibJPEG/jfdctint.c +4406 -0
  167. data/vendor/FreeImage/Source/LibJPEG/jidctflt.c +235 -0
  168. data/vendor/FreeImage/Source/LibJPEG/jidctfst.c +368 -0
  169. data/vendor/FreeImage/Source/LibJPEG/jidctint.c +5179 -0
  170. data/vendor/FreeImage/Source/LibJPEG/jinclude.h +91 -0
  171. data/vendor/FreeImage/Source/LibJPEG/jmemansi.c +167 -0
  172. data/vendor/FreeImage/Source/LibJPEG/jmemdos.c +638 -0
  173. data/vendor/FreeImage/Source/LibJPEG/jmemmac.c +289 -0
  174. data/vendor/FreeImage/Source/LibJPEG/jmemmgr.c +1119 -0
  175. data/vendor/FreeImage/Source/LibJPEG/jmemname.c +276 -0
  176. data/vendor/FreeImage/Source/LibJPEG/jmemnobs.c +109 -0
  177. data/vendor/FreeImage/Source/LibJPEG/jmemsys.h +198 -0
  178. data/vendor/FreeImage/Source/LibJPEG/jmorecfg.h +442 -0
  179. data/vendor/FreeImage/Source/LibJPEG/jpegint.h +426 -0
  180. data/vendor/FreeImage/Source/LibJPEG/jpeglib.h +1180 -0
  181. data/vendor/FreeImage/Source/LibJPEG/jpegtran.c +577 -0
  182. data/vendor/FreeImage/Source/LibJPEG/jquant1.c +857 -0
  183. data/vendor/FreeImage/Source/LibJPEG/jquant2.c +1311 -0
  184. data/vendor/FreeImage/Source/LibJPEG/jutils.c +227 -0
  185. data/vendor/FreeImage/Source/LibJPEG/jversion.h +14 -0
  186. data/vendor/FreeImage/Source/LibJPEG/rdbmp.c +480 -0
  187. data/vendor/FreeImage/Source/LibJPEG/rdcolmap.c +253 -0
  188. data/vendor/FreeImage/Source/LibJPEG/rdgif.c +38 -0
  189. data/vendor/FreeImage/Source/LibJPEG/rdjpgcom.c +515 -0
  190. data/vendor/FreeImage/Source/LibJPEG/rdppm.c +459 -0
  191. data/vendor/FreeImage/Source/LibJPEG/rdrle.c +387 -0
  192. data/vendor/FreeImage/Source/LibJPEG/rdswitch.c +365 -0
  193. data/vendor/FreeImage/Source/LibJPEG/rdtarga.c +500 -0
  194. data/vendor/FreeImage/Source/LibJPEG/transupp.c +1763 -0
  195. data/vendor/FreeImage/Source/LibJPEG/transupp.h +219 -0
  196. data/vendor/FreeImage/Source/LibJPEG/wrbmp.c +442 -0
  197. data/vendor/FreeImage/Source/LibJPEG/wrgif.c +399 -0
  198. data/vendor/FreeImage/Source/LibJPEG/wrjpgcom.c +583 -0
  199. data/vendor/FreeImage/Source/LibJPEG/wrppm.c +269 -0
  200. data/vendor/FreeImage/Source/LibJPEG/wrrle.c +305 -0
  201. data/vendor/FreeImage/Source/LibJPEG/wrtarga.c +253 -0
  202. data/vendor/FreeImage/Source/LibJXR/common/include/guiddef.h +230 -0
  203. data/vendor/FreeImage/Source/LibJXR/common/include/wmsal.h +757 -0
  204. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstring.h +342 -0
  205. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_adt.h +71 -0
  206. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_strict.h +1096 -0
  207. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_undef.h +406 -0
  208. data/vendor/FreeImage/Source/LibJXR/image/decode/JXRTranscode.c +987 -0
  209. data/vendor/FreeImage/Source/LibJXR/image/decode/decode.c +200 -0
  210. data/vendor/FreeImage/Source/LibJXR/image/decode/decode.h +143 -0
  211. data/vendor/FreeImage/Source/LibJXR/image/decode/postprocess.c +288 -0
  212. data/vendor/FreeImage/Source/LibJXR/image/decode/segdec.c +1205 -0
  213. data/vendor/FreeImage/Source/LibJXR/image/decode/strInvTransform.c +1888 -0
  214. data/vendor/FreeImage/Source/LibJXR/image/decode/strPredQuantDec.c +539 -0
  215. data/vendor/FreeImage/Source/LibJXR/image/decode/strdec.c +3628 -0
  216. data/vendor/FreeImage/Source/LibJXR/image/decode/strdec_x86.c +1640 -0
  217. data/vendor/FreeImage/Source/LibJXR/image/encode/encode.c +144 -0
  218. data/vendor/FreeImage/Source/LibJXR/image/encode/encode.h +113 -0
  219. data/vendor/FreeImage/Source/LibJXR/image/encode/segenc.c +1186 -0
  220. data/vendor/FreeImage/Source/LibJXR/image/encode/strFwdTransform.c +1111 -0
  221. data/vendor/FreeImage/Source/LibJXR/image/encode/strPredQuantEnc.c +511 -0
  222. data/vendor/FreeImage/Source/LibJXR/image/encode/strenc.c +2370 -0
  223. data/vendor/FreeImage/Source/LibJXR/image/encode/strenc_x86.c +409 -0
  224. data/vendor/FreeImage/Source/LibJXR/image/sys/adapthuff.c +511 -0
  225. data/vendor/FreeImage/Source/LibJXR/image/sys/ansi.h +61 -0
  226. data/vendor/FreeImage/Source/LibJXR/image/sys/common.h +131 -0
  227. data/vendor/FreeImage/Source/LibJXR/image/sys/image.c +183 -0
  228. data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimer.h +115 -0
  229. data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimerANSI.c +274 -0
  230. data/vendor/FreeImage/Source/LibJXR/image/sys/strPredQuant.c +306 -0
  231. data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.c +85 -0
  232. data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.h +50 -0
  233. data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.c +1251 -0
  234. data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.h +681 -0
  235. data/vendor/FreeImage/Source/LibJXR/image/sys/windowsmediaphoto.h +515 -0
  236. data/vendor/FreeImage/Source/LibJXR/image/sys/xplatform_image.h +84 -0
  237. data/vendor/FreeImage/Source/LibJXR/image/x86/x86.h +58 -0
  238. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.c +930 -0
  239. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.h +636 -0
  240. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlueJxr.c +2246 -0
  241. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGluePFC.c +2338 -0
  242. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.c +905 -0
  243. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.h +258 -0
  244. data/vendor/FreeImage/Source/LibOpenJPEG/bio.c +188 -0
  245. data/vendor/FreeImage/Source/LibOpenJPEG/bio.h +128 -0
  246. data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.c +239 -0
  247. data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.h +68 -0
  248. data/vendor/FreeImage/Source/LibOpenJPEG/cio.c +644 -0
  249. data/vendor/FreeImage/Source/LibOpenJPEG/cio.h +393 -0
  250. data/vendor/FreeImage/Source/LibOpenJPEG/dwt.c +919 -0
  251. data/vendor/FreeImage/Source/LibOpenJPEG/dwt.h +116 -0
  252. data/vendor/FreeImage/Source/LibOpenJPEG/event.c +141 -0
  253. data/vendor/FreeImage/Source/LibOpenJPEG/event.h +97 -0
  254. data/vendor/FreeImage/Source/LibOpenJPEG/function_list.c +114 -0
  255. data/vendor/FreeImage/Source/LibOpenJPEG/function_list.h +126 -0
  256. data/vendor/FreeImage/Source/LibOpenJPEG/image.c +235 -0
  257. data/vendor/FreeImage/Source/LibOpenJPEG/image.h +63 -0
  258. data/vendor/FreeImage/Source/LibOpenJPEG/indexbox_manager.h +148 -0
  259. data/vendor/FreeImage/Source/LibOpenJPEG/invert.c +289 -0
  260. data/vendor/FreeImage/Source/LibOpenJPEG/invert.h +59 -0
  261. data/vendor/FreeImage/Source/LibOpenJPEG/j2k.c +10238 -0
  262. data/vendor/FreeImage/Source/LibOpenJPEG/j2k.h +838 -0
  263. data/vendor/FreeImage/Source/LibOpenJPEG/jp2.c +2776 -0
  264. data/vendor/FreeImage/Source/LibOpenJPEG/jp2.h +490 -0
  265. data/vendor/FreeImage/Source/LibOpenJPEG/mct.c +319 -0
  266. data/vendor/FreeImage/Source/LibOpenJPEG/mct.h +149 -0
  267. data/vendor/FreeImage/Source/LibOpenJPEG/mqc.c +604 -0
  268. data/vendor/FreeImage/Source/LibOpenJPEG/mqc.h +201 -0
  269. data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.c +955 -0
  270. data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.h +1475 -0
  271. data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.c +59 -0
  272. data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.h +54 -0
  273. data/vendor/FreeImage/Source/LibOpenJPEG/opj_codec.h +160 -0
  274. data/vendor/FreeImage/Source/LibOpenJPEG/opj_config.h +9 -0
  275. data/vendor/FreeImage/Source/LibOpenJPEG/opj_config_private.h +16 -0
  276. data/vendor/FreeImage/Source/LibOpenJPEG/opj_includes.h +175 -0
  277. data/vendor/FreeImage/Source/LibOpenJPEG/opj_intmath.h +172 -0
  278. data/vendor/FreeImage/Source/LibOpenJPEG/opj_inttypes.h +43 -0
  279. data/vendor/FreeImage/Source/LibOpenJPEG/opj_malloc.h +180 -0
  280. data/vendor/FreeImage/Source/LibOpenJPEG/opj_stdint.h +47 -0
  281. data/vendor/FreeImage/Source/LibOpenJPEG/phix_manager.c +191 -0
  282. data/vendor/FreeImage/Source/LibOpenJPEG/pi.c +1870 -0
  283. data/vendor/FreeImage/Source/LibOpenJPEG/pi.h +182 -0
  284. data/vendor/FreeImage/Source/LibOpenJPEG/ppix_manager.c +194 -0
  285. data/vendor/FreeImage/Source/LibOpenJPEG/raw.c +89 -0
  286. data/vendor/FreeImage/Source/LibOpenJPEG/raw.h +100 -0
  287. data/vendor/FreeImage/Source/LibOpenJPEG/t1.c +1751 -0
  288. data/vendor/FreeImage/Source/LibOpenJPEG/t1.h +157 -0
  289. data/vendor/FreeImage/Source/LibOpenJPEG/t1_generate_luts.c +276 -0
  290. data/vendor/FreeImage/Source/LibOpenJPEG/t1_luts.h +143 -0
  291. data/vendor/FreeImage/Source/LibOpenJPEG/t2.c +1334 -0
  292. data/vendor/FreeImage/Source/LibOpenJPEG/t2.h +127 -0
  293. data/vendor/FreeImage/Source/LibOpenJPEG/tcd.c +2123 -0
  294. data/vendor/FreeImage/Source/LibOpenJPEG/tcd.h +348 -0
  295. data/vendor/FreeImage/Source/LibOpenJPEG/tgt.c +331 -0
  296. data/vendor/FreeImage/Source/LibOpenJPEG/tgt.h +140 -0
  297. data/vendor/FreeImage/Source/LibOpenJPEG/thix_manager.c +134 -0
  298. data/vendor/FreeImage/Source/LibOpenJPEG/tpix_manager.c +185 -0
  299. data/vendor/FreeImage/Source/LibPNG/example.c +1061 -0
  300. data/vendor/FreeImage/Source/LibPNG/png.c +4493 -0
  301. data/vendor/FreeImage/Source/LibPNG/png.h +3282 -0
  302. data/vendor/FreeImage/Source/LibPNG/pngconf.h +644 -0
  303. data/vendor/FreeImage/Source/LibPNG/pngdebug.h +154 -0
  304. data/vendor/FreeImage/Source/LibPNG/pngerror.c +963 -0
  305. data/vendor/FreeImage/Source/LibPNG/pngget.c +1213 -0
  306. data/vendor/FreeImage/Source/LibPNG/pnginfo.h +260 -0
  307. data/vendor/FreeImage/Source/LibPNG/pnglibconf.h +218 -0
  308. data/vendor/FreeImage/Source/LibPNG/pngmem.c +281 -0
  309. data/vendor/FreeImage/Source/LibPNG/pngpread.c +1168 -0
  310. data/vendor/FreeImage/Source/LibPNG/pngpriv.h +1944 -0
  311. data/vendor/FreeImage/Source/LibPNG/pngread.c +4121 -0
  312. data/vendor/FreeImage/Source/LibPNG/pngrio.c +120 -0
  313. data/vendor/FreeImage/Source/LibPNG/pngrtran.c +4994 -0
  314. data/vendor/FreeImage/Source/LibPNG/pngrutil.c +4474 -0
  315. data/vendor/FreeImage/Source/LibPNG/pngset.c +1611 -0
  316. data/vendor/FreeImage/Source/LibPNG/pngstruct.h +489 -0
  317. data/vendor/FreeImage/Source/LibPNG/pngtest.c +2011 -0
  318. data/vendor/FreeImage/Source/LibPNG/pngtrans.c +849 -0
  319. data/vendor/FreeImage/Source/LibPNG/pngwio.c +168 -0
  320. data/vendor/FreeImage/Source/LibPNG/pngwrite.c +2455 -0
  321. data/vendor/FreeImage/Source/LibPNG/pngwtran.c +574 -0
  322. data/vendor/FreeImage/Source/LibPNG/pngwutil.c +3029 -0
  323. data/vendor/FreeImage/Source/LibRawLite/dcraw/dcraw.c +15462 -0
  324. data/vendor/FreeImage/Source/LibRawLite/internal/aahd_demosaic.cpp +706 -0
  325. data/vendor/FreeImage/Source/LibRawLite/internal/dcb_demosaicing.c +710 -0
  326. data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_common.cpp +13593 -0
  327. data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_fileio.cpp +240 -0
  328. data/vendor/FreeImage/Source/LibRawLite/internal/defines.h +167 -0
  329. data/vendor/FreeImage/Source/LibRawLite/internal/demosaic_packs.cpp +99 -0
  330. data/vendor/FreeImage/Source/LibRawLite/internal/dht_demosaic.cpp +873 -0
  331. data/vendor/FreeImage/Source/LibRawLite/internal/libraw_internal_funcs.h +282 -0
  332. data/vendor/FreeImage/Source/LibRawLite/internal/libraw_x3f.cpp +1919 -0
  333. data/vendor/FreeImage/Source/LibRawLite/internal/var_defines.h +216 -0
  334. data/vendor/FreeImage/Source/LibRawLite/internal/wf_filtering.cpp +1950 -0
  335. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw.h +338 -0
  336. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_alloc.h +99 -0
  337. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_const.h +233 -0
  338. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_datastream.h +238 -0
  339. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_internal.h +225 -0
  340. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_types.h +442 -0
  341. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_version.h +62 -0
  342. data/vendor/FreeImage/Source/LibRawLite/src/libraw_c_api.cpp +230 -0
  343. data/vendor/FreeImage/Source/LibRawLite/src/libraw_cxx.cpp +4533 -0
  344. data/vendor/FreeImage/Source/LibRawLite/src/libraw_datastream.cpp +703 -0
  345. data/vendor/FreeImage/Source/LibTIFF4/mkg3states.c +451 -0
  346. data/vendor/FreeImage/Source/LibTIFF4/mkspans.c +82 -0
  347. data/vendor/FreeImage/Source/LibTIFF4/t4.h +292 -0
  348. data/vendor/FreeImage/Source/LibTIFF4/tif_aux.c +358 -0
  349. data/vendor/FreeImage/Source/LibTIFF4/tif_close.c +140 -0
  350. data/vendor/FreeImage/Source/LibTIFF4/tif_codec.c +166 -0
  351. data/vendor/FreeImage/Source/LibTIFF4/tif_color.c +287 -0
  352. data/vendor/FreeImage/Source/LibTIFF4/tif_compress.c +304 -0
  353. data/vendor/FreeImage/Source/LibTIFF4/tif_config.h +97 -0
  354. data/vendor/FreeImage/Source/LibTIFF4/tif_config.vc.h +74 -0
  355. data/vendor/FreeImage/Source/LibTIFF4/tif_config.wince.h +71 -0
  356. data/vendor/FreeImage/Source/LibTIFF4/tif_dir.c +1700 -0
  357. data/vendor/FreeImage/Source/LibTIFF4/tif_dir.h +308 -0
  358. data/vendor/FreeImage/Source/LibTIFF4/tif_dirinfo.c +959 -0
  359. data/vendor/FreeImage/Source/LibTIFF4/tif_dirread.c +5640 -0
  360. data/vendor/FreeImage/Source/LibTIFF4/tif_dirwrite.c +2910 -0
  361. data/vendor/FreeImage/Source/LibTIFF4/tif_dumpmode.c +143 -0
  362. data/vendor/FreeImage/Source/LibTIFF4/tif_error.c +80 -0
  363. data/vendor/FreeImage/Source/LibTIFF4/tif_extension.c +118 -0
  364. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.c +1595 -0
  365. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.h +538 -0
  366. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3sm.c +1260 -0
  367. data/vendor/FreeImage/Source/LibTIFF4/tif_flush.c +118 -0
  368. data/vendor/FreeImage/Source/LibTIFF4/tif_getimage.c +2890 -0
  369. data/vendor/FreeImage/Source/LibTIFF4/tif_jbig.c +213 -0
  370. data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg.c +2354 -0
  371. data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg_12.c +65 -0
  372. data/vendor/FreeImage/Source/LibTIFF4/tif_luv.c +1683 -0
  373. data/vendor/FreeImage/Source/LibTIFF4/tif_lzma.c +495 -0
  374. data/vendor/FreeImage/Source/LibTIFF4/tif_lzw.c +1169 -0
  375. data/vendor/FreeImage/Source/LibTIFF4/tif_next.c +181 -0
  376. data/vendor/FreeImage/Source/LibTIFF4/tif_ojpeg.c +2501 -0
  377. data/vendor/FreeImage/Source/LibTIFF4/tif_open.c +725 -0
  378. data/vendor/FreeImage/Source/LibTIFF4/tif_packbits.c +300 -0
  379. data/vendor/FreeImage/Source/LibTIFF4/tif_pixarlog.c +1442 -0
  380. data/vendor/FreeImage/Source/LibTIFF4/tif_predict.c +764 -0
  381. data/vendor/FreeImage/Source/LibTIFF4/tif_predict.h +77 -0
  382. data/vendor/FreeImage/Source/LibTIFF4/tif_print.c +716 -0
  383. data/vendor/FreeImage/Source/LibTIFF4/tif_read.c +1086 -0
  384. data/vendor/FreeImage/Source/LibTIFF4/tif_strip.c +383 -0
  385. data/vendor/FreeImage/Source/LibTIFF4/tif_swab.c +310 -0
  386. data/vendor/FreeImage/Source/LibTIFF4/tif_thunder.c +207 -0
  387. data/vendor/FreeImage/Source/LibTIFF4/tif_tile.c +299 -0
  388. data/vendor/FreeImage/Source/LibTIFF4/tif_unix.c +325 -0
  389. data/vendor/FreeImage/Source/LibTIFF4/tif_version.c +40 -0
  390. data/vendor/FreeImage/Source/LibTIFF4/tif_vms.c +603 -0
  391. data/vendor/FreeImage/Source/LibTIFF4/tif_warning.c +81 -0
  392. data/vendor/FreeImage/Source/LibTIFF4/tif_win32.c +443 -0
  393. data/vendor/FreeImage/Source/LibTIFF4/tif_wince.c +293 -0
  394. data/vendor/FreeImage/Source/LibTIFF4/tif_write.c +771 -0
  395. data/vendor/FreeImage/Source/LibTIFF4/tif_zip.c +472 -0
  396. data/vendor/FreeImage/Source/LibTIFF4/tiff.h +681 -0
  397. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.h +170 -0
  398. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.vc.h +160 -0
  399. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.wince.h +121 -0
  400. data/vendor/FreeImage/Source/LibTIFF4/tiffio.h +557 -0
  401. data/vendor/FreeImage/Source/LibTIFF4/tiffiop.h +367 -0
  402. data/vendor/FreeImage/Source/LibTIFF4/tiffvers.h +9 -0
  403. data/vendor/FreeImage/Source/LibTIFF4/uvcode.h +180 -0
  404. data/vendor/FreeImage/Source/LibWebP/src/dec/alphai.h +55 -0
  405. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.alpha.c +167 -0
  406. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.buffer.c +249 -0
  407. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.frame.c +827 -0
  408. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.idec.c +857 -0
  409. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.io.c +640 -0
  410. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.quant.c +110 -0
  411. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.tree.c +525 -0
  412. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8.c +663 -0
  413. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8l.c +1584 -0
  414. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.webp.c +834 -0
  415. data/vendor/FreeImage/Source/LibWebP/src/dec/decode_vp8.h +185 -0
  416. data/vendor/FreeImage/Source/LibWebP/src/dec/vp8i.h +353 -0
  417. data/vendor/FreeImage/Source/LibWebP/src/dec/vp8li.h +136 -0
  418. data/vendor/FreeImage/Source/LibWebP/src/dec/webpi.h +120 -0
  419. data/vendor/FreeImage/Source/LibWebP/src/demux/demux.demux.c +957 -0
  420. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing.c +377 -0
  421. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_mips_dsp_r2.c +139 -0
  422. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_sse2.c +296 -0
  423. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb.c +68 -0
  424. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_mips_dsp_r2.c +108 -0
  425. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_sse2.c +62 -0
  426. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost.c +412 -0
  427. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips32.c +154 -0
  428. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips_dsp_r2.c +107 -0
  429. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_sse2.c +121 -0
  430. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cpu.c +138 -0
  431. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec.c +760 -0
  432. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_clip_tables.c +366 -0
  433. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips32.c +585 -0
  434. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c +992 -0
  435. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_neon.c +1489 -0
  436. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_sse2.c +1284 -0
  437. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc.c +788 -0
  438. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_avx2.c +24 -0
  439. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips32.c +670 -0
  440. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c +1510 -0
  441. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_neon.c +932 -0
  442. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_sse2.c +940 -0
  443. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters.c +240 -0
  444. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c +404 -0
  445. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_sse2.c +349 -0
  446. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.h +434 -0
  447. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless.c +1838 -0
  448. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips32.c +416 -0
  449. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c +921 -0
  450. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_neon.c +357 -0
  451. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_sse2.c +535 -0
  452. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler.c +115 -0
  453. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips32.c +192 -0
  454. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips_dsp_r2.c +210 -0
  455. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling.c +252 -0
  456. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c +280 -0
  457. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_neon.c +267 -0
  458. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_sse2.c +214 -0
  459. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv.c +166 -0
  460. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips32.c +100 -0
  461. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c +131 -0
  462. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_sse2.c +322 -0
  463. data/vendor/FreeImage/Source/LibWebP/src/dsp/lossless.h +313 -0
  464. data/vendor/FreeImage/Source/LibWebP/src/dsp/mips_macro.h +200 -0
  465. data/vendor/FreeImage/Source/LibWebP/src/dsp/neon.h +82 -0
  466. data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv.h +321 -0
  467. data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv_tables_sse2.h +536 -0
  468. data/vendor/FreeImage/Source/LibWebP/src/enc/backward_references.h +202 -0
  469. data/vendor/FreeImage/Source/LibWebP/src/enc/cost.h +69 -0
  470. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.alpha.c +440 -0
  471. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.analysis.c +501 -0
  472. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.backward_references.c +1076 -0
  473. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.config.c +163 -0
  474. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.cost.c +355 -0
  475. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.filter.c +296 -0
  476. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.frame.c +850 -0
  477. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.histogram.c +897 -0
  478. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.iterator.c +456 -0
  479. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.near_lossless.c +160 -0
  480. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture.c +290 -0
  481. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_csp.c +1100 -0
  482. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_psnr.c +150 -0
  483. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_rescale.c +285 -0
  484. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_tools.c +206 -0
  485. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.quant.c +1191 -0
  486. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.syntax.c +383 -0
  487. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.token.c +285 -0
  488. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.tree.c +504 -0
  489. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.vp8l.c +1437 -0
  490. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.webpenc.c +379 -0
  491. data/vendor/FreeImage/Source/LibWebP/src/enc/histogram.h +114 -0
  492. data/vendor/FreeImage/Source/LibWebP/src/enc/vp8enci.h +551 -0
  493. data/vendor/FreeImage/Source/LibWebP/src/enc/vp8li.h +78 -0
  494. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.anim_encode.c +1241 -0
  495. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxedit.c +696 -0
  496. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxinternal.c +551 -0
  497. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxread.c +544 -0
  498. data/vendor/FreeImage/Source/LibWebP/src/mux/muxi.h +232 -0
  499. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader.h +168 -0
  500. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader_inl.h +172 -0
  501. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_writer.h +120 -0
  502. data/vendor/FreeImage/Source/LibWebP/src/utils/color_cache.h +74 -0
  503. data/vendor/FreeImage/Source/LibWebP/src/utils/endian_inl.h +100 -0
  504. data/vendor/FreeImage/Source/LibWebP/src/utils/filters.h +32 -0
  505. data/vendor/FreeImage/Source/LibWebP/src/utils/huffman.h +67 -0
  506. data/vendor/FreeImage/Source/LibWebP/src/utils/huffman_encode.h +60 -0
  507. data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels.h +36 -0
  508. data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels_dec.h +35 -0
  509. data/vendor/FreeImage/Source/LibWebP/src/utils/random.h +63 -0
  510. data/vendor/FreeImage/Source/LibWebP/src/utils/rescaler.h +78 -0
  511. data/vendor/FreeImage/Source/LibWebP/src/utils/thread.h +93 -0
  512. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_reader.c +208 -0
  513. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_writer.c +308 -0
  514. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.color_cache.c +49 -0
  515. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.filters.c +76 -0
  516. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.h +121 -0
  517. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman.c +205 -0
  518. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman_encode.c +417 -0
  519. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels.c +140 -0
  520. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels_dec.c +279 -0
  521. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.random.c +43 -0
  522. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.rescaler.c +82 -0
  523. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.thread.c +309 -0
  524. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.utils.c +211 -0
  525. data/vendor/FreeImage/Source/LibWebP/src/webp/decode.h +493 -0
  526. data/vendor/FreeImage/Source/LibWebP/src/webp/demux.h +224 -0
  527. data/vendor/FreeImage/Source/LibWebP/src/webp/encode.h +515 -0
  528. data/vendor/FreeImage/Source/LibWebP/src/webp/format_constants.h +88 -0
  529. data/vendor/FreeImage/Source/LibWebP/src/webp/mux.h +507 -0
  530. data/vendor/FreeImage/Source/LibWebP/src/webp/mux_types.h +97 -0
  531. data/vendor/FreeImage/Source/LibWebP/src/webp/types.h +52 -0
  532. data/vendor/FreeImage/Source/MapIntrospector.h +212 -0
  533. data/vendor/FreeImage/Source/Metadata/Exif.cpp +1253 -0
  534. data/vendor/FreeImage/Source/Metadata/FIRational.cpp +176 -0
  535. data/vendor/FreeImage/Source/Metadata/FIRational.h +108 -0
  536. data/vendor/FreeImage/Source/Metadata/FreeImageTag.cpp +353 -0
  537. data/vendor/FreeImage/Source/Metadata/FreeImageTag.h +500 -0
  538. data/vendor/FreeImage/Source/Metadata/IPTC.cpp +342 -0
  539. data/vendor/FreeImage/Source/Metadata/TagConversion.cpp +1094 -0
  540. data/vendor/FreeImage/Source/Metadata/TagLib.cpp +1618 -0
  541. data/vendor/FreeImage/Source/Metadata/XTIFF.cpp +766 -0
  542. data/vendor/FreeImage/Source/OpenEXR/Half/eLut.cpp +114 -0
  543. data/vendor/FreeImage/Source/OpenEXR/Half/eLut.h +71 -0
  544. data/vendor/FreeImage/Source/OpenEXR/Half/half.cpp +310 -0
  545. data/vendor/FreeImage/Source/OpenEXR/Half/half.h +757 -0
  546. data/vendor/FreeImage/Source/OpenEXR/Half/halfExport.h +27 -0
  547. data/vendor/FreeImage/Source/OpenEXR/Half/halfFunction.h +179 -0
  548. data/vendor/FreeImage/Source/OpenEXR/Half/halfLimits.h +102 -0
  549. data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.cpp +164 -0
  550. data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.h +16391 -0
  551. data/vendor/FreeImage/Source/OpenEXR/Iex/Iex.h +60 -0
  552. data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.cpp +156 -0
  553. data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.h +264 -0
  554. data/vendor/FreeImage/Source/OpenEXR/Iex/IexErrnoExc.h +208 -0
  555. data/vendor/FreeImage/Source/OpenEXR/Iex/IexExport.h +51 -0
  556. data/vendor/FreeImage/Source/OpenEXR/Iex/IexForward.h +229 -0
  557. data/vendor/FreeImage/Source/OpenEXR/Iex/IexMacros.h +170 -0
  558. data/vendor/FreeImage/Source/OpenEXR/Iex/IexMathExc.h +57 -0
  559. data/vendor/FreeImage/Source/OpenEXR/Iex/IexNamespace.h +112 -0
  560. data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.cpp +873 -0
  561. data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.h +97 -0
  562. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.cpp +113 -0
  563. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.h +146 -0
  564. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.cpp +530 -0
  565. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.h +91 -0
  566. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathIeeeExc.h +62 -0
  567. data/vendor/FreeImage/Source/OpenEXR/IlmBaseConfig.h +61 -0
  568. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.cpp +633 -0
  569. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.h +324 -0
  570. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfArray.h +285 -0
  571. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.cpp +158 -0
  572. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.h +407 -0
  573. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAutoArray.h +95 -0
  574. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.cpp +1072 -0
  575. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.h +118 -0
  576. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.cpp +111 -0
  577. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.h +87 -0
  578. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.cpp +1438 -0
  579. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.h +555 -0
  580. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.cpp +322 -0
  581. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.h +436 -0
  582. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.cpp +150 -0
  583. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.h +74 -0
  584. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCheckedArithmetic.h +163 -0
  585. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.cpp +151 -0
  586. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.h +131 -0
  587. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.cpp +87 -0
  588. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.h +73 -0
  589. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.cpp +591 -0
  590. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.h +142 -0
  591. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompression.h +84 -0
  592. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.cpp +78 -0
  593. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.h +64 -0
  594. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.cpp +226 -0
  595. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.h +265 -0
  596. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.cpp +143 -0
  597. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.h +107 -0
  598. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.cpp +110 -0
  599. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.h +132 -0
  600. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.cpp +230 -0
  601. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.h +339 -0
  602. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageState.h +96 -0
  603. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.cpp +78 -0
  604. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.h +68 -0
  605. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.cpp +2025 -0
  606. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.h +276 -0
  607. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.cpp +149 -0
  608. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.h +181 -0
  609. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.cpp +1552 -0
  610. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.h +244 -0
  611. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.cpp +107 -0
  612. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.h +168 -0
  613. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.cpp +1979 -0
  614. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.h +437 -0
  615. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.cpp +273 -0
  616. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.h +362 -0
  617. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.cpp +2055 -0
  618. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.h +475 -0
  619. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.cpp +250 -0
  620. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.h +394 -0
  621. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.cpp +57 -0
  622. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.h +59 -0
  623. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.cpp +3424 -0
  624. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.h +210 -0
  625. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressorSimd.h +2145 -0
  626. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.cpp +335 -0
  627. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.h +336 -0
  628. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp +76 -0
  629. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.h +68 -0
  630. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfExport.h +46 -0
  631. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.cpp +768 -0
  632. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.h +148 -0
  633. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.cpp +57 -0
  634. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.h +58 -0
  635. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.cpp +84 -0
  636. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.h +76 -0
  637. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfForward.h +127 -0
  638. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.cpp +228 -0
  639. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.h +386 -0
  640. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.cpp +76 -0
  641. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.h +94 -0
  642. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.cpp +76 -0
  643. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.h +58 -0
  644. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.cpp +112 -0
  645. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.h +62 -0
  646. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.cpp +1283 -0
  647. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.h +699 -0
  648. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.cpp +1114 -0
  649. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.h +82 -0
  650. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.cpp +110 -0
  651. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.h +255 -0
  652. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.cpp +895 -0
  653. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.h +240 -0
  654. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.cpp +114 -0
  655. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.h +84 -0
  656. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.cpp +51 -0
  657. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.h +69 -0
  658. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputStreamMutex.h +68 -0
  659. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInt64.h +56 -0
  660. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.cpp +57 -0
  661. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.h +58 -0
  662. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.cpp +217 -0
  663. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.h +167 -0
  664. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.cpp +99 -0
  665. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.h +73 -0
  666. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrder.h +69 -0
  667. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.cpp +78 -0
  668. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.h +72 -0
  669. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.cpp +178 -0
  670. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.h +188 -0
  671. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.cpp +263 -0
  672. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.h +83 -0
  673. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.cpp +1872 -0
  674. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.h +466 -0
  675. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.cpp +783 -0
  676. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.h +128 -0
  677. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.cpp +519 -0
  678. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.h +118 -0
  679. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.cpp +435 -0
  680. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.h +187 -0
  681. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfName.h +150 -0
  682. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfNamespace.h +115 -0
  683. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.cpp +126 -0
  684. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.h +110 -0
  685. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOptimizedPixelReading.h +646 -0
  686. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.cpp +1378 -0
  687. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.h +263 -0
  688. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.cpp +105 -0
  689. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.h +77 -0
  690. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.cpp +52 -0
  691. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.h +62 -0
  692. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputStreamMutex.h +70 -0
  693. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartHelper.h +262 -0
  694. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.cpp +63 -0
  695. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.h +62 -0
  696. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPixelType.h +67 -0
  697. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.cpp +667 -0
  698. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.h +117 -0
  699. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.cpp +104 -0
  700. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.h +135 -0
  701. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.cpp +103 -0
  702. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.h +70 -0
  703. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.cpp +553 -0
  704. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.h +109 -0
  705. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.cpp +127 -0
  706. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.h +98 -0
  707. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.cpp +74 -0
  708. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.h +69 -0
  709. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgba.h +109 -0
  710. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.cpp +1405 -0
  711. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.h +346 -0
  712. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.cpp +497 -0
  713. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.h +259 -0
  714. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.cpp +157 -0
  715. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.h +63 -0
  716. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.cpp +220 -0
  717. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.h +80 -0
  718. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.cpp +1702 -0
  719. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.h +210 -0
  720. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSimd.h +59 -0
  721. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.cpp +125 -0
  722. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.h +382 -0
  723. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.cpp +242 -0
  724. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.h +160 -0
  725. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.cpp +80 -0
  726. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.h +71 -0
  727. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.cpp +100 -0
  728. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.h +74 -0
  729. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp +129 -0
  730. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.h +172 -0
  731. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.cpp +216 -0
  732. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.h +97 -0
  733. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.cpp +62 -0
  734. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.h +95 -0
  735. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescription.h +107 -0
  736. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.cpp +86 -0
  737. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.h +72 -0
  738. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.cpp +552 -0
  739. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.h +125 -0
  740. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.cpp +1533 -0
  741. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.h +401 -0
  742. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.cpp +208 -0
  743. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.h +100 -0
  744. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.cpp +389 -0
  745. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.h +106 -0
  746. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.cpp +1841 -0
  747. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.h +495 -0
  748. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.cpp +228 -0
  749. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.h +105 -0
  750. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.cpp +1163 -0
  751. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.h +482 -0
  752. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.cpp +431 -0
  753. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.h +242 -0
  754. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.cpp +79 -0
  755. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.h +74 -0
  756. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.cpp +217 -0
  757. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.h +100 -0
  758. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.cpp +60 -0
  759. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.h +136 -0
  760. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.cpp +391 -0
  761. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.h +78 -0
  762. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfXdr.h +927 -0
  763. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.cpp +196 -0
  764. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.h +78 -0
  765. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.cpp +127 -0
  766. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.h +89 -0
  767. data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.cpp +136 -0
  768. data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.h +16396 -0
  769. data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.cpp +573 -0
  770. data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.h +98334 -0
  771. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.cpp +80 -0
  772. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.h +143 -0
  773. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadExport.h +46 -0
  774. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadForward.h +52 -0
  775. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.cpp +59 -0
  776. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.h +160 -0
  777. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexPosix.cpp +85 -0
  778. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexWin32.cpp +79 -0
  779. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadNamespace.h +114 -0
  780. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.cpp +483 -0
  781. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.h +160 -0
  782. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPosix.cpp +98 -0
  783. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.cpp +60 -0
  784. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.h +112 -0
  785. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosix.cpp +106 -0
  786. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosixCompat.cpp +155 -0
  787. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphoreWin32.cpp +153 -0
  788. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadWin32.cpp +100 -0
  789. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.cpp +37 -0
  790. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.h +849 -0
  791. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBoxAlgo.h +1016 -0
  792. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColor.h +736 -0
  793. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.cpp +178 -0
  794. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.h +257 -0
  795. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathEuler.h +926 -0
  796. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExc.h +73 -0
  797. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExport.h +46 -0
  798. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathForward.h +72 -0
  799. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrame.h +192 -0
  800. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustum.h +741 -0
  801. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustumTest.h +417 -0
  802. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.cpp +181 -0
  803. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.h +269 -0
  804. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGL.h +166 -0
  805. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGLU.h +54 -0
  806. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathHalfLimits.h +68 -0
  807. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInt64.h +62 -0
  808. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInterval.h +226 -0
  809. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLimits.h +268 -0
  810. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLine.h +185 -0
  811. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLineAlgo.h +288 -0
  812. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMath.h +208 -0
  813. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrix.h +3441 -0
  814. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.cpp +1252 -0
  815. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.h +1425 -0
  816. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathNamespace.h +115 -0
  817. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlane.h +257 -0
  818. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlatform.h +112 -0
  819. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathQuat.h +964 -0
  820. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.cpp +194 -0
  821. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.h +401 -0
  822. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRoots.h +219 -0
  823. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.cpp +54 -0
  824. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.h +656 -0
  825. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathSphere.h +177 -0
  826. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.cpp +583 -0
  827. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.h +2227 -0
  828. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVecAlgo.h +147 -0
  829. data/vendor/FreeImage/Source/OpenEXR/OpenEXRConfig.h +72 -0
  830. data/vendor/FreeImage/Source/Plugin.h +144 -0
  831. data/vendor/FreeImage/Source/Quantizers.h +354 -0
  832. data/vendor/FreeImage/Source/ToneMapping.h +44 -0
  833. data/vendor/FreeImage/Source/Utilities.h +516 -0
  834. data/vendor/FreeImage/Source/ZLib/adler32.c +179 -0
  835. data/vendor/FreeImage/Source/ZLib/compress.c +80 -0
  836. data/vendor/FreeImage/Source/ZLib/crc32.c +425 -0
  837. data/vendor/FreeImage/Source/ZLib/crc32.h +441 -0
  838. data/vendor/FreeImage/Source/ZLib/deflate.c +1967 -0
  839. data/vendor/FreeImage/Source/ZLib/deflate.h +346 -0
  840. data/vendor/FreeImage/Source/ZLib/gzclose.c +25 -0
  841. data/vendor/FreeImage/Source/ZLib/gzguts.h +209 -0
  842. data/vendor/FreeImage/Source/ZLib/gzlib.c +634 -0
  843. data/vendor/FreeImage/Source/ZLib/gzread.c +594 -0
  844. data/vendor/FreeImage/Source/ZLib/gzwrite.c +577 -0
  845. data/vendor/FreeImage/Source/ZLib/infback.c +640 -0
  846. data/vendor/FreeImage/Source/ZLib/inffast.c +340 -0
  847. data/vendor/FreeImage/Source/ZLib/inffast.h +11 -0
  848. data/vendor/FreeImage/Source/ZLib/inffixed.h +94 -0
  849. data/vendor/FreeImage/Source/ZLib/inflate.c +1512 -0
  850. data/vendor/FreeImage/Source/ZLib/inflate.h +122 -0
  851. data/vendor/FreeImage/Source/ZLib/inftrees.c +306 -0
  852. data/vendor/FreeImage/Source/ZLib/inftrees.h +62 -0
  853. data/vendor/FreeImage/Source/ZLib/trees.c +1226 -0
  854. data/vendor/FreeImage/Source/ZLib/trees.h +128 -0
  855. data/vendor/FreeImage/Source/ZLib/uncompr.c +59 -0
  856. data/vendor/FreeImage/Source/ZLib/zconf.h +511 -0
  857. data/vendor/FreeImage/Source/ZLib/zlib.h +1768 -0
  858. data/vendor/FreeImage/Source/ZLib/zutil.c +324 -0
  859. data/vendor/FreeImage/Source/ZLib/zutil.h +253 -0
  860. metadata +931 -0
@@ -0,0 +1,2227 @@
1
+ ///////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // Copyright (c) 2004-2012, Industrial Light & Magic, a division of Lucas
4
+ // Digital Ltd. LLC
5
+ //
6
+ // All rights reserved.
7
+ //
8
+ // Redistribution and use in source and binary forms, with or without
9
+ // modification, are permitted provided that the following conditions are
10
+ // met:
11
+ // * Redistributions of source code must retain the above copyright
12
+ // notice, this list of conditions and the following disclaimer.
13
+ // * Redistributions in binary form must reproduce the above
14
+ // copyright notice, this list of conditions and the following disclaimer
15
+ // in the documentation and/or other materials provided with the
16
+ // distribution.
17
+ // * Neither the name of Industrial Light & Magic nor the names of
18
+ // its contributors may be used to endorse or promote products derived
19
+ // from this software without specific prior written permission.
20
+ //
21
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ //
33
+ ///////////////////////////////////////////////////////////////////////////
34
+
35
+
36
+
37
+ #ifndef INCLUDED_IMATHVEC_H
38
+ #define INCLUDED_IMATHVEC_H
39
+
40
+ //----------------------------------------------------
41
+ //
42
+ // 2D, 3D and 4D point/vector class templates
43
+ //
44
+ //----------------------------------------------------
45
+
46
+ #include "ImathExc.h"
47
+ #include "ImathLimits.h"
48
+ #include "ImathMath.h"
49
+ #include "ImathNamespace.h"
50
+
51
+ #include <iostream>
52
+
53
+ #if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
54
+ // suppress exception specification warnings
55
+ #pragma warning(push)
56
+ #pragma warning(disable:4290)
57
+ #endif
58
+
59
+
60
+ IMATH_INTERNAL_NAMESPACE_HEADER_ENTER
61
+
62
+ template <class T> class Vec2;
63
+ template <class T> class Vec3;
64
+ template <class T> class Vec4;
65
+
66
+ enum InfException {INF_EXCEPTION};
67
+
68
+
69
+ template <class T> class Vec2
70
+ {
71
+ public:
72
+
73
+ //-------------------
74
+ // Access to elements
75
+ //-------------------
76
+
77
+ T x, y;
78
+
79
+ T & operator [] (int i);
80
+ const T & operator [] (int i) const;
81
+
82
+
83
+ //-------------
84
+ // Constructors
85
+ //-------------
86
+
87
+ Vec2 (); // no initialization
88
+ explicit Vec2 (T a); // (a a)
89
+ Vec2 (T a, T b); // (a b)
90
+
91
+
92
+ //---------------------------------
93
+ // Copy constructors and assignment
94
+ //---------------------------------
95
+
96
+ Vec2 (const Vec2 &v);
97
+ template <class S> Vec2 (const Vec2<S> &v);
98
+
99
+ const Vec2 & operator = (const Vec2 &v);
100
+
101
+
102
+ //----------------------
103
+ // Compatibility with Sb
104
+ //----------------------
105
+
106
+ template <class S>
107
+ void setValue (S a, S b);
108
+
109
+ template <class S>
110
+ void setValue (const Vec2<S> &v);
111
+
112
+ template <class S>
113
+ void getValue (S &a, S &b) const;
114
+
115
+ template <class S>
116
+ void getValue (Vec2<S> &v) const;
117
+
118
+ T * getValue ();
119
+ const T * getValue () const;
120
+
121
+
122
+ //---------
123
+ // Equality
124
+ //---------
125
+
126
+ template <class S>
127
+ bool operator == (const Vec2<S> &v) const;
128
+
129
+ template <class S>
130
+ bool operator != (const Vec2<S> &v) const;
131
+
132
+
133
+ //-----------------------------------------------------------------------
134
+ // Compare two vectors and test if they are "approximately equal":
135
+ //
136
+ // equalWithAbsError (v, e)
137
+ //
138
+ // Returns true if the coefficients of this and v are the same with
139
+ // an absolute error of no more than e, i.e., for all i
140
+ //
141
+ // abs (this[i] - v[i]) <= e
142
+ //
143
+ // equalWithRelError (v, e)
144
+ //
145
+ // Returns true if the coefficients of this and v are the same with
146
+ // a relative error of no more than e, i.e., for all i
147
+ //
148
+ // abs (this[i] - v[i]) <= e * abs (this[i])
149
+ //-----------------------------------------------------------------------
150
+
151
+ bool equalWithAbsError (const Vec2<T> &v, T e) const;
152
+ bool equalWithRelError (const Vec2<T> &v, T e) const;
153
+
154
+ //------------
155
+ // Dot product
156
+ //------------
157
+
158
+ T dot (const Vec2 &v) const;
159
+ T operator ^ (const Vec2 &v) const;
160
+
161
+
162
+ //------------------------------------------------
163
+ // Right-handed cross product, i.e. z component of
164
+ // Vec3 (this->x, this->y, 0) % Vec3 (v.x, v.y, 0)
165
+ //------------------------------------------------
166
+
167
+ T cross (const Vec2 &v) const;
168
+ T operator % (const Vec2 &v) const;
169
+
170
+
171
+ //------------------------
172
+ // Component-wise addition
173
+ //------------------------
174
+
175
+ const Vec2 & operator += (const Vec2 &v);
176
+ Vec2 operator + (const Vec2 &v) const;
177
+
178
+
179
+ //---------------------------
180
+ // Component-wise subtraction
181
+ //---------------------------
182
+
183
+ const Vec2 & operator -= (const Vec2 &v);
184
+ Vec2 operator - (const Vec2 &v) const;
185
+
186
+
187
+ //------------------------------------
188
+ // Component-wise multiplication by -1
189
+ //------------------------------------
190
+
191
+ Vec2 operator - () const;
192
+ const Vec2 & negate ();
193
+
194
+
195
+ //------------------------------
196
+ // Component-wise multiplication
197
+ //------------------------------
198
+
199
+ const Vec2 & operator *= (const Vec2 &v);
200
+ const Vec2 & operator *= (T a);
201
+ Vec2 operator * (const Vec2 &v) const;
202
+ Vec2 operator * (T a) const;
203
+
204
+
205
+ //------------------------
206
+ // Component-wise division
207
+ //------------------------
208
+
209
+ const Vec2 & operator /= (const Vec2 &v);
210
+ const Vec2 & operator /= (T a);
211
+ Vec2 operator / (const Vec2 &v) const;
212
+ Vec2 operator / (T a) const;
213
+
214
+
215
+ //----------------------------------------------------------------
216
+ // Length and normalization: If v.length() is 0.0, v.normalize()
217
+ // and v.normalized() produce a null vector; v.normalizeExc() and
218
+ // v.normalizedExc() throw a NullVecExc.
219
+ // v.normalizeNonNull() and v.normalizedNonNull() are slightly
220
+ // faster than the other normalization routines, but if v.length()
221
+ // is 0.0, the result is undefined.
222
+ //----------------------------------------------------------------
223
+
224
+ T length () const;
225
+ T length2 () const;
226
+
227
+ const Vec2 & normalize (); // modifies *this
228
+ const Vec2 & normalizeExc () throw (IEX_NAMESPACE::MathExc);
229
+ const Vec2 & normalizeNonNull ();
230
+
231
+ Vec2<T> normalized () const; // does not modify *this
232
+ Vec2<T> normalizedExc () const throw (IEX_NAMESPACE::MathExc);
233
+ Vec2<T> normalizedNonNull () const;
234
+
235
+
236
+ //--------------------------------------------------------
237
+ // Number of dimensions, i.e. number of elements in a Vec2
238
+ //--------------------------------------------------------
239
+
240
+ static unsigned int dimensions() {return 2;}
241
+
242
+
243
+ //-------------------------------------------------
244
+ // Limitations of type T (see also class limits<T>)
245
+ //-------------------------------------------------
246
+
247
+ static T baseTypeMin() {return limits<T>::min();}
248
+ static T baseTypeMax() {return limits<T>::max();}
249
+ static T baseTypeSmallest() {return limits<T>::smallest();}
250
+ static T baseTypeEpsilon() {return limits<T>::epsilon();}
251
+
252
+
253
+ //--------------------------------------------------------------
254
+ // Base type -- in templates, which accept a parameter, V, which
255
+ // could be either a Vec2<T>, a Vec3<T>, or a Vec4<T> you can
256
+ // refer to T as V::BaseType
257
+ //--------------------------------------------------------------
258
+
259
+ typedef T BaseType;
260
+
261
+ private:
262
+
263
+ T lengthTiny () const;
264
+ };
265
+
266
+
267
+ template <class T> class Vec3
268
+ {
269
+ public:
270
+
271
+ //-------------------
272
+ // Access to elements
273
+ //-------------------
274
+
275
+ T x, y, z;
276
+
277
+ T & operator [] (int i);
278
+ const T & operator [] (int i) const;
279
+
280
+
281
+ //-------------
282
+ // Constructors
283
+ //-------------
284
+
285
+ Vec3 (); // no initialization
286
+ explicit Vec3 (T a); // (a a a)
287
+ Vec3 (T a, T b, T c); // (a b c)
288
+
289
+
290
+ //---------------------------------
291
+ // Copy constructors and assignment
292
+ //---------------------------------
293
+
294
+ Vec3 (const Vec3 &v);
295
+ template <class S> Vec3 (const Vec3<S> &v);
296
+
297
+ const Vec3 & operator = (const Vec3 &v);
298
+
299
+
300
+ //---------------------------------------------------------
301
+ // Vec4 to Vec3 conversion, divides x, y and z by w:
302
+ //
303
+ // The one-argument conversion function divides by w even
304
+ // if w is zero. The result depends on how the environment
305
+ // handles floating-point exceptions.
306
+ //
307
+ // The two-argument version thows an InfPointExc exception
308
+ // if w is zero or if division by w would overflow.
309
+ //---------------------------------------------------------
310
+
311
+ template <class S> explicit Vec3 (const Vec4<S> &v);
312
+ template <class S> explicit Vec3 (const Vec4<S> &v, InfException);
313
+
314
+
315
+ //----------------------
316
+ // Compatibility with Sb
317
+ //----------------------
318
+
319
+ template <class S>
320
+ void setValue (S a, S b, S c);
321
+
322
+ template <class S>
323
+ void setValue (const Vec3<S> &v);
324
+
325
+ template <class S>
326
+ void getValue (S &a, S &b, S &c) const;
327
+
328
+ template <class S>
329
+ void getValue (Vec3<S> &v) const;
330
+
331
+ T * getValue();
332
+ const T * getValue() const;
333
+
334
+
335
+ //---------
336
+ // Equality
337
+ //---------
338
+
339
+ template <class S>
340
+ bool operator == (const Vec3<S> &v) const;
341
+
342
+ template <class S>
343
+ bool operator != (const Vec3<S> &v) const;
344
+
345
+ //-----------------------------------------------------------------------
346
+ // Compare two vectors and test if they are "approximately equal":
347
+ //
348
+ // equalWithAbsError (v, e)
349
+ //
350
+ // Returns true if the coefficients of this and v are the same with
351
+ // an absolute error of no more than e, i.e., for all i
352
+ //
353
+ // abs (this[i] - v[i]) <= e
354
+ //
355
+ // equalWithRelError (v, e)
356
+ //
357
+ // Returns true if the coefficients of this and v are the same with
358
+ // a relative error of no more than e, i.e., for all i
359
+ //
360
+ // abs (this[i] - v[i]) <= e * abs (this[i])
361
+ //-----------------------------------------------------------------------
362
+
363
+ bool equalWithAbsError (const Vec3<T> &v, T e) const;
364
+ bool equalWithRelError (const Vec3<T> &v, T e) const;
365
+
366
+ //------------
367
+ // Dot product
368
+ //------------
369
+
370
+ T dot (const Vec3 &v) const;
371
+ T operator ^ (const Vec3 &v) const;
372
+
373
+
374
+ //---------------------------
375
+ // Right-handed cross product
376
+ //---------------------------
377
+
378
+ Vec3 cross (const Vec3 &v) const;
379
+ const Vec3 & operator %= (const Vec3 &v);
380
+ Vec3 operator % (const Vec3 &v) const;
381
+
382
+
383
+ //------------------------
384
+ // Component-wise addition
385
+ //------------------------
386
+
387
+ const Vec3 & operator += (const Vec3 &v);
388
+ Vec3 operator + (const Vec3 &v) const;
389
+
390
+
391
+ //---------------------------
392
+ // Component-wise subtraction
393
+ //---------------------------
394
+
395
+ const Vec3 & operator -= (const Vec3 &v);
396
+ Vec3 operator - (const Vec3 &v) const;
397
+
398
+
399
+ //------------------------------------
400
+ // Component-wise multiplication by -1
401
+ //------------------------------------
402
+
403
+ Vec3 operator - () const;
404
+ const Vec3 & negate ();
405
+
406
+
407
+ //------------------------------
408
+ // Component-wise multiplication
409
+ //------------------------------
410
+
411
+ const Vec3 & operator *= (const Vec3 &v);
412
+ const Vec3 & operator *= (T a);
413
+ Vec3 operator * (const Vec3 &v) const;
414
+ Vec3 operator * (T a) const;
415
+
416
+
417
+ //------------------------
418
+ // Component-wise division
419
+ //------------------------
420
+
421
+ const Vec3 & operator /= (const Vec3 &v);
422
+ const Vec3 & operator /= (T a);
423
+ Vec3 operator / (const Vec3 &v) const;
424
+ Vec3 operator / (T a) const;
425
+
426
+
427
+ //----------------------------------------------------------------
428
+ // Length and normalization: If v.length() is 0.0, v.normalize()
429
+ // and v.normalized() produce a null vector; v.normalizeExc() and
430
+ // v.normalizedExc() throw a NullVecExc.
431
+ // v.normalizeNonNull() and v.normalizedNonNull() are slightly
432
+ // faster than the other normalization routines, but if v.length()
433
+ // is 0.0, the result is undefined.
434
+ //----------------------------------------------------------------
435
+
436
+ T length () const;
437
+ T length2 () const;
438
+
439
+ const Vec3 & normalize (); // modifies *this
440
+ const Vec3 & normalizeExc () throw (IEX_NAMESPACE::MathExc);
441
+ const Vec3 & normalizeNonNull ();
442
+
443
+ Vec3<T> normalized () const; // does not modify *this
444
+ Vec3<T> normalizedExc () const throw (IEX_NAMESPACE::MathExc);
445
+ Vec3<T> normalizedNonNull () const;
446
+
447
+
448
+ //--------------------------------------------------------
449
+ // Number of dimensions, i.e. number of elements in a Vec3
450
+ //--------------------------------------------------------
451
+
452
+ static unsigned int dimensions() {return 3;}
453
+
454
+
455
+ //-------------------------------------------------
456
+ // Limitations of type T (see also class limits<T>)
457
+ //-------------------------------------------------
458
+
459
+ static T baseTypeMin() {return limits<T>::min();}
460
+ static T baseTypeMax() {return limits<T>::max();}
461
+ static T baseTypeSmallest() {return limits<T>::smallest();}
462
+ static T baseTypeEpsilon() {return limits<T>::epsilon();}
463
+
464
+
465
+ //--------------------------------------------------------------
466
+ // Base type -- in templates, which accept a parameter, V, which
467
+ // could be either a Vec2<T>, a Vec3<T>, or a Vec4<T> you can
468
+ // refer to T as V::BaseType
469
+ //--------------------------------------------------------------
470
+
471
+ typedef T BaseType;
472
+
473
+ private:
474
+
475
+ T lengthTiny () const;
476
+ };
477
+
478
+
479
+
480
+ template <class T> class Vec4
481
+ {
482
+ public:
483
+
484
+ //-------------------
485
+ // Access to elements
486
+ //-------------------
487
+
488
+ T x, y, z, w;
489
+
490
+ T & operator [] (int i);
491
+ const T & operator [] (int i) const;
492
+
493
+
494
+ //-------------
495
+ // Constructors
496
+ //-------------
497
+
498
+ Vec4 (); // no initialization
499
+ explicit Vec4 (T a); // (a a a a)
500
+ Vec4 (T a, T b, T c, T d); // (a b c d)
501
+
502
+
503
+ //---------------------------------
504
+ // Copy constructors and assignment
505
+ //---------------------------------
506
+
507
+ Vec4 (const Vec4 &v);
508
+ template <class S> Vec4 (const Vec4<S> &v);
509
+
510
+ const Vec4 & operator = (const Vec4 &v);
511
+
512
+
513
+ //-------------------------------------
514
+ // Vec3 to Vec4 conversion, sets w to 1
515
+ //-------------------------------------
516
+
517
+ template <class S> explicit Vec4 (const Vec3<S> &v);
518
+
519
+
520
+ //---------
521
+ // Equality
522
+ //---------
523
+
524
+ template <class S>
525
+ bool operator == (const Vec4<S> &v) const;
526
+
527
+ template <class S>
528
+ bool operator != (const Vec4<S> &v) const;
529
+
530
+
531
+ //-----------------------------------------------------------------------
532
+ // Compare two vectors and test if they are "approximately equal":
533
+ //
534
+ // equalWithAbsError (v, e)
535
+ //
536
+ // Returns true if the coefficients of this and v are the same with
537
+ // an absolute error of no more than e, i.e., for all i
538
+ //
539
+ // abs (this[i] - v[i]) <= e
540
+ //
541
+ // equalWithRelError (v, e)
542
+ //
543
+ // Returns true if the coefficients of this and v are the same with
544
+ // a relative error of no more than e, i.e., for all i
545
+ //
546
+ // abs (this[i] - v[i]) <= e * abs (this[i])
547
+ //-----------------------------------------------------------------------
548
+
549
+ bool equalWithAbsError (const Vec4<T> &v, T e) const;
550
+ bool equalWithRelError (const Vec4<T> &v, T e) const;
551
+
552
+
553
+ //------------
554
+ // Dot product
555
+ //------------
556
+
557
+ T dot (const Vec4 &v) const;
558
+ T operator ^ (const Vec4 &v) const;
559
+
560
+
561
+ //-----------------------------------
562
+ // Cross product is not defined in 4D
563
+ //-----------------------------------
564
+
565
+ //------------------------
566
+ // Component-wise addition
567
+ //------------------------
568
+
569
+ const Vec4 & operator += (const Vec4 &v);
570
+ Vec4 operator + (const Vec4 &v) const;
571
+
572
+
573
+ //---------------------------
574
+ // Component-wise subtraction
575
+ //---------------------------
576
+
577
+ const Vec4 & operator -= (const Vec4 &v);
578
+ Vec4 operator - (const Vec4 &v) const;
579
+
580
+
581
+ //------------------------------------
582
+ // Component-wise multiplication by -1
583
+ //------------------------------------
584
+
585
+ Vec4 operator - () const;
586
+ const Vec4 & negate ();
587
+
588
+
589
+ //------------------------------
590
+ // Component-wise multiplication
591
+ //------------------------------
592
+
593
+ const Vec4 & operator *= (const Vec4 &v);
594
+ const Vec4 & operator *= (T a);
595
+ Vec4 operator * (const Vec4 &v) const;
596
+ Vec4 operator * (T a) const;
597
+
598
+
599
+ //------------------------
600
+ // Component-wise division
601
+ //------------------------
602
+
603
+ const Vec4 & operator /= (const Vec4 &v);
604
+ const Vec4 & operator /= (T a);
605
+ Vec4 operator / (const Vec4 &v) const;
606
+ Vec4 operator / (T a) const;
607
+
608
+
609
+ //----------------------------------------------------------------
610
+ // Length and normalization: If v.length() is 0.0, v.normalize()
611
+ // and v.normalized() produce a null vector; v.normalizeExc() and
612
+ // v.normalizedExc() throw a NullVecExc.
613
+ // v.normalizeNonNull() and v.normalizedNonNull() are slightly
614
+ // faster than the other normalization routines, but if v.length()
615
+ // is 0.0, the result is undefined.
616
+ //----------------------------------------------------------------
617
+
618
+ T length () const;
619
+ T length2 () const;
620
+
621
+ const Vec4 & normalize (); // modifies *this
622
+ const Vec4 & normalizeExc () throw (IEX_NAMESPACE::MathExc);
623
+ const Vec4 & normalizeNonNull ();
624
+
625
+ Vec4<T> normalized () const; // does not modify *this
626
+ Vec4<T> normalizedExc () const throw (IEX_NAMESPACE::MathExc);
627
+ Vec4<T> normalizedNonNull () const;
628
+
629
+
630
+ //--------------------------------------------------------
631
+ // Number of dimensions, i.e. number of elements in a Vec4
632
+ //--------------------------------------------------------
633
+
634
+ static unsigned int dimensions() {return 4;}
635
+
636
+
637
+ //-------------------------------------------------
638
+ // Limitations of type T (see also class limits<T>)
639
+ //-------------------------------------------------
640
+
641
+ static T baseTypeMin() {return limits<T>::min();}
642
+ static T baseTypeMax() {return limits<T>::max();}
643
+ static T baseTypeSmallest() {return limits<T>::smallest();}
644
+ static T baseTypeEpsilon() {return limits<T>::epsilon();}
645
+
646
+
647
+ //--------------------------------------------------------------
648
+ // Base type -- in templates, which accept a parameter, V, which
649
+ // could be either a Vec2<T>, a Vec3<T>, or a Vec4<T> you can
650
+ // refer to T as V::BaseType
651
+ //--------------------------------------------------------------
652
+
653
+ typedef T BaseType;
654
+
655
+ private:
656
+
657
+ T lengthTiny () const;
658
+ };
659
+
660
+
661
+ //--------------
662
+ // Stream output
663
+ //--------------
664
+
665
+ template <class T>
666
+ std::ostream & operator << (std::ostream &s, const Vec2<T> &v);
667
+
668
+ template <class T>
669
+ std::ostream & operator << (std::ostream &s, const Vec3<T> &v);
670
+
671
+ template <class T>
672
+ std::ostream & operator << (std::ostream &s, const Vec4<T> &v);
673
+
674
+ //----------------------------------------------------
675
+ // Reverse multiplication: S * Vec2<T> and S * Vec3<T>
676
+ //----------------------------------------------------
677
+
678
+ template <class T> Vec2<T> operator * (T a, const Vec2<T> &v);
679
+ template <class T> Vec3<T> operator * (T a, const Vec3<T> &v);
680
+ template <class T> Vec4<T> operator * (T a, const Vec4<T> &v);
681
+
682
+
683
+ //-------------------------
684
+ // Typedefs for convenience
685
+ //-------------------------
686
+
687
+ typedef Vec2 <short> V2s;
688
+ typedef Vec2 <int> V2i;
689
+ typedef Vec2 <float> V2f;
690
+ typedef Vec2 <double> V2d;
691
+ typedef Vec3 <short> V3s;
692
+ typedef Vec3 <int> V3i;
693
+ typedef Vec3 <float> V3f;
694
+ typedef Vec3 <double> V3d;
695
+ typedef Vec4 <short> V4s;
696
+ typedef Vec4 <int> V4i;
697
+ typedef Vec4 <float> V4f;
698
+ typedef Vec4 <double> V4d;
699
+
700
+
701
+ //-------------------------------------------
702
+ // Specializations for VecN<short>, VecN<int>
703
+ //-------------------------------------------
704
+
705
+ // Vec2<short>
706
+
707
+ template <> short
708
+ Vec2<short>::length () const;
709
+
710
+ template <> const Vec2<short> &
711
+ Vec2<short>::normalize ();
712
+
713
+ template <> const Vec2<short> &
714
+ Vec2<short>::normalizeExc () throw (IEX_NAMESPACE::MathExc);
715
+
716
+ template <> const Vec2<short> &
717
+ Vec2<short>::normalizeNonNull ();
718
+
719
+ template <> Vec2<short>
720
+ Vec2<short>::normalized () const;
721
+
722
+ template <> Vec2<short>
723
+ Vec2<short>::normalizedExc () const throw (IEX_NAMESPACE::MathExc);
724
+
725
+ template <> Vec2<short>
726
+ Vec2<short>::normalizedNonNull () const;
727
+
728
+
729
+ // Vec2<int>
730
+
731
+ template <> int
732
+ Vec2<int>::length () const;
733
+
734
+ template <> const Vec2<int> &
735
+ Vec2<int>::normalize ();
736
+
737
+ template <> const Vec2<int> &
738
+ Vec2<int>::normalizeExc () throw (IEX_NAMESPACE::MathExc);
739
+
740
+ template <> const Vec2<int> &
741
+ Vec2<int>::normalizeNonNull ();
742
+
743
+ template <> Vec2<int>
744
+ Vec2<int>::normalized () const;
745
+
746
+ template <> Vec2<int>
747
+ Vec2<int>::normalizedExc () const throw (IEX_NAMESPACE::MathExc);
748
+
749
+ template <> Vec2<int>
750
+ Vec2<int>::normalizedNonNull () const;
751
+
752
+
753
+ // Vec3<short>
754
+
755
+ template <> short
756
+ Vec3<short>::length () const;
757
+
758
+ template <> const Vec3<short> &
759
+ Vec3<short>::normalize ();
760
+
761
+ template <> const Vec3<short> &
762
+ Vec3<short>::normalizeExc () throw (IEX_NAMESPACE::MathExc);
763
+
764
+ template <> const Vec3<short> &
765
+ Vec3<short>::normalizeNonNull ();
766
+
767
+ template <> Vec3<short>
768
+ Vec3<short>::normalized () const;
769
+
770
+ template <> Vec3<short>
771
+ Vec3<short>::normalizedExc () const throw (IEX_NAMESPACE::MathExc);
772
+
773
+ template <> Vec3<short>
774
+ Vec3<short>::normalizedNonNull () const;
775
+
776
+
777
+ // Vec3<int>
778
+
779
+ template <> int
780
+ Vec3<int>::length () const;
781
+
782
+ template <> const Vec3<int> &
783
+ Vec3<int>::normalize ();
784
+
785
+ template <> const Vec3<int> &
786
+ Vec3<int>::normalizeExc () throw (IEX_NAMESPACE::MathExc);
787
+
788
+ template <> const Vec3<int> &
789
+ Vec3<int>::normalizeNonNull ();
790
+
791
+ template <> Vec3<int>
792
+ Vec3<int>::normalized () const;
793
+
794
+ template <> Vec3<int>
795
+ Vec3<int>::normalizedExc () const throw (IEX_NAMESPACE::MathExc);
796
+
797
+ template <> Vec3<int>
798
+ Vec3<int>::normalizedNonNull () const;
799
+
800
+ // Vec4<short>
801
+
802
+ template <> short
803
+ Vec4<short>::length () const;
804
+
805
+ template <> const Vec4<short> &
806
+ Vec4<short>::normalize ();
807
+
808
+ template <> const Vec4<short> &
809
+ Vec4<short>::normalizeExc () throw (IEX_NAMESPACE::MathExc);
810
+
811
+ template <> const Vec4<short> &
812
+ Vec4<short>::normalizeNonNull ();
813
+
814
+ template <> Vec4<short>
815
+ Vec4<short>::normalized () const;
816
+
817
+ template <> Vec4<short>
818
+ Vec4<short>::normalizedExc () const throw (IEX_NAMESPACE::MathExc);
819
+
820
+ template <> Vec4<short>
821
+ Vec4<short>::normalizedNonNull () const;
822
+
823
+
824
+ // Vec4<int>
825
+
826
+ template <> int
827
+ Vec4<int>::length () const;
828
+
829
+ template <> const Vec4<int> &
830
+ Vec4<int>::normalize ();
831
+
832
+ template <> const Vec4<int> &
833
+ Vec4<int>::normalizeExc () throw (IEX_NAMESPACE::MathExc);
834
+
835
+ template <> const Vec4<int> &
836
+ Vec4<int>::normalizeNonNull ();
837
+
838
+ template <> Vec4<int>
839
+ Vec4<int>::normalized () const;
840
+
841
+ template <> Vec4<int>
842
+ Vec4<int>::normalizedExc () const throw (IEX_NAMESPACE::MathExc);
843
+
844
+ template <> Vec4<int>
845
+ Vec4<int>::normalizedNonNull () const;
846
+
847
+
848
+ //------------------------
849
+ // Implementation of Vec2:
850
+ //------------------------
851
+
852
+ template <class T>
853
+ inline T &
854
+ Vec2<T>::operator [] (int i)
855
+ {
856
+ return (&x)[i];
857
+ }
858
+
859
+ template <class T>
860
+ inline const T &
861
+ Vec2<T>::operator [] (int i) const
862
+ {
863
+ return (&x)[i];
864
+ }
865
+
866
+ template <class T>
867
+ inline
868
+ Vec2<T>::Vec2 ()
869
+ {
870
+ // empty
871
+ }
872
+
873
+ template <class T>
874
+ inline
875
+ Vec2<T>::Vec2 (T a)
876
+ {
877
+ x = y = a;
878
+ }
879
+
880
+ template <class T>
881
+ inline
882
+ Vec2<T>::Vec2 (T a, T b)
883
+ {
884
+ x = a;
885
+ y = b;
886
+ }
887
+
888
+ template <class T>
889
+ inline
890
+ Vec2<T>::Vec2 (const Vec2 &v)
891
+ {
892
+ x = v.x;
893
+ y = v.y;
894
+ }
895
+
896
+ template <class T>
897
+ template <class S>
898
+ inline
899
+ Vec2<T>::Vec2 (const Vec2<S> &v)
900
+ {
901
+ x = T (v.x);
902
+ y = T (v.y);
903
+ }
904
+
905
+ template <class T>
906
+ inline const Vec2<T> &
907
+ Vec2<T>::operator = (const Vec2 &v)
908
+ {
909
+ x = v.x;
910
+ y = v.y;
911
+ return *this;
912
+ }
913
+
914
+ template <class T>
915
+ template <class S>
916
+ inline void
917
+ Vec2<T>::setValue (S a, S b)
918
+ {
919
+ x = T (a);
920
+ y = T (b);
921
+ }
922
+
923
+ template <class T>
924
+ template <class S>
925
+ inline void
926
+ Vec2<T>::setValue (const Vec2<S> &v)
927
+ {
928
+ x = T (v.x);
929
+ y = T (v.y);
930
+ }
931
+
932
+ template <class T>
933
+ template <class S>
934
+ inline void
935
+ Vec2<T>::getValue (S &a, S &b) const
936
+ {
937
+ a = S (x);
938
+ b = S (y);
939
+ }
940
+
941
+ template <class T>
942
+ template <class S>
943
+ inline void
944
+ Vec2<T>::getValue (Vec2<S> &v) const
945
+ {
946
+ v.x = S (x);
947
+ v.y = S (y);
948
+ }
949
+
950
+ template <class T>
951
+ inline T *
952
+ Vec2<T>::getValue()
953
+ {
954
+ return (T *) &x;
955
+ }
956
+
957
+ template <class T>
958
+ inline const T *
959
+ Vec2<T>::getValue() const
960
+ {
961
+ return (const T *) &x;
962
+ }
963
+
964
+ template <class T>
965
+ template <class S>
966
+ inline bool
967
+ Vec2<T>::operator == (const Vec2<S> &v) const
968
+ {
969
+ return x == v.x && y == v.y;
970
+ }
971
+
972
+ template <class T>
973
+ template <class S>
974
+ inline bool
975
+ Vec2<T>::operator != (const Vec2<S> &v) const
976
+ {
977
+ return x != v.x || y != v.y;
978
+ }
979
+
980
+ template <class T>
981
+ bool
982
+ Vec2<T>::equalWithAbsError (const Vec2<T> &v, T e) const
983
+ {
984
+ for (int i = 0; i < 2; i++)
985
+ if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], v[i], e))
986
+ return false;
987
+
988
+ return true;
989
+ }
990
+
991
+ template <class T>
992
+ bool
993
+ Vec2<T>::equalWithRelError (const Vec2<T> &v, T e) const
994
+ {
995
+ for (int i = 0; i < 2; i++)
996
+ if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], v[i], e))
997
+ return false;
998
+
999
+ return true;
1000
+ }
1001
+
1002
+ template <class T>
1003
+ inline T
1004
+ Vec2<T>::dot (const Vec2 &v) const
1005
+ {
1006
+ return x * v.x + y * v.y;
1007
+ }
1008
+
1009
+ template <class T>
1010
+ inline T
1011
+ Vec2<T>::operator ^ (const Vec2 &v) const
1012
+ {
1013
+ return dot (v);
1014
+ }
1015
+
1016
+ template <class T>
1017
+ inline T
1018
+ Vec2<T>::cross (const Vec2 &v) const
1019
+ {
1020
+ return x * v.y - y * v.x;
1021
+
1022
+ }
1023
+
1024
+ template <class T>
1025
+ inline T
1026
+ Vec2<T>::operator % (const Vec2 &v) const
1027
+ {
1028
+ return x * v.y - y * v.x;
1029
+ }
1030
+
1031
+ template <class T>
1032
+ inline const Vec2<T> &
1033
+ Vec2<T>::operator += (const Vec2 &v)
1034
+ {
1035
+ x += v.x;
1036
+ y += v.y;
1037
+ return *this;
1038
+ }
1039
+
1040
+ template <class T>
1041
+ inline Vec2<T>
1042
+ Vec2<T>::operator + (const Vec2 &v) const
1043
+ {
1044
+ return Vec2 (x + v.x, y + v.y);
1045
+ }
1046
+
1047
+ template <class T>
1048
+ inline const Vec2<T> &
1049
+ Vec2<T>::operator -= (const Vec2 &v)
1050
+ {
1051
+ x -= v.x;
1052
+ y -= v.y;
1053
+ return *this;
1054
+ }
1055
+
1056
+ template <class T>
1057
+ inline Vec2<T>
1058
+ Vec2<T>::operator - (const Vec2 &v) const
1059
+ {
1060
+ return Vec2 (x - v.x, y - v.y);
1061
+ }
1062
+
1063
+ template <class T>
1064
+ inline Vec2<T>
1065
+ Vec2<T>::operator - () const
1066
+ {
1067
+ return Vec2 (-x, -y);
1068
+ }
1069
+
1070
+ template <class T>
1071
+ inline const Vec2<T> &
1072
+ Vec2<T>::negate ()
1073
+ {
1074
+ x = -x;
1075
+ y = -y;
1076
+ return *this;
1077
+ }
1078
+
1079
+ template <class T>
1080
+ inline const Vec2<T> &
1081
+ Vec2<T>::operator *= (const Vec2 &v)
1082
+ {
1083
+ x *= v.x;
1084
+ y *= v.y;
1085
+ return *this;
1086
+ }
1087
+
1088
+ template <class T>
1089
+ inline const Vec2<T> &
1090
+ Vec2<T>::operator *= (T a)
1091
+ {
1092
+ x *= a;
1093
+ y *= a;
1094
+ return *this;
1095
+ }
1096
+
1097
+ template <class T>
1098
+ inline Vec2<T>
1099
+ Vec2<T>::operator * (const Vec2 &v) const
1100
+ {
1101
+ return Vec2 (x * v.x, y * v.y);
1102
+ }
1103
+
1104
+ template <class T>
1105
+ inline Vec2<T>
1106
+ Vec2<T>::operator * (T a) const
1107
+ {
1108
+ return Vec2 (x * a, y * a);
1109
+ }
1110
+
1111
+ template <class T>
1112
+ inline const Vec2<T> &
1113
+ Vec2<T>::operator /= (const Vec2 &v)
1114
+ {
1115
+ x /= v.x;
1116
+ y /= v.y;
1117
+ return *this;
1118
+ }
1119
+
1120
+ template <class T>
1121
+ inline const Vec2<T> &
1122
+ Vec2<T>::operator /= (T a)
1123
+ {
1124
+ x /= a;
1125
+ y /= a;
1126
+ return *this;
1127
+ }
1128
+
1129
+ template <class T>
1130
+ inline Vec2<T>
1131
+ Vec2<T>::operator / (const Vec2 &v) const
1132
+ {
1133
+ return Vec2 (x / v.x, y / v.y);
1134
+ }
1135
+
1136
+ template <class T>
1137
+ inline Vec2<T>
1138
+ Vec2<T>::operator / (T a) const
1139
+ {
1140
+ return Vec2 (x / a, y / a);
1141
+ }
1142
+
1143
+ template <class T>
1144
+ T
1145
+ Vec2<T>::lengthTiny () const
1146
+ {
1147
+ T absX = (x >= T (0))? x: -x;
1148
+ T absY = (y >= T (0))? y: -y;
1149
+
1150
+ T max = absX;
1151
+
1152
+ if (max < absY)
1153
+ max = absY;
1154
+
1155
+ if (max == T (0))
1156
+ return T (0);
1157
+
1158
+ //
1159
+ // Do not replace the divisions by max with multiplications by 1/max.
1160
+ // Computing 1/max can overflow but the divisions below will always
1161
+ // produce results less than or equal to 1.
1162
+ //
1163
+
1164
+ absX /= max;
1165
+ absY /= max;
1166
+
1167
+ return max * Math<T>::sqrt (absX * absX + absY * absY);
1168
+ }
1169
+
1170
+ template <class T>
1171
+ inline T
1172
+ Vec2<T>::length () const
1173
+ {
1174
+ T length2 = dot (*this);
1175
+
1176
+ if (length2 < T (2) * limits<T>::smallest())
1177
+ return lengthTiny();
1178
+
1179
+ return Math<T>::sqrt (length2);
1180
+ }
1181
+
1182
+ template <class T>
1183
+ inline T
1184
+ Vec2<T>::length2 () const
1185
+ {
1186
+ return dot (*this);
1187
+ }
1188
+
1189
+ template <class T>
1190
+ const Vec2<T> &
1191
+ Vec2<T>::normalize ()
1192
+ {
1193
+ T l = length();
1194
+
1195
+ if (l != T (0))
1196
+ {
1197
+ //
1198
+ // Do not replace the divisions by l with multiplications by 1/l.
1199
+ // Computing 1/l can overflow but the divisions below will always
1200
+ // produce results less than or equal to 1.
1201
+ //
1202
+
1203
+ x /= l;
1204
+ y /= l;
1205
+ }
1206
+
1207
+ return *this;
1208
+ }
1209
+
1210
+ template <class T>
1211
+ const Vec2<T> &
1212
+ Vec2<T>::normalizeExc () throw (IEX_NAMESPACE::MathExc)
1213
+ {
1214
+ T l = length();
1215
+
1216
+ if (l == T (0))
1217
+ throw NullVecExc ("Cannot normalize null vector.");
1218
+
1219
+ x /= l;
1220
+ y /= l;
1221
+ return *this;
1222
+ }
1223
+
1224
+ template <class T>
1225
+ inline
1226
+ const Vec2<T> &
1227
+ Vec2<T>::normalizeNonNull ()
1228
+ {
1229
+ T l = length();
1230
+ x /= l;
1231
+ y /= l;
1232
+ return *this;
1233
+ }
1234
+
1235
+ template <class T>
1236
+ Vec2<T>
1237
+ Vec2<T>::normalized () const
1238
+ {
1239
+ T l = length();
1240
+
1241
+ if (l == T (0))
1242
+ return Vec2 (T (0));
1243
+
1244
+ return Vec2 (x / l, y / l);
1245
+ }
1246
+
1247
+ template <class T>
1248
+ Vec2<T>
1249
+ Vec2<T>::normalizedExc () const throw (IEX_NAMESPACE::MathExc)
1250
+ {
1251
+ T l = length();
1252
+
1253
+ if (l == T (0))
1254
+ throw NullVecExc ("Cannot normalize null vector.");
1255
+
1256
+ return Vec2 (x / l, y / l);
1257
+ }
1258
+
1259
+ template <class T>
1260
+ inline
1261
+ Vec2<T>
1262
+ Vec2<T>::normalizedNonNull () const
1263
+ {
1264
+ T l = length();
1265
+ return Vec2 (x / l, y / l);
1266
+ }
1267
+
1268
+
1269
+ //-----------------------
1270
+ // Implementation of Vec3
1271
+ //-----------------------
1272
+
1273
+ template <class T>
1274
+ inline T &
1275
+ Vec3<T>::operator [] (int i)
1276
+ {
1277
+ return (&x)[i];
1278
+ }
1279
+
1280
+ template <class T>
1281
+ inline const T &
1282
+ Vec3<T>::operator [] (int i) const
1283
+ {
1284
+ return (&x)[i];
1285
+ }
1286
+
1287
+ template <class T>
1288
+ inline
1289
+ Vec3<T>::Vec3 ()
1290
+ {
1291
+ // empty
1292
+ }
1293
+
1294
+ template <class T>
1295
+ inline
1296
+ Vec3<T>::Vec3 (T a)
1297
+ {
1298
+ x = y = z = a;
1299
+ }
1300
+
1301
+ template <class T>
1302
+ inline
1303
+ Vec3<T>::Vec3 (T a, T b, T c)
1304
+ {
1305
+ x = a;
1306
+ y = b;
1307
+ z = c;
1308
+ }
1309
+
1310
+ template <class T>
1311
+ inline
1312
+ Vec3<T>::Vec3 (const Vec3 &v)
1313
+ {
1314
+ x = v.x;
1315
+ y = v.y;
1316
+ z = v.z;
1317
+ }
1318
+
1319
+ template <class T>
1320
+ template <class S>
1321
+ inline
1322
+ Vec3<T>::Vec3 (const Vec3<S> &v)
1323
+ {
1324
+ x = T (v.x);
1325
+ y = T (v.y);
1326
+ z = T (v.z);
1327
+ }
1328
+
1329
+ template <class T>
1330
+ inline const Vec3<T> &
1331
+ Vec3<T>::operator = (const Vec3 &v)
1332
+ {
1333
+ x = v.x;
1334
+ y = v.y;
1335
+ z = v.z;
1336
+ return *this;
1337
+ }
1338
+
1339
+ template <class T>
1340
+ template <class S>
1341
+ inline
1342
+ Vec3<T>::Vec3 (const Vec4<S> &v)
1343
+ {
1344
+ x = T (v.x / v.w);
1345
+ y = T (v.y / v.w);
1346
+ z = T (v.z / v.w);
1347
+ }
1348
+
1349
+ template <class T>
1350
+ template <class S>
1351
+ Vec3<T>::Vec3 (const Vec4<S> &v, InfException)
1352
+ {
1353
+ T vx = T (v.x);
1354
+ T vy = T (v.y);
1355
+ T vz = T (v.z);
1356
+ T vw = T (v.w);
1357
+
1358
+ T absW = (vw >= T (0))? vw: -vw;
1359
+
1360
+ if (absW < 1)
1361
+ {
1362
+ T m = baseTypeMax() * absW;
1363
+
1364
+ if (vx <= -m || vx >= m || vy <= -m || vy >= m || vz <= -m || vz >= m)
1365
+ throw InfPointExc ("Cannot normalize point at infinity.");
1366
+ }
1367
+
1368
+ x = vx / vw;
1369
+ y = vy / vw;
1370
+ z = vz / vw;
1371
+ }
1372
+
1373
+ template <class T>
1374
+ template <class S>
1375
+ inline void
1376
+ Vec3<T>::setValue (S a, S b, S c)
1377
+ {
1378
+ x = T (a);
1379
+ y = T (b);
1380
+ z = T (c);
1381
+ }
1382
+
1383
+ template <class T>
1384
+ template <class S>
1385
+ inline void
1386
+ Vec3<T>::setValue (const Vec3<S> &v)
1387
+ {
1388
+ x = T (v.x);
1389
+ y = T (v.y);
1390
+ z = T (v.z);
1391
+ }
1392
+
1393
+ template <class T>
1394
+ template <class S>
1395
+ inline void
1396
+ Vec3<T>::getValue (S &a, S &b, S &c) const
1397
+ {
1398
+ a = S (x);
1399
+ b = S (y);
1400
+ c = S (z);
1401
+ }
1402
+
1403
+ template <class T>
1404
+ template <class S>
1405
+ inline void
1406
+ Vec3<T>::getValue (Vec3<S> &v) const
1407
+ {
1408
+ v.x = S (x);
1409
+ v.y = S (y);
1410
+ v.z = S (z);
1411
+ }
1412
+
1413
+ template <class T>
1414
+ inline T *
1415
+ Vec3<T>::getValue()
1416
+ {
1417
+ return (T *) &x;
1418
+ }
1419
+
1420
+ template <class T>
1421
+ inline const T *
1422
+ Vec3<T>::getValue() const
1423
+ {
1424
+ return (const T *) &x;
1425
+ }
1426
+
1427
+ template <class T>
1428
+ template <class S>
1429
+ inline bool
1430
+ Vec3<T>::operator == (const Vec3<S> &v) const
1431
+ {
1432
+ return x == v.x && y == v.y && z == v.z;
1433
+ }
1434
+
1435
+ template <class T>
1436
+ template <class S>
1437
+ inline bool
1438
+ Vec3<T>::operator != (const Vec3<S> &v) const
1439
+ {
1440
+ return x != v.x || y != v.y || z != v.z;
1441
+ }
1442
+
1443
+ template <class T>
1444
+ bool
1445
+ Vec3<T>::equalWithAbsError (const Vec3<T> &v, T e) const
1446
+ {
1447
+ for (int i = 0; i < 3; i++)
1448
+ if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], v[i], e))
1449
+ return false;
1450
+
1451
+ return true;
1452
+ }
1453
+
1454
+ template <class T>
1455
+ bool
1456
+ Vec3<T>::equalWithRelError (const Vec3<T> &v, T e) const
1457
+ {
1458
+ for (int i = 0; i < 3; i++)
1459
+ if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], v[i], e))
1460
+ return false;
1461
+
1462
+ return true;
1463
+ }
1464
+
1465
+ template <class T>
1466
+ inline T
1467
+ Vec3<T>::dot (const Vec3 &v) const
1468
+ {
1469
+ return x * v.x + y * v.y + z * v.z;
1470
+ }
1471
+
1472
+ template <class T>
1473
+ inline T
1474
+ Vec3<T>::operator ^ (const Vec3 &v) const
1475
+ {
1476
+ return dot (v);
1477
+ }
1478
+
1479
+ template <class T>
1480
+ inline Vec3<T>
1481
+ Vec3<T>::cross (const Vec3 &v) const
1482
+ {
1483
+ return Vec3 (y * v.z - z * v.y,
1484
+ z * v.x - x * v.z,
1485
+ x * v.y - y * v.x);
1486
+ }
1487
+
1488
+ template <class T>
1489
+ inline const Vec3<T> &
1490
+ Vec3<T>::operator %= (const Vec3 &v)
1491
+ {
1492
+ T a = y * v.z - z * v.y;
1493
+ T b = z * v.x - x * v.z;
1494
+ T c = x * v.y - y * v.x;
1495
+ x = a;
1496
+ y = b;
1497
+ z = c;
1498
+ return *this;
1499
+ }
1500
+
1501
+ template <class T>
1502
+ inline Vec3<T>
1503
+ Vec3<T>::operator % (const Vec3 &v) const
1504
+ {
1505
+ return Vec3 (y * v.z - z * v.y,
1506
+ z * v.x - x * v.z,
1507
+ x * v.y - y * v.x);
1508
+ }
1509
+
1510
+ template <class T>
1511
+ inline const Vec3<T> &
1512
+ Vec3<T>::operator += (const Vec3 &v)
1513
+ {
1514
+ x += v.x;
1515
+ y += v.y;
1516
+ z += v.z;
1517
+ return *this;
1518
+ }
1519
+
1520
+ template <class T>
1521
+ inline Vec3<T>
1522
+ Vec3<T>::operator + (const Vec3 &v) const
1523
+ {
1524
+ return Vec3 (x + v.x, y + v.y, z + v.z);
1525
+ }
1526
+
1527
+ template <class T>
1528
+ inline const Vec3<T> &
1529
+ Vec3<T>::operator -= (const Vec3 &v)
1530
+ {
1531
+ x -= v.x;
1532
+ y -= v.y;
1533
+ z -= v.z;
1534
+ return *this;
1535
+ }
1536
+
1537
+ template <class T>
1538
+ inline Vec3<T>
1539
+ Vec3<T>::operator - (const Vec3 &v) const
1540
+ {
1541
+ return Vec3 (x - v.x, y - v.y, z - v.z);
1542
+ }
1543
+
1544
+ template <class T>
1545
+ inline Vec3<T>
1546
+ Vec3<T>::operator - () const
1547
+ {
1548
+ return Vec3 (-x, -y, -z);
1549
+ }
1550
+
1551
+ template <class T>
1552
+ inline const Vec3<T> &
1553
+ Vec3<T>::negate ()
1554
+ {
1555
+ x = -x;
1556
+ y = -y;
1557
+ z = -z;
1558
+ return *this;
1559
+ }
1560
+
1561
+ template <class T>
1562
+ inline const Vec3<T> &
1563
+ Vec3<T>::operator *= (const Vec3 &v)
1564
+ {
1565
+ x *= v.x;
1566
+ y *= v.y;
1567
+ z *= v.z;
1568
+ return *this;
1569
+ }
1570
+
1571
+ template <class T>
1572
+ inline const Vec3<T> &
1573
+ Vec3<T>::operator *= (T a)
1574
+ {
1575
+ x *= a;
1576
+ y *= a;
1577
+ z *= a;
1578
+ return *this;
1579
+ }
1580
+
1581
+ template <class T>
1582
+ inline Vec3<T>
1583
+ Vec3<T>::operator * (const Vec3 &v) const
1584
+ {
1585
+ return Vec3 (x * v.x, y * v.y, z * v.z);
1586
+ }
1587
+
1588
+ template <class T>
1589
+ inline Vec3<T>
1590
+ Vec3<T>::operator * (T a) const
1591
+ {
1592
+ return Vec3 (x * a, y * a, z * a);
1593
+ }
1594
+
1595
+ template <class T>
1596
+ inline const Vec3<T> &
1597
+ Vec3<T>::operator /= (const Vec3 &v)
1598
+ {
1599
+ x /= v.x;
1600
+ y /= v.y;
1601
+ z /= v.z;
1602
+ return *this;
1603
+ }
1604
+
1605
+ template <class T>
1606
+ inline const Vec3<T> &
1607
+ Vec3<T>::operator /= (T a)
1608
+ {
1609
+ x /= a;
1610
+ y /= a;
1611
+ z /= a;
1612
+ return *this;
1613
+ }
1614
+
1615
+ template <class T>
1616
+ inline Vec3<T>
1617
+ Vec3<T>::operator / (const Vec3 &v) const
1618
+ {
1619
+ return Vec3 (x / v.x, y / v.y, z / v.z);
1620
+ }
1621
+
1622
+ template <class T>
1623
+ inline Vec3<T>
1624
+ Vec3<T>::operator / (T a) const
1625
+ {
1626
+ return Vec3 (x / a, y / a, z / a);
1627
+ }
1628
+
1629
+ template <class T>
1630
+ T
1631
+ Vec3<T>::lengthTiny () const
1632
+ {
1633
+ T absX = (x >= T (0))? x: -x;
1634
+ T absY = (y >= T (0))? y: -y;
1635
+ T absZ = (z >= T (0))? z: -z;
1636
+
1637
+ T max = absX;
1638
+
1639
+ if (max < absY)
1640
+ max = absY;
1641
+
1642
+ if (max < absZ)
1643
+ max = absZ;
1644
+
1645
+ if (max == T (0))
1646
+ return T (0);
1647
+
1648
+ //
1649
+ // Do not replace the divisions by max with multiplications by 1/max.
1650
+ // Computing 1/max can overflow but the divisions below will always
1651
+ // produce results less than or equal to 1.
1652
+ //
1653
+
1654
+ absX /= max;
1655
+ absY /= max;
1656
+ absZ /= max;
1657
+
1658
+ return max * Math<T>::sqrt (absX * absX + absY * absY + absZ * absZ);
1659
+ }
1660
+
1661
+ template <class T>
1662
+ inline T
1663
+ Vec3<T>::length () const
1664
+ {
1665
+ T length2 = dot (*this);
1666
+
1667
+ if (length2 < T (2) * limits<T>::smallest())
1668
+ return lengthTiny();
1669
+
1670
+ return Math<T>::sqrt (length2);
1671
+ }
1672
+
1673
+ template <class T>
1674
+ inline T
1675
+ Vec3<T>::length2 () const
1676
+ {
1677
+ return dot (*this);
1678
+ }
1679
+
1680
+ template <class T>
1681
+ const Vec3<T> &
1682
+ Vec3<T>::normalize ()
1683
+ {
1684
+ T l = length();
1685
+
1686
+ if (l != T (0))
1687
+ {
1688
+ //
1689
+ // Do not replace the divisions by l with multiplications by 1/l.
1690
+ // Computing 1/l can overflow but the divisions below will always
1691
+ // produce results less than or equal to 1.
1692
+ //
1693
+
1694
+ x /= l;
1695
+ y /= l;
1696
+ z /= l;
1697
+ }
1698
+
1699
+ return *this;
1700
+ }
1701
+
1702
+ template <class T>
1703
+ const Vec3<T> &
1704
+ Vec3<T>::normalizeExc () throw (IEX_NAMESPACE::MathExc)
1705
+ {
1706
+ T l = length();
1707
+
1708
+ if (l == T (0))
1709
+ throw NullVecExc ("Cannot normalize null vector.");
1710
+
1711
+ x /= l;
1712
+ y /= l;
1713
+ z /= l;
1714
+ return *this;
1715
+ }
1716
+
1717
+ template <class T>
1718
+ inline
1719
+ const Vec3<T> &
1720
+ Vec3<T>::normalizeNonNull ()
1721
+ {
1722
+ T l = length();
1723
+ x /= l;
1724
+ y /= l;
1725
+ z /= l;
1726
+ return *this;
1727
+ }
1728
+
1729
+ template <class T>
1730
+ Vec3<T>
1731
+ Vec3<T>::normalized () const
1732
+ {
1733
+ T l = length();
1734
+
1735
+ if (l == T (0))
1736
+ return Vec3 (T (0));
1737
+
1738
+ return Vec3 (x / l, y / l, z / l);
1739
+ }
1740
+
1741
+ template <class T>
1742
+ Vec3<T>
1743
+ Vec3<T>::normalizedExc () const throw (IEX_NAMESPACE::MathExc)
1744
+ {
1745
+ T l = length();
1746
+
1747
+ if (l == T (0))
1748
+ throw NullVecExc ("Cannot normalize null vector.");
1749
+
1750
+ return Vec3 (x / l, y / l, z / l);
1751
+ }
1752
+
1753
+ template <class T>
1754
+ inline
1755
+ Vec3<T>
1756
+ Vec3<T>::normalizedNonNull () const
1757
+ {
1758
+ T l = length();
1759
+ return Vec3 (x / l, y / l, z / l);
1760
+ }
1761
+
1762
+
1763
+ //-----------------------
1764
+ // Implementation of Vec4
1765
+ //-----------------------
1766
+
1767
+ template <class T>
1768
+ inline T &
1769
+ Vec4<T>::operator [] (int i)
1770
+ {
1771
+ return (&x)[i];
1772
+ }
1773
+
1774
+ template <class T>
1775
+ inline const T &
1776
+ Vec4<T>::operator [] (int i) const
1777
+ {
1778
+ return (&x)[i];
1779
+ }
1780
+
1781
+ template <class T>
1782
+ inline
1783
+ Vec4<T>::Vec4 ()
1784
+ {
1785
+ // empty
1786
+ }
1787
+
1788
+ template <class T>
1789
+ inline
1790
+ Vec4<T>::Vec4 (T a)
1791
+ {
1792
+ x = y = z = w = a;
1793
+ }
1794
+
1795
+ template <class T>
1796
+ inline
1797
+ Vec4<T>::Vec4 (T a, T b, T c, T d)
1798
+ {
1799
+ x = a;
1800
+ y = b;
1801
+ z = c;
1802
+ w = d;
1803
+ }
1804
+
1805
+ template <class T>
1806
+ inline
1807
+ Vec4<T>::Vec4 (const Vec4 &v)
1808
+ {
1809
+ x = v.x;
1810
+ y = v.y;
1811
+ z = v.z;
1812
+ w = v.w;
1813
+ }
1814
+
1815
+ template <class T>
1816
+ template <class S>
1817
+ inline
1818
+ Vec4<T>::Vec4 (const Vec4<S> &v)
1819
+ {
1820
+ x = T (v.x);
1821
+ y = T (v.y);
1822
+ z = T (v.z);
1823
+ w = T (v.w);
1824
+ }
1825
+
1826
+ template <class T>
1827
+ inline const Vec4<T> &
1828
+ Vec4<T>::operator = (const Vec4 &v)
1829
+ {
1830
+ x = v.x;
1831
+ y = v.y;
1832
+ z = v.z;
1833
+ w = v.w;
1834
+ return *this;
1835
+ }
1836
+
1837
+ template <class T>
1838
+ template <class S>
1839
+ inline
1840
+ Vec4<T>::Vec4 (const Vec3<S> &v)
1841
+ {
1842
+ x = T (v.x);
1843
+ y = T (v.y);
1844
+ z = T (v.z);
1845
+ w = T (1);
1846
+ }
1847
+
1848
+ template <class T>
1849
+ template <class S>
1850
+ inline bool
1851
+ Vec4<T>::operator == (const Vec4<S> &v) const
1852
+ {
1853
+ return x == v.x && y == v.y && z == v.z && w == v.w;
1854
+ }
1855
+
1856
+ template <class T>
1857
+ template <class S>
1858
+ inline bool
1859
+ Vec4<T>::operator != (const Vec4<S> &v) const
1860
+ {
1861
+ return x != v.x || y != v.y || z != v.z || w != v.w;
1862
+ }
1863
+
1864
+ template <class T>
1865
+ bool
1866
+ Vec4<T>::equalWithAbsError (const Vec4<T> &v, T e) const
1867
+ {
1868
+ for (int i = 0; i < 4; i++)
1869
+ if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], v[i], e))
1870
+ return false;
1871
+
1872
+ return true;
1873
+ }
1874
+
1875
+ template <class T>
1876
+ bool
1877
+ Vec4<T>::equalWithRelError (const Vec4<T> &v, T e) const
1878
+ {
1879
+ for (int i = 0; i < 4; i++)
1880
+ if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], v[i], e))
1881
+ return false;
1882
+
1883
+ return true;
1884
+ }
1885
+
1886
+ template <class T>
1887
+ inline T
1888
+ Vec4<T>::dot (const Vec4 &v) const
1889
+ {
1890
+ return x * v.x + y * v.y + z * v.z + w * v.w;
1891
+ }
1892
+
1893
+ template <class T>
1894
+ inline T
1895
+ Vec4<T>::operator ^ (const Vec4 &v) const
1896
+ {
1897
+ return dot (v);
1898
+ }
1899
+
1900
+
1901
+ template <class T>
1902
+ inline const Vec4<T> &
1903
+ Vec4<T>::operator += (const Vec4 &v)
1904
+ {
1905
+ x += v.x;
1906
+ y += v.y;
1907
+ z += v.z;
1908
+ w += v.w;
1909
+ return *this;
1910
+ }
1911
+
1912
+ template <class T>
1913
+ inline Vec4<T>
1914
+ Vec4<T>::operator + (const Vec4 &v) const
1915
+ {
1916
+ return Vec4 (x + v.x, y + v.y, z + v.z, w + v.w);
1917
+ }
1918
+
1919
+ template <class T>
1920
+ inline const Vec4<T> &
1921
+ Vec4<T>::operator -= (const Vec4 &v)
1922
+ {
1923
+ x -= v.x;
1924
+ y -= v.y;
1925
+ z -= v.z;
1926
+ w -= v.w;
1927
+ return *this;
1928
+ }
1929
+
1930
+ template <class T>
1931
+ inline Vec4<T>
1932
+ Vec4<T>::operator - (const Vec4 &v) const
1933
+ {
1934
+ return Vec4 (x - v.x, y - v.y, z - v.z, w - v.w);
1935
+ }
1936
+
1937
+ template <class T>
1938
+ inline Vec4<T>
1939
+ Vec4<T>::operator - () const
1940
+ {
1941
+ return Vec4 (-x, -y, -z, -w);
1942
+ }
1943
+
1944
+ template <class T>
1945
+ inline const Vec4<T> &
1946
+ Vec4<T>::negate ()
1947
+ {
1948
+ x = -x;
1949
+ y = -y;
1950
+ z = -z;
1951
+ w = -w;
1952
+ return *this;
1953
+ }
1954
+
1955
+ template <class T>
1956
+ inline const Vec4<T> &
1957
+ Vec4<T>::operator *= (const Vec4 &v)
1958
+ {
1959
+ x *= v.x;
1960
+ y *= v.y;
1961
+ z *= v.z;
1962
+ w *= v.w;
1963
+ return *this;
1964
+ }
1965
+
1966
+ template <class T>
1967
+ inline const Vec4<T> &
1968
+ Vec4<T>::operator *= (T a)
1969
+ {
1970
+ x *= a;
1971
+ y *= a;
1972
+ z *= a;
1973
+ w *= a;
1974
+ return *this;
1975
+ }
1976
+
1977
+ template <class T>
1978
+ inline Vec4<T>
1979
+ Vec4<T>::operator * (const Vec4 &v) const
1980
+ {
1981
+ return Vec4 (x * v.x, y * v.y, z * v.z, w * v.w);
1982
+ }
1983
+
1984
+ template <class T>
1985
+ inline Vec4<T>
1986
+ Vec4<T>::operator * (T a) const
1987
+ {
1988
+ return Vec4 (x * a, y * a, z * a, w * a);
1989
+ }
1990
+
1991
+ template <class T>
1992
+ inline const Vec4<T> &
1993
+ Vec4<T>::operator /= (const Vec4 &v)
1994
+ {
1995
+ x /= v.x;
1996
+ y /= v.y;
1997
+ z /= v.z;
1998
+ w /= v.w;
1999
+ return *this;
2000
+ }
2001
+
2002
+ template <class T>
2003
+ inline const Vec4<T> &
2004
+ Vec4<T>::operator /= (T a)
2005
+ {
2006
+ x /= a;
2007
+ y /= a;
2008
+ z /= a;
2009
+ w /= a;
2010
+ return *this;
2011
+ }
2012
+
2013
+ template <class T>
2014
+ inline Vec4<T>
2015
+ Vec4<T>::operator / (const Vec4 &v) const
2016
+ {
2017
+ return Vec4 (x / v.x, y / v.y, z / v.z, w / v.w);
2018
+ }
2019
+
2020
+ template <class T>
2021
+ inline Vec4<T>
2022
+ Vec4<T>::operator / (T a) const
2023
+ {
2024
+ return Vec4 (x / a, y / a, z / a, w / a);
2025
+ }
2026
+
2027
+ template <class T>
2028
+ T
2029
+ Vec4<T>::lengthTiny () const
2030
+ {
2031
+ T absX = (x >= T (0))? x: -x;
2032
+ T absY = (y >= T (0))? y: -y;
2033
+ T absZ = (z >= T (0))? z: -z;
2034
+ T absW = (w >= T (0))? w: -w;
2035
+
2036
+ T max = absX;
2037
+
2038
+ if (max < absY)
2039
+ max = absY;
2040
+
2041
+ if (max < absZ)
2042
+ max = absZ;
2043
+
2044
+ if (max < absW)
2045
+ max = absW;
2046
+
2047
+ if (max == T (0))
2048
+ return T (0);
2049
+
2050
+ //
2051
+ // Do not replace the divisions by max with multiplications by 1/max.
2052
+ // Computing 1/max can overflow but the divisions below will always
2053
+ // produce results less than or equal to 1.
2054
+ //
2055
+
2056
+ absX /= max;
2057
+ absY /= max;
2058
+ absZ /= max;
2059
+ absW /= max;
2060
+
2061
+ return max *
2062
+ Math<T>::sqrt (absX * absX + absY * absY + absZ * absZ + absW * absW);
2063
+ }
2064
+
2065
+ template <class T>
2066
+ inline T
2067
+ Vec4<T>::length () const
2068
+ {
2069
+ T length2 = dot (*this);
2070
+
2071
+ if (length2 < T (2) * limits<T>::smallest())
2072
+ return lengthTiny();
2073
+
2074
+ return Math<T>::sqrt (length2);
2075
+ }
2076
+
2077
+ template <class T>
2078
+ inline T
2079
+ Vec4<T>::length2 () const
2080
+ {
2081
+ return dot (*this);
2082
+ }
2083
+
2084
+ template <class T>
2085
+ const Vec4<T> &
2086
+ Vec4<T>::normalize ()
2087
+ {
2088
+ T l = length();
2089
+
2090
+ if (l != T (0))
2091
+ {
2092
+ //
2093
+ // Do not replace the divisions by l with multiplications by 1/l.
2094
+ // Computing 1/l can overflow but the divisions below will always
2095
+ // produce results less than or equal to 1.
2096
+ //
2097
+
2098
+ x /= l;
2099
+ y /= l;
2100
+ z /= l;
2101
+ w /= l;
2102
+ }
2103
+
2104
+ return *this;
2105
+ }
2106
+
2107
+ template <class T>
2108
+ const Vec4<T> &
2109
+ Vec4<T>::normalizeExc () throw (IEX_NAMESPACE::MathExc)
2110
+ {
2111
+ T l = length();
2112
+
2113
+ if (l == T (0))
2114
+ throw NullVecExc ("Cannot normalize null vector.");
2115
+
2116
+ x /= l;
2117
+ y /= l;
2118
+ z /= l;
2119
+ w /= l;
2120
+ return *this;
2121
+ }
2122
+
2123
+ template <class T>
2124
+ inline
2125
+ const Vec4<T> &
2126
+ Vec4<T>::normalizeNonNull ()
2127
+ {
2128
+ T l = length();
2129
+ x /= l;
2130
+ y /= l;
2131
+ z /= l;
2132
+ w /= l;
2133
+ return *this;
2134
+ }
2135
+
2136
+ template <class T>
2137
+ Vec4<T>
2138
+ Vec4<T>::normalized () const
2139
+ {
2140
+ T l = length();
2141
+
2142
+ if (l == T (0))
2143
+ return Vec4 (T (0));
2144
+
2145
+ return Vec4 (x / l, y / l, z / l, w / l);
2146
+ }
2147
+
2148
+ template <class T>
2149
+ Vec4<T>
2150
+ Vec4<T>::normalizedExc () const throw (IEX_NAMESPACE::MathExc)
2151
+ {
2152
+ T l = length();
2153
+
2154
+ if (l == T (0))
2155
+ throw NullVecExc ("Cannot normalize null vector.");
2156
+
2157
+ return Vec4 (x / l, y / l, z / l, w / l);
2158
+ }
2159
+
2160
+ template <class T>
2161
+ inline
2162
+ Vec4<T>
2163
+ Vec4<T>::normalizedNonNull () const
2164
+ {
2165
+ T l = length();
2166
+ return Vec4 (x / l, y / l, z / l, w / l);
2167
+ }
2168
+
2169
+ //-----------------------------
2170
+ // Stream output implementation
2171
+ //-----------------------------
2172
+
2173
+ template <class T>
2174
+ std::ostream &
2175
+ operator << (std::ostream &s, const Vec2<T> &v)
2176
+ {
2177
+ return s << '(' << v.x << ' ' << v.y << ')';
2178
+ }
2179
+
2180
+ template <class T>
2181
+ std::ostream &
2182
+ operator << (std::ostream &s, const Vec3<T> &v)
2183
+ {
2184
+ return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ')';
2185
+ }
2186
+
2187
+ template <class T>
2188
+ std::ostream &
2189
+ operator << (std::ostream &s, const Vec4<T> &v)
2190
+ {
2191
+ return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ' ' << v.w << ')';
2192
+ }
2193
+
2194
+
2195
+ //-----------------------------------------
2196
+ // Implementation of reverse multiplication
2197
+ //-----------------------------------------
2198
+
2199
+ template <class T>
2200
+ inline Vec2<T>
2201
+ operator * (T a, const Vec2<T> &v)
2202
+ {
2203
+ return Vec2<T> (a * v.x, a * v.y);
2204
+ }
2205
+
2206
+ template <class T>
2207
+ inline Vec3<T>
2208
+ operator * (T a, const Vec3<T> &v)
2209
+ {
2210
+ return Vec3<T> (a * v.x, a * v.y, a * v.z);
2211
+ }
2212
+
2213
+ template <class T>
2214
+ inline Vec4<T>
2215
+ operator * (T a, const Vec4<T> &v)
2216
+ {
2217
+ return Vec4<T> (a * v.x, a * v.y, a * v.z, a * v.w);
2218
+ }
2219
+
2220
+
2221
+ #if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
2222
+ #pragma warning(pop)
2223
+ #endif
2224
+
2225
+ IMATH_INTERNAL_NAMESPACE_HEADER_EXIT
2226
+
2227
+ #endif // INCLUDED_IMATHVEC_H