duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

murmur3.h (3507B)


      1 /*
      2  * Copyright (C) 2013 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
      3  *
      4  * This file is part of FFmpeg.
      5  *
      6  * FFmpeg is free software; you can redistribute it and/or
      7  * modify it under the terms of the GNU Lesser General Public
      8  * License as published by the Free Software Foundation; either
      9  * version 2.1 of the License, or (at your option) any later version.
     10  *
     11  * FFmpeg is distributed in the hope that it will be useful,
     12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14  * Lesser General Public License for more details.
     15  *
     16  * You should have received a copy of the GNU Lesser General Public
     17  * License along with FFmpeg; if not, write to the Free Software
     18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     19  */
     20 
     21 /**
     22  * @file
     23  * @ingroup lavu_murmur3
     24  * Public header for MurmurHash3 hash function implementation.
     25  */
     26 
     27 #ifndef AVUTIL_MURMUR3_H
     28 #define AVUTIL_MURMUR3_H
     29 
     30 #include <stddef.h>
     31 #include <stdint.h>
     32 
     33 /**
     34  * @defgroup lavu_murmur3 Murmur3
     35  * @ingroup lavu_hash
     36  * MurmurHash3 hash function implementation.
     37  *
     38  * MurmurHash3 is a non-cryptographic hash function, of which three
     39  * incompatible versions were created by its inventor Austin Appleby:
     40  *
     41  * - 32-bit output
     42  * - 128-bit output for 32-bit platforms
     43  * - 128-bit output for 64-bit platforms
     44  *
     45  * FFmpeg only implements the last variant: 128-bit output designed for 64-bit
     46  * platforms. Even though the hash function was designed for 64-bit platforms,
     47  * the function in reality works on 32-bit systems too, only with reduced
     48  * performance.
     49  *
     50  * @anchor lavu_murmur3_seedinfo
     51  * By design, MurmurHash3 requires a seed to operate. In response to this,
     52  * libavutil provides two functions for hash initiation, one that requires a
     53  * seed (av_murmur3_init_seeded()) and one that uses a fixed arbitrary integer
     54  * as the seed, and therefore does not (av_murmur3_init()).
     55  *
     56  * To make hashes comparable, you should provide the same seed for all calls to
     57  * this hash function -- if you are supplying one yourself, that is.
     58  *
     59  * @{
     60  */
     61 
     62 /**
     63  * Allocate an AVMurMur3 hash context.
     64  *
     65  * @return Uninitialized hash context or `NULL` in case of error
     66  */
     67 struct AVMurMur3 *av_murmur3_alloc(void);
     68 
     69 /**
     70  * Initialize or reinitialize an AVMurMur3 hash context with a seed.
     71  *
     72  * @param[out] c    Hash context
     73  * @param[in]  seed Random seed
     74  *
     75  * @see av_murmur3_init()
     76  * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of
     77  * seeds for MurmurHash3.
     78  */
     79 void av_murmur3_init_seeded(struct AVMurMur3 *c, uint64_t seed);
     80 
     81 /**
     82  * Initialize or reinitialize an AVMurMur3 hash context.
     83  *
     84  * Equivalent to av_murmur3_init_seeded() with a built-in seed.
     85  *
     86  * @param[out] c    Hash context
     87  *
     88  * @see av_murmur3_init_seeded()
     89  * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of
     90  * seeds for MurmurHash3.
     91  */
     92 void av_murmur3_init(struct AVMurMur3 *c);
     93 
     94 /**
     95  * Update hash context with new data.
     96  *
     97  * @param[out] c    Hash context
     98  * @param[in]  src  Input data to update hash with
     99  * @param[in]  len  Number of bytes to read from `src`
    100  */
    101 void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, size_t len);
    102 
    103 /**
    104  * Finish hashing and output digest value.
    105  *
    106  * @param[in,out] c    Hash context
    107  * @param[out]    dst  Buffer where output digest value is stored
    108  */
    109 void av_murmur3_final(struct AVMurMur3 *c, uint8_t dst[16]);
    110 
    111 /**
    112  * @}
    113  */
    114 
    115 #endif /* AVUTIL_MURMUR3_H */