PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LCOV - code coverage report
Current view: top level - ext/hash - hash_joaat.c (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 23 23 100.0 %
Date: 2014-08-04 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :   +----------------------------------------------------------------------+
       3             :   | PHP Version 5                                                        |
       4             :   +----------------------------------------------------------------------+
       5             :   | Copyright (c) 1997-2014 The PHP Group                                |
       6             :   +----------------------------------------------------------------------+
       7             :   | This source file is subject to version 3.01 of the PHP license,      |
       8             :   | that is bundled with this package in the file LICENSE, and is        |
       9             :   | available through the world-wide-web at the following url:           |
      10             :   | http://www.php.net/license/3_01.txt                                  |
      11             :   | If you did not receive a copy of the PHP license and are unable to   |
      12             :   | obtain it through the world-wide-web, please send a note to          |
      13             :   | license@php.net so we can mail you a copy immediately.               |
      14             :   +----------------------------------------------------------------------+
      15             :   | Author: Martin Jansen <mj@php.net>                                   |
      16             :   +----------------------------------------------------------------------+
      17             : */
      18             : 
      19             : /* $Id$ */
      20             : 
      21             : /* Implements Jenkins's one-at-a-time hashing algorithm as presented on
      22             :  * http://www.burtleburtle.net/bob/hash/doobs.html.
      23             :  */
      24             : 
      25             : #include "php_hash.h"
      26             : #include "php_hash_joaat.h"
      27             : 
      28             : const php_hash_ops php_hash_joaat_ops = {
      29             :         (php_hash_init_func_t) PHP_JOAATInit,
      30             :         (php_hash_update_func_t) PHP_JOAATUpdate,
      31             :         (php_hash_final_func_t) PHP_JOAATFinal,
      32             :         (php_hash_copy_func_t) php_hash_copy,
      33             :         4,
      34             :         4,
      35             :         sizeof(PHP_JOAAT_CTX)
      36             : };
      37             : 
      38           9 : PHP_HASH_API void PHP_JOAATInit(PHP_JOAAT_CTX *context)
      39             : {
      40           9 :         context->state = 0;
      41           9 : }
      42             : 
      43           8 : PHP_HASH_API void PHP_JOAATUpdate(PHP_JOAAT_CTX *context, const unsigned char *input, unsigned int inputLen)
      44             : {
      45           8 :         context->state = joaat_buf((void *)input, inputLen, context->state);
      46           8 : }
      47             : 
      48           9 : PHP_HASH_API void PHP_JOAATFinal(unsigned char digest[4], PHP_JOAAT_CTX * context)
      49             : {
      50             : #ifdef WORDS_BIGENDIAN
      51             :         memcpy(digest, &context->state, 4);
      52             : #else
      53           9 :         int i = 0;
      54           9 :         unsigned char *c = (unsigned char *) &context->state;
      55             : 
      56          45 :         for (i = 0; i < 4; i++) {
      57          36 :                 digest[i] = c[3 - i];
      58             :         }
      59             : #endif
      60           9 :     context->state = 0;
      61           9 : }
      62             : 
      63             : /*
      64             :  * joaat_buf - perform a Jenkins's one-at-a-time hash on a buffer
      65             :  *
      66             :  * input:
      67             :  *  buf - start of buffer to hash
      68             :  *  len - length of buffer in octets
      69             :  *
      70             :  * returns:
      71             :  *  32 bit hash as a static hash type
      72             :  */
      73             : static php_hash_uint32
      74           8 : joaat_buf(void *buf, size_t len, php_hash_uint32 hval)
      75             : {
      76             :     size_t i;
      77           8 :     unsigned char *input = (unsigned char *)buf;
      78             :  
      79         109 :     for (i = 0; i < len; i++) {
      80         101 :         hval += input[i];
      81         101 :         hval += (hval << 10);
      82         101 :         hval ^= (hval >> 6);
      83             :     }
      84             : 
      85           8 :     hval += (hval << 3);
      86           8 :     hval ^= (hval >> 11);
      87           8 :     hval += (hval << 15);
      88             : 
      89           8 :     return hval;
      90             : }
      91             : 
      92             : /*
      93             :  * Local variables:
      94             :  * tab-width: 4
      95             :  * c-basic-offset: 4
      96             :  * End:
      97             :  * vim600: noet sw=4 ts=4 fdm=marker
      98             :  * vim<600: noet sw=4 ts=4
      99             :  */

Generated by: LCOV version 1.10

Generated at Mon, 04 Aug 2014 15:49:04 +0000 (15 days ago)

Copyright © 2005-2014 The PHP Group
All rights reserved.