00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00028
00029 #ifndef INT_TOOLS_HPP
00030 #define INT_TOOLS_HPP
00031
00032 #include "../my_config.h"
00033
00034 #include "integers.hpp"
00035 #include "erreurs.hpp"
00036
00037 namespace libdar
00038 {
00039 typedef unsigned char int_tools_bitfield[8];
00040
00041 extern void int_tools_swap_bytes(unsigned char &a, unsigned char &b);
00042 extern void int_tools_swap_bytes(unsigned char *a, U_I size);
00043 extern void int_tools_expand_byte(unsigned char a, int_tools_bitfield &bit);
00044 extern void int_tools_contract_byte(const int_tools_bitfield &b, unsigned char & a);
00045
00046
00047
00048 template <class T> extern T int_tools_rotate_right_one_bit(T v)
00049 {
00050 bool retenue = (v & 1) != 0;
00051
00052 v >>= 1;
00053 if(retenue)
00054 v |= T(1) << (sizeof(v)*8 - 1);
00055
00056 return v;
00057 }
00058
00059 template <class T> extern T int_tools_maxof_agregate(T unused) { return ~T(0) > 0 ? ~T(0) : ~int_tools_rotate_right_one_bit(T(1)); }
00060
00061 template <class B> static B int_tools_higher_power_of_2(B val)
00062 {
00063 B i = 0;
00064
00065 while((val >> i) > 1)
00066 i++;
00067
00068 return i;
00069 }
00070
00071 }
00072
00073 #endif