⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 misc.hpp

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 HPP
📖 第 1 页 / 共 2 页
字号:
#undef min#endif inline word32 min(word32 a, word32 b){    return a < b ? a : b;}inline word32 ByteReverse(word32 value){#ifdef PPC_INTRINSICS    // PPC: load reverse indexed instruction    return (word32)__lwbrx(&value,0);#elif defined(FAST_ROTATE)    // 5 instructions with rotate instruction, 9 without    return (rotrFixed(value, 8U) & 0xff00ff00) |           (rotlFixed(value, 8U) & 0x00ff00ff);#else    // 6 instructions with rotate instruction, 8 without    value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8);    return rotlFixed(value, 16U);#endif}template <typename T>inline void ByteReverse(T* out, const T* in, word32 byteCount){    assert(byteCount % sizeof(T) == 0);    word32 count = byteCount/sizeof(T);    for (word32 i=0; i<count; i++)        out[i] = ByteReverse(in[i]);}inline void ByteReverse(byte* out, const byte* in, word32 byteCount){    word32* o       = reinterpret_cast<word32*>(out);    const word32* i = reinterpret_cast<const word32*>(in);    ByteReverse(o, i, byteCount);}template <class T>inline T ByteReverseIf(T value, ByteOrder order){    return HostByteOrderIs(order) ? value : ByteReverse(value);}template <typename T>inline void ByteReverseIf(T* out, const T* in, word32 bc, ByteOrder order){    if (!HostByteOrderIs(order))         ByteReverse(out, in, bc);    else if (out != in)        memcpy(out, in, bc);}template <class T>inline void GetUserKey(ByteOrder order, T* out, word32 outlen, const byte* in,                       word32 inlen){    const unsigned int U = sizeof(T);    assert(inlen <= outlen*U);    memcpy(out, in, inlen);    memset((byte *)out+inlen, 0, outlen*U-inlen);    ByteReverseIf(out, out, RoundUpToMultipleOf(inlen, U), order);}#ifdef _MSC_VER    // disable conversion warning    #pragma warning(disable:4244)#endifinline byte UnalignedGetWordNonTemplate(ByteOrder order, const byte *block,                                        byte*){    return block[0];}inline word16 UnalignedGetWordNonTemplate(ByteOrder order, const byte* block,                                          word16*){    return (order == BigEndianOrder)        ? block[1] | (block[0] << 8)        : block[0] | (block[1] << 8);}inline word32 UnalignedGetWordNonTemplate(ByteOrder order, const byte* block,                                          word32*){    return (order == BigEndianOrder)        ? word32(block[3]) | (word32(block[2]) << 8) | (word32(block[1]) << 16)            | (word32(block[0]) << 24)        : word32(block[0]) | (word32(block[1]) << 8) | (word32(block[2]) << 16)            | (word32(block[3]) << 24);}template <class T>inline T UnalignedGetWord(ByteOrder order, const byte *block, T* dummy = 0){    return UnalignedGetWordNonTemplate(order, block, dummy);}inline void UnalignedPutWord(ByteOrder order, byte *block, byte value,                             const byte *xorBlock = 0){    block[0] = xorBlock ? (value ^ xorBlock[0]) : value;}#define GETBYTE(x, y) (unsigned int)byte((x)>>(8*(y)))inline void UnalignedPutWord(ByteOrder order, byte *block, word16 value,                             const byte *xorBlock = 0){    if (order == BigEndianOrder)    {        block[0] = GETBYTE(value, 1);        block[1] = GETBYTE(value, 0);    }    else    {        block[0] = GETBYTE(value, 0);        block[1] = GETBYTE(value, 1);    }    if (xorBlock)    {        block[0] ^= xorBlock[0];        block[1] ^= xorBlock[1];    }}inline void UnalignedPutWord(ByteOrder order, byte* block, word32 value,                             const byte* xorBlock = 0){    if (order == BigEndianOrder)    {        block[0] = GETBYTE(value, 3);        block[1] = GETBYTE(value, 2);        block[2] = GETBYTE(value, 1);        block[3] = GETBYTE(value, 0);    }    else    {        block[0] = GETBYTE(value, 0);        block[1] = GETBYTE(value, 1);        block[2] = GETBYTE(value, 2);        block[3] = GETBYTE(value, 3);    }    if (xorBlock)    {        block[0] ^= xorBlock[0];        block[1] ^= xorBlock[1];        block[2] ^= xorBlock[2];        block[3] ^= xorBlock[3];    }}template <class T>inline T GetWord(bool assumeAligned, ByteOrder order, const byte *block){    if (assumeAligned)    {        assert(IsAligned<T>(block));        return ByteReverseIf(*reinterpret_cast<const T *>(block), order);    }    else        return UnalignedGetWord<T>(order, block);}template <class T>inline void GetWord(bool assumeAligned, ByteOrder order, T &result,                    const byte *block){    result = GetWord<T>(assumeAligned, order, block);}template <class T>inline void PutWord(bool assumeAligned, ByteOrder order, byte* block, T value,                    const byte *xorBlock = 0){    if (assumeAligned)    {        assert(IsAligned<T>(block));        if (xorBlock)            *reinterpret_cast<T *>(block) = ByteReverseIf(value, order)                 ^ *reinterpret_cast<const T *>(xorBlock);        else            *reinterpret_cast<T *>(block) = ByteReverseIf(value, order);    }    else        UnalignedPutWord(order, block, value, xorBlock);}template <class T, class B, bool A=true>class GetBlock{public:    GetBlock(const void *block)        : m_block((const byte *)block) {}    template <class U>    inline GetBlock<T, B, A> & operator()(U &x)    {        TAOCRYPT_COMPILE_ASSERT(sizeof(U) >= sizeof(T));        x = GetWord<T>(A, B::ToEnum(), m_block);        m_block += sizeof(T);        return *this;    }private:    const byte *m_block;};template <class T, class B, bool A = true>class PutBlock{public:    PutBlock(const void *xorBlock, void *block)        : m_xorBlock((const byte *)xorBlock), m_block((byte *)block) {}    template <class U>    inline PutBlock<T, B, A> & operator()(U x)    {        PutWord(A, B::ToEnum(), m_block, (T)x, m_xorBlock);        m_block += sizeof(T);        if (m_xorBlock)            m_xorBlock += sizeof(T);        return *this;    }private:    const byte *m_xorBlock;    byte *m_block;};template <class T, class B, bool A=true>struct BlockGetAndPut{    // function needed because of C++ grammatical ambiguity between    // expression-statements and declarations    static inline GetBlock<T, B, A> Get(const void *block)         {return GetBlock<T, B, A>(block);}    typedef PutBlock<T, B, A> Put;};template <bool overflow> struct SafeShifter;template<> struct SafeShifter<true>{    template <class T>    static inline T RightShift(T value, unsigned int bits)    {        return 0;    }    template <class T>    static inline T LeftShift(T value, unsigned int bits)    {        return 0;    }};template<> struct SafeShifter<false>{    template <class T>    static inline T RightShift(T value, unsigned int bits)    {        return value >> bits;    }    template <class T>    static inline T LeftShift(T value, unsigned int bits)    {        return value << bits;    }};template <unsigned int bits, class T>inline T SafeRightShift(T value){    return SafeShifter<(bits>=(8*sizeof(T)))>::RightShift(value, bits);}template <unsigned int bits, class T>inline T SafeLeftShift(T value){    return SafeShifter<(bits>=(8*sizeof(T)))>::LeftShift(value, bits);}inlineword ShiftWordsLeftByBits(word* r, unsigned int n, unsigned int shiftBits){    assert (shiftBits<WORD_BITS);    word u, carry=0;    if (shiftBits)        for (unsigned int i=0; i<n; i++)        {            u = r[i];            r[i] = (u << shiftBits) | carry;            carry = u >> (WORD_BITS-shiftBits);        }    return carry;}inlineword ShiftWordsRightByBits(word* r, unsigned int n, unsigned int shiftBits){    assert (shiftBits<WORD_BITS);    word u, carry=0;    if (shiftBits)        for (int i=n-1; i>=0; i--)        {            u = r[i];            r[i] = (u >> shiftBits) | carry;            carry = u << (WORD_BITS-shiftBits);        }    return carry;}inlinevoid ShiftWordsLeftByWords(word* r, unsigned int n, unsigned int shiftWords){    shiftWords = min(shiftWords, n);    if (shiftWords)    {        for (unsigned int i=n-1; i>=shiftWords; i--)            r[i] = r[i-shiftWords];        SetWords(r, 0, shiftWords);    }}inlinevoid ShiftWordsRightByWords(word* r, unsigned int n, unsigned int shiftWords){    shiftWords = min(shiftWords, n);    if (shiftWords)    {        for (unsigned int i=0; i+shiftWords<n; i++)            r[i] = r[i+shiftWords];        SetWords(r+n-shiftWords, 0, shiftWords);    }}template <class T1, class T2>inline T1 SaturatingSubtract(T1 a, T2 b){    TAOCRYPT_COMPILE_ASSERT_INSTANCE(T1(-1)>0, 0);  // T1 is unsigned type    TAOCRYPT_COMPILE_ASSERT_INSTANCE(T2(-1)>0, 1);  // T2 is unsigned type    return T1((a > b) ? (a - b) : 0);}// declaresunsigned int  BytePrecision(unsigned long value);unsigned int  BitPrecision(unsigned long);unsigned long Crop(unsigned long value, unsigned int size);} // namespace#endif // TAO_CRYPT_MISC_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -