114 template <
typename T>
145 void operator() (uint2* word,
const uint2 mask)
const
152 void operator() (uint2& block,
const uint32 word,
const uint32 mask)
const
154 if (word == 0) block.x |= mask;
155 else block.y |= mask;
166 void operator() (uint4* word,
const uint4 mask)
const
175 void operator() (uint4& block,
const uint32 word,
const uint32 mask)
const
177 if (word == 0) block.x |= mask;
178 else if (word == 1) block.y |= mask;
179 else if (word == 2) block.z |= mask;
180 else block.w |= mask;
213 if (word == 0) block.x |= mask;
214 else block.y |= mask;
236 if (word == 0) block.x |= mask;
237 else if (word == 1) block.y |= mask;
238 else if (word == 2) block.z |= mask;
239 else block.w |= mask;
263 typename OrOperator = inplace_or<uint32> >
277 const Hash1 hash1 = Hash1(),
278 const Hash2
hash2 = Hash2());
282 template <
typename Key>
284 void insert(
const Key key,
const OrOperator
or_op = OrOperator());
288 template <
typename Key>
290 bool has(
const Key key)
const;
294 template <
typename Key>
329 typedef typename std::iterator_traits<Iterator>::value_type
block_type;
350 const Hash1 hash1 = Hash1(),
351 const Hash2
hash2 = Hash2());
355 template <
typename Key>
357 void insert(
const Key key,
const OrOperator
or_op = OrOperator());
361 template <
typename Key>
363 bool has(
const Key key)
const;
367 template <
typename Key>
384 return uint32( bits_per_key * logf(2.0) ) + 1u;
393 return -logf(fp_rate) / (logf(2.0f)*logf(2.0f));
401 return float(K) / logf(2.0f);
421 return powf( 1.0f - expf( -
float(K) / bits_per_key ),
float(K) );