# GL Profile Suite / boost_1_51_0 / boost / container / detail / math_functions.hpp

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113``` ```////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Stephen Cleary 2000. // (C) Copyright Ion Gaztanaga 2007-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/container for documentation. // // This file is a slightly modified file from Boost.Pool // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP #define BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP #include "config_begin.hpp" #include #include namespace boost { namespace container { namespace container_detail { // Greatest common divisor and least common multiple // // gcd is an algorithm that calculates the greatest common divisor of two // integers, using Euclid's algorithm. // // Pre: A > 0 && B > 0 // Recommended: A > B template inline Integer gcd(Integer A, Integer B) { do { const Integer tmp(B); B = A % B; A = tmp; } while (B != 0); return A; } // // lcm is an algorithm that calculates the least common multiple of two // integers. // // Pre: A > 0 && B > 0 // Recommended: A > B template inline Integer lcm(const Integer & A, const Integer & B) { Integer ret = A; ret /= gcd(A, B); ret *= B; return ret; } template inline Integer log2_ceil(const Integer & A) { Integer i = 0; Integer power_of_2 = 1; while(power_of_2 < A){ power_of_2 <<= 1; ++i; } return i; } template inline Integer upper_power_of_2(const Integer & A) { Integer power_of_2 = 1; while(power_of_2 < A){ power_of_2 <<= 1; } return power_of_2; } //This function uses binary search to discover the //highest set bit of the integer inline std::size_t floor_log2 (std::size_t x) { const std::size_t Bits = sizeof(std::size_t)*CHAR_BIT; const bool Size_t_Bits_Power_2= !(Bits & (Bits-1)); BOOST_STATIC_ASSERT(((Size_t_Bits_Power_2)== true)); std::size_t n = x; std::size_t log2 = 0; for(std::size_t shift = Bits >> 1; shift; shift >>= 1){ std::size_t tmp = n >> shift; if (tmp) log2 += shift, n = tmp; } return log2; } } // namespace container_detail } // namespace container } // namespace boost #include #endif ```
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.