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 }
00068
00069 #endif
00070