chromium/third_party/rust/chromium_crates_io/vendor/simd-adler32-0.3.7/src/hash.rs

use crate::{Adler32, Adler32Hash};

impl Adler32Hash for &[u8] {
  fn hash(&self) -> u32 {
    let mut hash = Adler32::new();

    hash.write(self);
    hash.finish()
  }
}

impl Adler32Hash for &str {
  fn hash(&self) -> u32 {
    let mut hash = Adler32::new();

    hash.write(self.as_bytes());
    hash.finish()
  }
}

#[cfg(feature = "const-generics")]
impl<const SIZE: usize> Adler32Hash for [u8; SIZE] {
  fn hash(&self) -> u32 {
    let mut hash = Adler32::new();

    hash.write(self);
    hash.finish()
  }
}

macro_rules! array_impl {
  ($s:expr, $($size:expr),+) => {
    array_impl!($s);
    $(array_impl!{$size})*
  };
  ($size:expr) => {
    #[cfg(not(feature = "const-generics"))]
    impl Adler32Hash for [u8; $size] {
      fn hash(&self) -> u32 {
        let mut hash = Adler32::new();

        hash.write(self);
        hash.finish()
      }
    }
  };
}

array_impl!(
  0,
  1,
  2,
  3,
  4,
  5,
  6,
  7,
  8,
  9,
  10,
  11,
  12,
  13,
  14,
  15,
  16,
  17,
  18,
  19,
  20,
  21,
  22,
  23,
  24,
  25,
  26,
  27,
  28,
  29,
  30,
  31,
  32,
  33,
  34,
  35,
  36,
  37,
  38,
  39,
  40,
  41,
  42,
  43,
  44,
  45,
  46,
  47,
  48,
  49,
  50,
  51,
  52,
  53,
  54,
  55,
  56,
  57,
  58,
  59,
  60,
  61,
  62,
  63,
  64,
  65,
  66,
  67,
  68,
  69,
  70,
  71,
  72,
  73,
  74,
  75,
  76,
  77,
  78,
  79,
  80,
  81,
  82,
  83,
  84,
  85,
  86,
  87,
  88,
  89,
  90,
  91,
  92,
  93,
  94,
  95,
  96,
  97,
  98,
  99,
  100,
  1024,
  1024 * 1024,
  1024 * 1024 * 1024,
  2048,
  4096
);