00001
00002
00004
00005
00006
00007
00009
00010
00011
00013
00014 #ifndef glm_gtx_bit
00015 #define glm_gtx_bit
00016
00017
00018 #include "../glm.hpp"
00019 #include "../gtc/half_float.hpp"
00020
00021 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
00022 # pragma message("GLM: GLM_GTX_bit extension included")
00023 #endif
00024
00025 namespace glm{
00026 namespace gtx{
00027 namespace bit
00028 {
00029 using namespace gtc::half_float;
00030
00033
00036 template <typename genIType>
00037 genIType mask(genIType const & count);
00038
00042 template <typename genIUType, typename sizeType>
00043 genIUType extractField(
00044 genIUType const & v,
00045 sizeType const & first,
00046 sizeType const & count);
00047
00050 template <typename genType>
00051 int lowestBit(genType const & value);
00052
00055 template <typename genType>
00056 int highestBit(genType const & value);
00057
00060 template <typename genType>
00061 genType highestBitValue(genType const & value);
00062
00065 template <typename genType>
00066 bool isPowerOfTwo(genType const & value);
00067
00070 template <typename genType>
00071 genType powerOfTwoAbove(genType const & value);
00072
00075 template <typename genType>
00076 genType powerOfTwoBelow(genType const & value);
00077
00080 template <typename genType>
00081 genType powerOfTwoNearest(genType const & value);
00082
00085 template <typename genType>
00086 genType bitRevert(genType const & value);
00087
00090 template <typename genType>
00091 genType bitRotateRight(genType const & In, std::size_t Shift);
00092
00095 template <typename genType>
00096 genType bitRotateLeft(genType const & In, std::size_t Shift);
00097
00099 }
00100 }
00101 }
00102
00103 #include "bit.inl"
00104
00105 namespace glm{using namespace gtx::bit;}
00106
00107 #endif//glm_gtx_bit