ivec2.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. /*
  2. * Copyright (c), Recep Aslantas.
  3. *
  4. * MIT License (MIT), http://opensource.org/licenses/MIT
  5. * Full license can be found in the LICENSE file
  6. */
  7. /*
  8. Macros:
  9. GLMS_IVEC2_ONE_INIT
  10. GLMS_IVEC2_ZERO_INIT
  11. GLMS_IVEC2_ONE
  12. GLMS_IVEC2_ZERO
  13. Functions:
  14. CGLM_INLINE ivec2s glms_ivec2(int * __restrict v)
  15. CGLM_INLINE void glms_ivec2_pack(ivec2s dst[], ivec2s src[], size_t len)
  16. CGLM_INLINE void glms_ivec2_unpack(ivec2 dst[], ivec2 src[], size_t len)
  17. CGLM_INLINE ivec2s glms_ivec2_zero(ivec2s v)
  18. CGLM_INLINE ivec2s glms_ivec2_one(ivec2s v)
  19. CGLM_INLINE int glms_ivec2_dot(ivec2s a, ivec2s b)
  20. CGLM_INLINE int glms_ivec2_cross(ivec2s a, ivec2s b)
  21. CGLM_INLINE ivec2s glms_ivec2_add(ivec2s a, ivec2s b)
  22. CGLM_INLINE ivec2s glms_ivec2_adds(ivec2s v, int s)
  23. CGLM_INLINE ivec2s glms_ivec2_sub(ivec2s a, ivec2s b)
  24. CGLM_INLINE ivec2s glms_ivec2_subs(ivec2s v, int s)
  25. CGLM_INLINE ivec2s glms_ivec2_mul(ivec2s a, ivec2s b)
  26. CGLM_INLINE ivec2s glms_ivec2_scale(ivec2s v, int s)
  27. CGLM_INLINE ivec2s glms_ivec2_div(ivec2s a, ivec2s b)
  28. CGLM_INLINE ivec2s glms_ivec2_divs(ivec2s v, int s)
  29. CGLM_INLINE ivec2s glms_ivec2_mod(ivec2s a, ivec2s b)
  30. CGLM_INLINE ivec2s glms_ivec2_addadd(ivec2s a, ivec2s b)
  31. CGLM_INLINE ivec2s glms_ivec2_addadds(ivec2s a, int s)
  32. CGLM_INLINE ivec2s glms_ivec2_subadd(ivec2s a, ivec2s b)
  33. CGLM_INLINE ivec2s glms_ivec2_subadds(ivec2s a, int s)
  34. CGLM_INLINE ivec2s glms_ivec2_muladd(ivec2s a, ivec2s b)
  35. CGLM_INLINE ivec2s glms_ivec2_muladds(ivec2s a, int s)
  36. CGLM_INLINE ivec2s glms_ivec2_maxadd(ivec2s a, ivec2s b)
  37. CGLM_INLINE ivec2s glms_ivec2_minadd(ivec2s a, ivec2s b)
  38. CGLM_INLINE ivec2s glms_ivec2_subsub(ivec2s a, ivec2s b)
  39. CGLM_INLINE ivec2s glms_ivec2_subsubs(ivec2s a, int s)
  40. CGLM_INLINE ivec2s glms_ivec2_addsub(ivec2s a, ivec2s b)
  41. CGLM_INLINE ivec2s glms_ivec2_addsubs(ivec2s a, int s)
  42. CGLM_INLINE ivec2s glms_ivec2_mulsub(ivec2s a, ivec2s b)
  43. CGLM_INLINE ivec2s glms_ivec2_mulsubs(ivec2s a, int s)
  44. CGLM_INLINE ivec2s glms_ivec2_maxsub(ivec2s a, ivec2s b)
  45. CGLM_INLINE ivec2s glms_ivec2_minsub(ivec2s a, ivec2s b)
  46. CGLM_INLINE int glms_ivec2_distance2(ivec2s a, ivec2s b)
  47. CGLM_INLINE float glms_ivec2_distance(ivec2s a, ivec2s b)
  48. CGLM_INLINE ivec2s glms_ivec2_fill(int val)
  49. CGLM_INLINE bool glms_ivec2_eq(ivec2s v, int val);
  50. CGLM_INLINE bool glms_ivec2_eqv(ivec2s a, ivec2s b);
  51. CGLM_INLINE ivec2s glms_ivec2_maxv(ivec2s a, ivec2s b)
  52. CGLM_INLINE ivec2s glms_ivec2_minv(ivec2s a, ivec2s b)
  53. CGLM_INLINE ivec2s glms_ivec2_clamp(ivec2s v, int minVal, int maxVal)
  54. CGLM_INLINE ivec2s glms_ivec2_abs(ivec2s v)
  55. */
  56. #ifndef cglms_ivec2_h
  57. #define cglms_ivec2_h
  58. #include "../common.h"
  59. #include "../types-struct.h"
  60. #include "../ivec2.h"
  61. #define glms_ivec2_(NAME) CGLM_STRUCTAPI(ivec2, NAME)
  62. #define GLMS_IVEC2_ONE_INIT {GLM_IVEC2_ONE_INIT}
  63. #define GLMS_IVEC2_ZERO_INIT {GLM_IVEC2_ZERO_INIT}
  64. #define GLMS_IVEC2_ONE ((ivec2s)GLMS_IVEC2_ONE_INIT)
  65. #define GLMS_IVEC2_ZERO ((ivec2s)GLMS_IVEC2_ZERO_INIT)
  66. /*!
  67. * @brief init ivec2 using ivec3 or ivec4
  68. *
  69. * @param[in] v vector
  70. * @returns destination
  71. */
  72. CGLM_INLINE
  73. ivec2s
  74. glms_ivec2(int * __restrict v) {
  75. ivec2s r;
  76. glm_ivec2(v, r.raw);
  77. return r;
  78. }
  79. /*!
  80. * @brief pack an array of ivec2 into an array of ivec2s
  81. *
  82. * @param[out] dst array of ivec2s
  83. * @param[in] src array of ivec2
  84. * @param[in] len number of elements
  85. */
  86. CGLM_INLINE
  87. void
  88. glms_ivec2_(pack)(ivec2s dst[], ivec2 src[], size_t len) {
  89. size_t i;
  90. for (i = 0; i < len; i++) {
  91. glm_ivec2_copy(src[i], dst[i].raw);
  92. }
  93. }
  94. /*!
  95. * @brief unpack an array of ivec2s into an array of ivec2
  96. *
  97. * @param[out] dst array of ivec2
  98. * @param[in] src array of ivec2s
  99. * @param[in] len number of elements
  100. */
  101. CGLM_INLINE
  102. void
  103. glms_ivec2_(unpack)(ivec2 dst[], ivec2s src[], size_t len) {
  104. size_t i;
  105. for (i = 0; i < len; i++) {
  106. glm_ivec2_copy(src[i].raw, dst[i]);
  107. }
  108. }
  109. /*!
  110. * @brief set all members of [v] to zero
  111. *
  112. * @returns vector
  113. */
  114. CGLM_INLINE
  115. ivec2s
  116. glms_ivec2_(zero)(void) {
  117. ivec2s r;
  118. glm_ivec2_zero(r.raw);
  119. return r;
  120. }
  121. /*!
  122. * @brief set all members of [v] to one
  123. *
  124. * @returns vector
  125. */
  126. CGLM_INLINE
  127. ivec2s
  128. glms_ivec2_(one)(void) {
  129. ivec2s r;
  130. glm_ivec2_one(r.raw);
  131. return r;
  132. }
  133. /*!
  134. * @brief ivec2 dot product
  135. *
  136. * @param[in] a vector1
  137. * @param[in] b vector2
  138. *
  139. * @return dot product
  140. */
  141. CGLM_INLINE
  142. int
  143. glms_ivec2_(dot)(ivec2s a, ivec2s b) {
  144. return glm_ivec2_dot(a.raw, b.raw);
  145. }
  146. /*!
  147. * @brief ivec2 cross product
  148. *
  149. * REF: http://allenchou.net/2013/07/cross-product-of-2d-vectors/
  150. *
  151. * @param[in] a vector1
  152. * @param[in] b vector2
  153. *
  154. * @return Z component of cross product
  155. */
  156. CGLM_INLINE
  157. int
  158. glms_ivec2_(cross)(ivec2s a, ivec2s b) {
  159. return glm_ivec2_cross(a.raw, b.raw);
  160. }
  161. /*!
  162. * @brief add vector [a] to vector [b] and store result in [dest]
  163. *
  164. * @param[in] a first vector
  165. * @param[in] b second vector
  166. * @returns destination
  167. */
  168. CGLM_INLINE
  169. ivec2s
  170. glms_ivec2_(add)(ivec2s a, ivec2s b) {
  171. ivec2s r;
  172. glm_ivec2_add(a.raw, b.raw, r.raw);
  173. return r;
  174. }
  175. /*!
  176. * @brief add scalar s to vector [v] and store result in [dest]
  177. *
  178. * @param[in] v vector
  179. * @param[in] s scalar
  180. * @returns destination
  181. */
  182. CGLM_INLINE
  183. ivec2s
  184. glms_ivec2_(adds)(ivec2s v, int s) {
  185. ivec2s r;
  186. glm_ivec2_adds(v.raw, s, r.raw);
  187. return r;
  188. }
  189. /*!
  190. * @brief subtract vector [b] from vector [a] and store result in [dest]
  191. *
  192. * @param[in] a first vector
  193. * @param[in] b second vector
  194. * @returns destination
  195. */
  196. CGLM_INLINE
  197. ivec2s
  198. glms_ivec2_(sub)(ivec2s a, ivec2s b) {
  199. ivec2s r;
  200. glm_ivec2_sub(a.raw, b.raw, r.raw);
  201. return r;
  202. }
  203. /*!
  204. * @brief subtract scalar s from vector [v] and store result in [dest]
  205. *
  206. * @param[in] v vector
  207. * @param[in] s scalar
  208. * @returns destination
  209. */
  210. CGLM_INLINE
  211. ivec2s
  212. glms_ivec2_(subs)(ivec2s v, int s) {
  213. ivec2s r;
  214. glm_ivec2_subs(v.raw, s, r.raw);
  215. return r;
  216. }
  217. /*!
  218. * @brief multiply vector [a] with vector [b] and store result in [dest]
  219. *
  220. * @param[in] a first vector
  221. * @param[in] b second vector
  222. * @returns destination
  223. */
  224. CGLM_INLINE
  225. ivec2s
  226. glms_ivec2_(mul)(ivec2s a, ivec2s b) {
  227. ivec2s r;
  228. glm_ivec2_mul(a.raw, b.raw, r.raw);
  229. return r;
  230. }
  231. /*!
  232. * @brief multiply vector [a] with scalar s and store result in [dest]
  233. *
  234. * @param[in] v vector
  235. * @param[in] s scalar
  236. * @returns destination
  237. */
  238. CGLM_INLINE
  239. ivec2s
  240. glms_ivec2_(scale)(ivec2s v, int s) {
  241. ivec2s r;
  242. glm_ivec2_scale(v.raw, s, r.raw);
  243. return r;
  244. }
  245. /*!
  246. * @brief div vector with another component-wise division: d = a / b
  247. *
  248. * @param[in] a vector 1
  249. * @param[in] b vector 2
  250. * @returns result = (a[0]/b[0], a[1]/b[1])
  251. */
  252. CGLM_INLINE
  253. ivec2s
  254. glms_ivec2_(div)(ivec2s a, ivec2s b) {
  255. ivec2s r;
  256. glm_ivec2_div(a.raw, b.raw, r.raw);
  257. return r;
  258. }
  259. /*!
  260. * @brief div vector with scalar: d = v / s
  261. *
  262. * @param[in] v vector
  263. * @param[in] s scalar
  264. * @returns result = (a[0]/s, a[1]/s)
  265. */
  266. CGLM_INLINE
  267. ivec2s
  268. glms_ivec2_(divs)(ivec2s v, int s) {
  269. ivec2s r;
  270. glm_ivec2_divs(v.raw, s, r.raw);
  271. return r;
  272. }
  273. /*!
  274. * @brief mod vector with another component-wise modulo: d = a % b
  275. *
  276. * @param[in] a vector 1
  277. * @param[in] b vector 2
  278. * @returns result = (a[0]%b[0], a[1]%b[1])
  279. */
  280. CGLM_INLINE
  281. ivec2s
  282. glms_ivec2_(mod)(ivec2s a, ivec2s b) {
  283. ivec2s r;
  284. glm_ivec2_mod(a.raw, b.raw, r.raw);
  285. return r;
  286. }
  287. /*!
  288. * @brief add vector [a] with vector [b] and add result to vector [dest]
  289. *
  290. * applies += operator so dest must be initialized
  291. *
  292. * @param[in] a first vector
  293. * @param[in] b second vector
  294. * @param[in] dest dest += (a + b)
  295. * @returns dest
  296. */
  297. CGLM_INLINE
  298. ivec2s
  299. glms_ivec2_(addadd)(ivec2s a, ivec2s b, ivec2s dest) {
  300. glm_ivec2_addadd(a.raw, b.raw, dest.raw);
  301. return dest;
  302. }
  303. /*!
  304. * @brief add scalar [s] onto vector [a] and add result to vector [dest]
  305. *
  306. * applies += operator so dest must be initialized
  307. *
  308. * @param[in] a vector
  309. * @param[in] s scalar
  310. * @param[in] dest dest += (a + s)
  311. * @returns dest
  312. */
  313. CGLM_INLINE
  314. ivec2s
  315. glms_ivec2_(addadds)(ivec2s a, int s, ivec2s dest) {
  316. glm_ivec2_addadds(a.raw, s, dest.raw);
  317. return dest;
  318. }
  319. /*!
  320. * @brief subtract vector [a] from vector [b] and add result to [dest]
  321. *
  322. * applies += operator so dest must be initialized
  323. *
  324. * @param[in] a first vector
  325. * @param[in] b second vector
  326. * @param[in] dest dest += (a - b)
  327. * @returns dest
  328. */
  329. CGLM_INLINE
  330. ivec2s
  331. glms_ivec2_(subadd)(ivec2s a, ivec2s b, ivec2s dest) {
  332. glm_ivec2_subadd(a.raw, b.raw, dest.raw);
  333. return dest;
  334. }
  335. /*!
  336. * @brief subtract scalar [s] from vector [a] and add result to [dest]
  337. *
  338. * applies += operator so dest must be initialized
  339. *
  340. * @param[in] a first
  341. * @param[in] s scalar
  342. * @param[in] dest dest += (a - s)
  343. * @returns dest
  344. */
  345. CGLM_INLINE
  346. ivec2s
  347. glms_ivec2_(subadds)(ivec2s a, int s, ivec2s dest) {
  348. glm_ivec2_subadds(a.raw, s, dest.raw);
  349. return dest;
  350. }
  351. /*!
  352. * @brief multiply vector [a] with vector [b] and add result to [dest]
  353. *
  354. * applies += operator so dest must be initialized
  355. *
  356. * @param[in] a first vector
  357. * @param[in] b second vector
  358. * @param[in] dest dest += (a * b)
  359. * @returns dest
  360. */
  361. CGLM_INLINE
  362. ivec2s
  363. glms_ivec2_(muladd)(ivec2s a, ivec2s b, ivec2s dest) {
  364. glm_ivec2_muladd(a.raw, b.raw, dest.raw);
  365. return dest;
  366. }
  367. /*!
  368. * @brief multiply vector [a] with scalar [s] and add result to [dest]
  369. *
  370. * applies += operator so dest must be initialized
  371. *
  372. * @param[in] a vector
  373. * @param[in] s scalar
  374. * @param[in] dest dest += (a * s)
  375. * @returns dest
  376. */
  377. CGLM_INLINE
  378. ivec2s
  379. glms_ivec2_(muladds)(ivec2s a, int s, ivec2s dest) {
  380. glm_ivec2_muladds(a.raw, s, dest.raw);
  381. return dest;
  382. }
  383. /*!
  384. * @brief add maximum of vector [a] and vector [b] to vector [dest]
  385. *
  386. * applies += operator so dest must be initialized
  387. *
  388. * @param[in] a first vector
  389. * @param[in] b second vector
  390. * @param[in] dest dest += max(a, b)
  391. * @returns dest
  392. */
  393. CGLM_INLINE
  394. ivec2s
  395. glms_ivec2_(maxadd)(ivec2s a, ivec2s b, ivec2s dest) {
  396. glm_ivec2_maxadd(a.raw, b.raw, dest.raw);
  397. return dest;
  398. }
  399. /*!
  400. * @brief add minimum of vector [a] and vector [b] to vector [dest]
  401. *
  402. * applies += operator so dest must be initialized
  403. *
  404. * @param[in] a first vector
  405. * @param[in] b second vector
  406. * @param[in] dest dest += min(a, b)
  407. * @returns dest
  408. */
  409. CGLM_INLINE
  410. ivec2s
  411. glms_ivec2_(minadd)(ivec2s a, ivec2s b, ivec2s dest) {
  412. glm_ivec2_minadd(a.raw, b.raw, dest.raw);
  413. return dest;
  414. }
  415. /*!
  416. * @brief subtract vector [a] from vector [b] and subtract result from [dest]
  417. *
  418. * applies -= operator so dest must be initialized
  419. *
  420. * @param[in] a first vector
  421. * @param[in] b second vector
  422. * @param[in] dest dest -= (a - b)
  423. * @returns dest
  424. */
  425. CGLM_INLINE
  426. ivec2s
  427. glms_ivec2_(subsub)(ivec2s a, ivec2s b, ivec2s dest) {
  428. glm_ivec2_subsub(a.raw, b.raw, dest.raw);
  429. return dest;
  430. }
  431. /*!
  432. * @brief subtract scalar [s] from vector [a] and subtract result from [dest]
  433. *
  434. * applies -= operator so dest must be initialized
  435. *
  436. * @param[in] a vector
  437. * @param[in] s scalar
  438. * @param[in] dest dest -= (a - s)
  439. * @returns dest
  440. */
  441. CGLM_INLINE
  442. ivec2s
  443. glms_ivec2_(subsubs)(ivec2s a, int s, ivec2s dest) {
  444. glm_ivec2_subsubs(a.raw, s, dest.raw);
  445. return dest;
  446. }
  447. /*!
  448. * @brief add vector [a] to vector [b] and subtract the result from [dest]
  449. *
  450. * applies -= operator so dest must be initialized
  451. *
  452. * @param[in] a vector
  453. * @param[in] b scalar
  454. * @param[in] dest dest -= (a + b)
  455. * @returns dest
  456. */
  457. CGLM_INLINE
  458. ivec2s
  459. glms_ivec2_(addsub)(ivec2s a, ivec2s b, ivec2s dest) {
  460. glm_ivec2_addsub(a.raw, b.raw, dest.raw);
  461. return dest;
  462. }
  463. /*!
  464. * @brief add scalar [s] to vector [a] and subtract the result from [dest]
  465. *
  466. * applies -= operator so dest must be initialized
  467. *
  468. * @param[in] a vector
  469. * @param[in] s scalar
  470. * @param[in] dest dest -= (a + b)
  471. * @returns dest
  472. */
  473. CGLM_INLINE
  474. ivec2s
  475. glms_ivec2_(addsubs)(ivec2s a, int s, ivec2s dest) {
  476. glm_ivec2_addsubs(a.raw, s, dest.raw);
  477. return dest;
  478. }
  479. /*!
  480. * @brief multiply vector [a] and vector [b] and subtract the result from [dest]
  481. *
  482. * applies -= operator so dest must be initialized
  483. *
  484. * @param[in] a vector
  485. * @param[in] b scalar
  486. * @param[in] dest dest -= (a * b)
  487. * @returns dest
  488. */
  489. CGLM_INLINE
  490. ivec2s
  491. glms_ivec2_(mulsub)(ivec2s a, ivec2s b, ivec2s dest) {
  492. glm_ivec2_mulsub(a.raw, b.raw, dest.raw);
  493. return dest;
  494. }
  495. /*!
  496. * @brief multiply vector [a] with scalar [s] and subtract the result from [dest]
  497. *
  498. * applies -= operator so dest must be initialized
  499. *
  500. * @param[in] a vector
  501. * @param[in] s scalar
  502. * @param[in] dest dest -= (a * s)
  503. * @returns dest
  504. */
  505. CGLM_INLINE
  506. ivec2s
  507. glms_ivec2_(mulsubs)(ivec2s a, int s, ivec2s dest) {
  508. glm_ivec2_mulsubs(a.raw, s, dest.raw);
  509. return dest;
  510. }
  511. /*!
  512. * @brief subtract maximum of vector [a] and vector [b] from vector [dest]
  513. *
  514. * applies += operator so dest must be initialized
  515. *
  516. * @param[in] a first vector
  517. * @param[in] b second vector
  518. * @param[in] dest dest -= max(a, b)
  519. * @returns dest
  520. */
  521. CGLM_INLINE
  522. ivec2s
  523. glms_ivec2_(maxsub)(ivec2s a, ivec2s b, ivec2s dest) {
  524. glm_ivec2_maxsub(a.raw, b.raw, dest.raw);
  525. return dest;
  526. }
  527. /*!
  528. * @brief subtract minimum of vector [a] and vector [b] from vector [dest]
  529. *
  530. * applies -= operator so dest must be initialized
  531. *
  532. * @param[in] a first vector
  533. * @param[in] b second vector
  534. * @param[in] dest dest -= min(a, b)
  535. * @returns dest
  536. */
  537. CGLM_INLINE
  538. ivec2s
  539. glms_ivec2_(minsub)(ivec2s a, ivec2s b, ivec2s dest) {
  540. glm_ivec2_minsub(a.raw, b.raw, dest.raw);
  541. return dest;
  542. }
  543. /*!
  544. * @brief squared distance between two vectors
  545. *
  546. * @param[in] a first vector
  547. * @param[in] b second vector
  548. * @return returns squared distance (distance * distance)
  549. */
  550. CGLM_INLINE
  551. int
  552. glms_ivec2_(distance2)(ivec2s a, ivec2s b) {
  553. return glm_ivec2_distance2(a.raw, b.raw);
  554. }
  555. /*!
  556. * @brief distance between two vectors
  557. *
  558. * @param[in] a first vector
  559. * @param[in] b second vector
  560. * @return returns distance
  561. */
  562. CGLM_INLINE
  563. float
  564. glms_ivec2_(distance)(ivec2s a, ivec2s b) {
  565. return glm_ivec2_distance(a.raw, b.raw);
  566. }
  567. /*!
  568. * @brief fill a vector with specified value
  569. *
  570. * @param[in] val value
  571. * @returns dest
  572. */
  573. CGLM_INLINE
  574. ivec2s
  575. glms_ivec2_(fill)(int val) {
  576. ivec2s r;
  577. glm_ivec2_fill(r.raw, val);
  578. return r;
  579. }
  580. /*!
  581. * @brief check if vector is equal to value
  582. *
  583. * @param[in] v vector
  584. * @param[in] val value
  585. */
  586. CGLM_INLINE
  587. bool
  588. glms_ivec2_(eq)(ivec2s v, int val) {
  589. return glm_ivec2_eq(v.raw, val);
  590. }
  591. /*!
  592. * @brief check if vector is equal to another
  593. *
  594. * @param[in] a vector
  595. * @param[in] b vector
  596. */
  597. CGLM_INLINE
  598. bool
  599. glms_ivec2_(eqv)(ivec2s a, ivec2s b) {
  600. return glm_ivec2_eqv(a.raw, b.raw);
  601. }
  602. /*!
  603. * @brief set each member of dest to greater of vector a and b
  604. *
  605. * @param[in] a first vector
  606. * @param[in] b second vector
  607. * @returns destination
  608. */
  609. CGLM_INLINE
  610. ivec2s
  611. glms_ivec2_(maxv)(ivec2s a, ivec2s b) {
  612. ivec2s r;
  613. glm_ivec2_maxv(a.raw, b.raw, r.raw);
  614. return r;
  615. }
  616. /*!
  617. * @brief set each member of dest to lesser of vector a and b
  618. *
  619. * @param[in] a first vector
  620. * @param[in] b second vector
  621. * @returns destination
  622. */
  623. CGLM_INLINE
  624. ivec2s
  625. glms_ivec2_(minv)(ivec2s a, ivec2s b) {
  626. ivec2s r;
  627. glm_ivec2_minv(a.raw, b.raw, r.raw);
  628. return r;
  629. }
  630. /*!
  631. * @brief clamp each member of [v] between minVal and maxVal (inclusive)
  632. *
  633. * @param[in] v vector
  634. * @param[in] minVal minimum value
  635. * @param[in] maxVal maximum value
  636. * @returns clamped vector
  637. */
  638. CGLM_INLINE
  639. ivec2s
  640. glms_ivec2_(clamp)(ivec2s v, int minVal, int maxVal) {
  641. glm_ivec2_clamp(v.raw, minVal, maxVal);
  642. return v;
  643. }
  644. /*!
  645. * @brief absolute value of v
  646. *
  647. * @param[in] v vector
  648. * @returns destination
  649. */
  650. CGLM_INLINE
  651. ivec2s
  652. glms_ivec2_(abs)(ivec2s v) {
  653. ivec2s r;
  654. glm_ivec2_abs(v.raw, r.raw);
  655. return r;
  656. }
  657. #endif /* cglms_ivec2_h */