00001
00028
00029
00030 #ifndef __ETL_BIT_ROTATE_H
00031 #define __ETL_BIT_ROTATE_H
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 _ETL_BEGIN_NAMESPACE
00042
00043 template <typename T> T
00044 rot_left(const T &val, const int &bits=1)
00045 {
00046 return (T)( ((unsigned)val<<bits)+((unsigned)val>>(sizeof(T)*8-bits)) );
00047 }
00048
00049 template <typename T> T
00050 rot_right(const T &val, const int &bits=1)
00051 {
00052 return (T)( ((unsigned)val>>bits)+((unsigned)val<<(sizeof(T)*8-bits)) );
00053 }
00054
00055 _ETL_END_NAMESPACE
00056
00057
00058
00059
00060
00061 #endif
00062