sig_div.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "glm_alias.hpp"
4 
5 namespace iv
6 {
7 
8 inline int sig_div( int a, unsigned b )
9 {
10  if( a >= 0 )
11  return a / (int)b;
12  else
13  return ( a - int( b ) + 1 ) / (int)b;
14 }
15 
16 inline int2 sig_div( int2 a, unsigned b )
17 {
18  return int2( sig_div( a.x, b ), sig_div( a.y, b ) );
19 }
20 
21 inline int sig_mul( int a, unsigned b )
22 {
23  return a * b;
24 }
25 
26 inline int2 sig_mul( int2 a, unsigned b )
27 {
28  return int2( sig_mul( a.x, b ), sig_mul( a.y, b ) );
29 }
30 
31 inline int sig_mod( int a, unsigned b )
32 {
33  if( a >= 0 )
34  return a % (int)b;
35  else
36  return ( a + 1 ) % int( b ) + int( b ) - 1;
37 }
38 
39 inline int2 sig_mod( int2 a, unsigned b )
40 {
41  return int2( sig_mod( a.x, b ), sig_mod( a.y, b ) );
42 }
43 
44 inline float sig_fmod( float val, float mod )
45 {
46  if( ( val < 0.0f ) == ( mod < 0.0f ) )
47  return val - mod * float( int( val / mod ) );
48  else
49  return val - mod * float( int( val / mod ) - 1 );
50 }
51 
52 }