diff src/core/ngx_crc32.h @ 793:8d39da951bbd

split ngx_crc32() to short and long version
author Igor Sysoev <igor@sysoev.ru>
date Thu, 19 Oct 2006 09:57:49 +0000
parents f9a971440614
children 45df22906c12
line wrap: on
line diff
--- a/src/core/ngx_crc32.h
+++ b/src/core/ngx_crc32.h
@@ -12,22 +12,44 @@
 #include <ngx_core.h>
 
 
-extern uint32_t  ngx_crc32_table[];
+extern uint32_t  *ngx_crc32_table_short;
+extern uint32_t   ngx_crc32_table256[];
 
 
 static ngx_inline uint32_t
-ngx_crc32(u_char *p, size_t len)
+ngx_crc32_short(u_char *p, size_t len)
+{
+    u_char    c;
+    uint32_t  crc;
+
+    crc = 0xffffffff;
+
+    while (len--) {
+        c = *p++;
+        crc = ngx_crc32_table_short[(crc ^ (c & 0xf)) & 0xf] ^ (crc >> 4);
+        crc = ngx_crc32_table_short[(crc ^ (c >> 4)) & 0xf] ^ (crc >> 4);
+    }
+
+    return crc ^ 0xffffffff;
+}
+
+
+static ngx_inline uint32_t
+ngx_crc32_long(u_char *p, size_t len)
 {
     uint32_t  crc;
 
     crc = 0xffffffff;
 
     while (len--) {
-        crc = ngx_crc32_table[(crc ^ *p++) & 0xff] ^ (crc >> 8);
+        crc = ngx_crc32_table256[(crc ^ *p++) & 0xff] ^ (crc >> 8);
     }
 
     return crc ^ 0xffffffff;
 }
 
 
+ngx_int_t ngx_crc32_init(ngx_pool_t *pool);
+
+
 #endif /* _NGX_CRC32_H_INCLUDED_ */