From 9fd8d24f59b1af976526fc43baf6635a3714c71e Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Sun, 17 Aug 2014 15:10:20 -0700 Subject: [PATCH] Get rid of max size It's so huge that no-one should ever reach it. A more accurate safety net is a maximum iteration limit during PHF generation. --- phf_mac/src/lib.rs | 12 ------------ shared/mod.rs | 11 ++++------- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/phf_mac/src/lib.rs b/phf_mac/src/lib.rs index e91001fb..e7467785 100644 --- a/phf_mac/src/lib.rs +++ b/phf_mac/src/lib.rs @@ -204,12 +204,6 @@ fn parse_map(cx: &mut ExtCtxt, tts: &[TokenTree]) -> Option> { } } - if entries.len() > shared::MAX_SIZE { - cx.span_err(parser.span, format!("maps with more than {} entries are not supported", - shared::MAX_SIZE).as_slice()); - return None; - } - if bad { return None; } @@ -242,12 +236,6 @@ fn parse_set(cx: &mut ExtCtxt, tts: &[TokenTree]) -> Option> { } } - if entries.len() > shared::MAX_SIZE { - cx.span_err(parser.span, format!("maps with more than {} entries are not supported", - shared::MAX_SIZE).as_slice()); - return None; - } - if bad { return None; } diff --git a/shared/mod.rs b/shared/mod.rs index 32a9d3f8..97734b6d 100644 --- a/shared/mod.rs +++ b/shared/mod.rs @@ -1,20 +1,17 @@ use std::hash::{Hash, Hasher, Writer}; use std::hash::sip::{SipHasher, SipState}; -static LOG_MAX_SIZE: uint = 21; - -pub static MAX_SIZE: uint = 1 << LOG_MAX_SIZE; - pub fn displace(f1: u32, f2: u32, d1: u32, d2: u32) -> u32 { d2 + f1 * d1 + f2 } fn split(hash: u64) -> (u32, u32, u32) { - let mask = (MAX_SIZE - 1) as u64; + let bits = 21; + let mask = (1 << bits) - 1; ((hash & mask) as u32, - ((hash >> LOG_MAX_SIZE) & mask) as u32, - ((hash >> (2 * LOG_MAX_SIZE)) & mask) as u32) + ((hash >> bits) & mask) as u32, + ((hash >> (2 * bits)) & mask) as u32) } /// A trait implemented by types which can be used in PHF data structures