1 | /* |
---|---|

2 | --------------------------------------------------------------------------- |

3 | Open Asset Import Library (assimp) |

4 | --------------------------------------------------------------------------- |

5 | |

6 | Copyright (c) 2006-2016, assimp team |

7 | |

8 | All rights reserved. |

9 | |

10 | Redistribution and use of this software in source and binary forms, |

11 | with or without modification, are permitted provided that the following |

12 | conditions are met: |

13 | |

14 | * Redistributions of source code must retain the above |

15 | copyright notice, this list of conditions and the |

16 | following disclaimer. |

17 | |

18 | * Redistributions in binary form must reproduce the above |

19 | copyright notice, this list of conditions and the |

20 | following disclaimer in the documentation and/or other |

21 | materials provided with the distribution. |

22 | |

23 | * Neither the name of the assimp team, nor the names of its |

24 | contributors may be used to endorse or promote products |

25 | derived from this software without specific prior |

26 | written permission of the assimp team. |

27 | |

28 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |

29 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |

30 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |

31 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |

32 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |

33 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |

34 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |

35 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |

36 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |

37 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |

38 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |

39 | --------------------------------------------------------------------------- |

40 | */ |

41 | |

42 | /** @file MathFunctions.h |

43 | * @brief Implementation of the math functions (gcd and lcm) |

44 | * |

45 | * Copied from BoostWorkaround/math |

46 | */ |

47 | |

48 | namespace Assimp { |

49 | namespace Math { |

50 | |

51 | // TODO: use binary GCD for unsigned integers .... |

52 | template < typename IntegerType > |

53 | IntegerType gcd( IntegerType a, IntegerType b ) |

54 | { |

55 | const IntegerType zero = (IntegerType)0; |

56 | while ( true ) |

57 | { |

58 | if ( a == zero ) |

59 | return b; |

60 | b %= a; |

61 | |

62 | if ( b == zero ) |

63 | return a; |

64 | a %= b; |

65 | } |

66 | } |

67 | |

68 | template < typename IntegerType > |

69 | IntegerType lcm( IntegerType a, IntegerType b ) |

70 | { |

71 | const IntegerType t = gcd (a,b); |

72 | if (!t)return t; |

73 | return a / t * b; |

74 | } |

75 | |

76 | } |

77 | } |

78 |