Index.hpp

00001 #ifndef __vector_Index_HPP
00002 #define __vector_Index_HPP "Created 21.05.2006 12:12:12 by werner"
00003 
00004 #include <sys/types.h>
00005 #include <stdint.h>
00006 
00007 namespace Fiber
00008 {
00009 
00010 template <int PtrSize>  struct  IndexTypeConfig;
00011 
00012 template <>  struct IndexTypeConfig<8> { typedef uint64_t index_t; };
00013 template <>  struct IndexTypeConfig<4> { typedef uint32_t index_t; };
00014 
00022 typedef IndexTypeConfig<sizeof(void*)>::index_t index_t;
00023 
00030 inline  int log2(index_t arg) 
00031 {
00032 int     loop;
00033         for (loop = 0; arg != 0; loop++, arg >>= 1)
00034                 ;
00035 
00036         return loop;
00037 }
00038 
00043 inline uint32_t RoundUpToNextHighestPowerOf2(uint32_t v) 
00044 {
00045         v--;
00046         v |= v >> 1; 
00047         v |= v >> 2; 
00048         v |= v >> 4; 
00049         v |= v >> 8; 
00050         v |= v >> 16; 
00051         v++;
00052         return v;
00053 }
00054 
00055 inline index_t clamp(index_t value, index_t range)
00056 {
00057         if (value<0    ) return 0; 
00058         if (value>range) return range;
00059 }
00060 
00061 inline index_t clamp_m1(index_t value, index_t range)
00062 {
00063         if (value<0     ) return 0; 
00064         if (value>=range) return range-1;
00065 }
00066 
00067 } /* namespace Fiber */ 
00068 
00069 #endif /* __vector_Index_HPP */
00070