BeRTOS
rotating_hash.h
Go to the documentation of this file.
00001 
00047 #ifndef ALGO_ROTATING_H
00048 #define ALGO_ROTATING_H
00049 
00050 #include <cfg/compiler.h>
00051 
00052 typedef uint16_t rotating_t;
00053 
00054 
00058 INLINE void rotating_init(rotating_t *rot)
00059 {
00060     *rot = 0;
00061 }
00062 
00066 INLINE void rotating_update1(uint8_t c, rotating_t *rot)
00067 {
00068     *rot = (*rot << 4) ^ (*rot >> 12) ^ c;
00069 }
00070 
00074 INLINE void rotating_update(const void *_buf, size_t len, rotating_t *rot)
00075 {
00076     const uint8_t *buf = (const uint8_t *)_buf;
00077 
00078     while (len--)
00079         rotating_update1(*buf++, rot);
00080 }
00081 
00082 
00083 #endif // ALGO_ROTATING_H