1f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com#pragma once 2f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 3f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com#include "Platform.h" 4f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 5f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com#include <vector> 6f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 7f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com//----------------------------------------------------------------------------- 8f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 9f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid printbits ( const void * blob, int len ); 10f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid printhex32 ( const void * blob, int len ); 11f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid printbytes ( const void * blob, int len ); 12f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid printbytes2 ( const void * blob, int len ); 13f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 14f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comuint32_t popcount ( uint32_t v ); 15f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comuint32_t parity ( uint32_t v ); 16f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 17f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comuint32_t getbit ( const void * blob, int len, uint32_t bit ); 18f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comuint32_t getbit_wrap ( const void * blob, int len, uint32_t bit ); 19f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 20f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid setbit ( void * blob, int len, uint32_t bit ); 21f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid setbit ( void * blob, int len, uint32_t bit, uint32_t val ); 22f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 23f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid clearbit ( void * blob, int len, uint32_t bit ); 24f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 25f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid flipbit ( void * blob, int len, uint32_t bit ); 26f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 27f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comint countbits ( uint32_t v ); 28f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comint countbits ( std::vector<uint32_t> & v ); 29f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 30f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comint countbits ( const void * blob, int len ); 31f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 32f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid invert ( std::vector<uint32_t> & v ); 33f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 34f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com//---------- 35f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 36f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate< typename T > 37f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline uint32_t getbit ( T & blob, uint32_t bit ) 38f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 39f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return getbit(&blob,sizeof(blob),bit); 40f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 41f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 42f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline uint32_t getbit ( uint32_t & blob, uint32_t bit ) { return (blob >> (bit & 31)) & 1; } 43f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline uint32_t getbit ( uint64_t & blob, uint32_t bit ) { return (blob >> (bit & 63)) & 1; } 44f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 45f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com//---------- 46f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 47f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate< typename T > 48f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void setbit ( T & blob, uint32_t bit ) 49f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 50f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return setbit(&blob,sizeof(blob),bit); 51f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 52f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 53f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void setbit ( uint32_t & blob, uint32_t bit ) { blob |= uint32_t(1) << (bit & 31); } 54f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void setbit ( uint64_t & blob, uint32_t bit ) { blob |= uint64_t(1) << (bit & 63); } 55f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 56f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com//---------- 57f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 58f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate< typename T > 59f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void flipbit ( T & blob, uint32_t bit ) 60f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 61f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com flipbit(&blob,sizeof(blob),bit); 62f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 63f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 64f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void flipbit ( uint32_t & blob, uint32_t bit ) { bit &= 31; blob ^= (uint32_t(1) << bit); } 65f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void flipbit ( uint64_t & blob, uint32_t bit ) { bit &= 63; blob ^= (uint64_t(1) << bit); } 66f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 67f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com//----------------------------------------------------------------------------- 68f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com// Left and right shift of blobs. The shift(N) versions work on chunks of N 69f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com// bits at a time (faster) 70f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 71f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid lshift1 ( void * blob, int len, int c ); 72f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid lshift8 ( void * blob, int len, int c ); 73f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid lshift32 ( void * blob, int len, int c ); 74f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 75f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid rshift1 ( void * blob, int len, int c ); 76f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid rshift8 ( void * blob, int len, int c ); 77f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid rshift32 ( void * blob, int len, int c ); 78f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 79f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void lshift ( void * blob, int len, int c ) 80f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 81f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if((len & 3) == 0) 82f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 83f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com lshift32(blob,len,c); 84f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 85f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 86f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 87f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com lshift8(blob,len,c); 88f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 89f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 90f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 91f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void rshift ( void * blob, int len, int c ) 92f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 93f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if((len & 3) == 0) 94f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 95f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com rshift32(blob,len,c); 96f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 97f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 98f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 99f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com rshift8(blob,len,c); 100f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 101f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 102f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 103f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate < typename T > 104f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void lshift ( T & blob, int c ) 105f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 106f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if((sizeof(T) & 3) == 0) 107f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 108f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com lshift32(&blob,sizeof(T),c); 109f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 110f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 111f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 112f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com lshift8(&blob,sizeof(T),c); 113f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 114f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 115f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 116f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate < typename T > 117f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void rshift ( T & blob, int c ) 118f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 119f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if((sizeof(T) & 3) == 0) 120f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 121f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com lshift32(&blob,sizeof(T),c); 122f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 123f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 124f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 125f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com lshift8(&blob,sizeof(T),c); 126f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 127f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 128f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 129f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void lshift ( uint32_t & blob, int c ) { blob <<= c; } 130f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void lshift ( uint64_t & blob, int c ) { blob <<= c; } 131f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void rshift ( uint32_t & blob, int c ) { blob >>= c; } 132f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void rshift ( uint64_t & blob, int c ) { blob >>= c; } 133f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 134f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com//----------------------------------------------------------------------------- 135f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com// Left and right rotate of blobs. The rot(N) versions work on chunks of N 136f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com// bits at a time (faster) 137f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 138f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid lrot1 ( void * blob, int len, int c ); 139f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid lrot8 ( void * blob, int len, int c ); 140f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid lrot32 ( void * blob, int len, int c ); 141f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 142f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid rrot1 ( void * blob, int len, int c ); 143f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid rrot8 ( void * blob, int len, int c ); 144f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comvoid rrot32 ( void * blob, int len, int c ); 145f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 146f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void lrot ( void * blob, int len, int c ) 147f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 148f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if((len & 3) == 0) 149f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 150f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return lrot32(blob,len,c); 151f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 152f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 153f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 154f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return lrot8(blob,len,c); 155f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 156f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 157f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 158f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void rrot ( void * blob, int len, int c ) 159f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 160f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if((len & 3) == 0) 161f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 162f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return rrot32(blob,len,c); 163f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 164f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 165f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 166f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return rrot8(blob,len,c); 167f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 168f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 169f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 170f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate < typename T > 171f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void lrot ( T & blob, int c ) 172f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 173f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if((sizeof(T) & 3) == 0) 174f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 175f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return lrot32(&blob,sizeof(T),c); 176f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 177f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 178f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 179f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return lrot8(&blob,sizeof(T),c); 180f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 181f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 182f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 183f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate < typename T > 184f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline void rrot ( T & blob, int c ) 185f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 186f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if((sizeof(T) & 3) == 0) 187f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 188f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return rrot32(&blob,sizeof(T),c); 189f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 190f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 191f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 192f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return rrot8(&blob,sizeof(T),c); 193f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 194f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 195f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 196f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void lrot ( uint32_t & blob, int c ) { blob = ROTL32(blob,c); } 197f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void lrot ( uint64_t & blob, int c ) { blob = ROTL64(blob,c); } 198f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void rrot ( uint32_t & blob, int c ) { blob = ROTR32(blob,c); } 199f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> inline void rrot ( uint64_t & blob, int c ) { blob = ROTR64(blob,c); } 200f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 201f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com//----------------------------------------------------------------------------- 202f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com// Bit-windowing functions - select some N-bit subset of the input blob 203f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 204f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comuint32_t window1 ( void * blob, int len, int start, int count ); 205f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comuint32_t window8 ( void * blob, int len, int start, int count ); 206f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comuint32_t window32 ( void * blob, int len, int start, int count ); 207f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 208f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline uint32_t window ( void * blob, int len, int start, int count ) 209f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 210f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if(len & 3) 211f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 212f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return window8(blob,len,start,count); 213f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 214f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 215f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 216f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return window32(blob,len,start,count); 217f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 218f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 219f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 220f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate < typename T > 221f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline uint32_t window ( T & blob, int start, int count ) 222f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 223f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com if((sizeof(T) & 3) == 0) 224f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 225f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return window32(&blob,sizeof(T),start,count); 226f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 227f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com else 228f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com { 229f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return window8(&blob,sizeof(T),start,count); 230f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com } 231f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 232f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 233f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> 234f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline uint32_t window ( uint32_t & blob, int start, int count ) 235f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 236f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return ROTR32(blob,start) & ((1<<count)-1); 237f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 238f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 239f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.comtemplate<> 240f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.cominline uint32_t window ( uint64_t & blob, int start, int count ) 241f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com{ 242f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com return (uint32_t)ROTR64(blob,start) & ((1<<count)-1); 243f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com} 244f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com 245f3b789787b93945c974e2cc517b7dc352b28354etanjent@gmail.com//----------------------------------------------------------------------------- 246