LCOV - code coverage report
Current view: top level - external/hash - cmetrohash.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 5 5 100.0 %
Date: 2016-11-30 13:12:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : // metrohash.h
       2                 :            : //
       3                 :            : // The MIT License (MIT)
       4                 :            : //
       5                 :            : // Copyright (c) 2015 J. Andrew Rogers
       6                 :            : //
       7                 :            : // Updated Nov. 2015 to use safe unaligned reads and platform neutral
       8                 :            : // hash. This WILL change hashes on big endian platfors. / mikkelfj
       9                 :            : //
      10                 :            : // Permission is hereby granted, free of charge, to any person obtaining a copy
      11                 :            : // of this software and associated documentation files (the "Software"), to deal
      12                 :            : // in the Software without restriction, including without limitation the rights
      13                 :            : // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      14                 :            : // copies of the Software, and to permit persons to whom the Software is
      15                 :            : // furnished to do so, subject to the following conditions:
      16                 :            : //
      17                 :            : // The above copyright notice and this permission notice shall be included in all
      18                 :            : // copies or substantial portions of the Software.
      19                 :            : //
      20                 :            : // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      21                 :            : // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      22                 :            : // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      23                 :            : // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      24                 :            : // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      25                 :            : // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      26                 :            : // SOFTWARE.
      27                 :            : //
      28                 :            : 
      29                 :            : #ifndef CMETROHASH_METROHASH_H
      30                 :            : #define CMETROHASH_METROHASH_H
      31                 :            : 
      32                 :            : #include "ht_portable.h"
      33                 :            : #include "unaligned.h"
      34                 :            : 
      35                 :            : #pragma once
      36                 :            : 
      37                 :            : #if defined (__cplusplus)
      38                 :            : extern "C" {
      39                 :            : #endif
      40                 :            : 
      41                 :            : #include <stdint.h>
      42                 :            : #include <string.h>
      43                 :            : 
      44                 :            : // MetroHash 64-bit hash functions
      45                 :            : void cmetrohash64_1(const uint8_t * key, uint64_t len, uint32_t seed, uint8_t * out);
      46                 :            : void cmetrohash64_2(const uint8_t * key, uint64_t len, uint32_t seed, uint8_t * out);
      47                 :            : 
      48                 :            : 
      49                 :            : /* rotate right idiom recognized by compiler*/
      50                 :            : inline static uint64_t crotate_right(uint64_t v, unsigned k)
      51                 :            : {
      52                 :      14814 :     return (v >> k) | (v << (64 - k));
      53                 :            : }
      54                 :            : 
      55                 :            : inline static uint64_t cread_u64(const void * const ptr)
      56                 :            : {
      57                 :       2296 :     return (uint64_t)unaligned_read_le64toh(ptr);
      58                 :            : }
      59                 :            : 
      60                 :            : inline static uint64_t cread_u32(const void * const ptr)
      61                 :            : {
      62                 :       1402 :     return (uint64_t)unaligned_read_le32toh(ptr);
      63                 :            : }
      64                 :            : 
      65                 :            : inline static uint64_t cread_u16(const void * const ptr)
      66                 :            : {
      67                 :       1352 :     return (uint64_t)unaligned_read_le16toh(ptr);
      68                 :            : }
      69                 :            : 
      70                 :            : inline static uint64_t cread_u8 (const void * const ptr)
      71                 :            : {
      72                 :       1642 :     return * (uint8_t *) ptr;
      73                 :            : }
      74                 :            : 
      75                 :            : #if defined (__cplusplus)
      76                 :            : }
      77                 :            : #endif
      78                 :            : #endif // #ifndef CMETROHASH_METROHASH_H

Generated by: LCOV version 1.12