From 752eb4ea22998268c0c9dc3262e4f8bf26b6f7c8 Mon Sep 17 00:00:00 2001 From: wes Date: Thu, 6 Jul 2017 15:01:08 -0400 Subject: [PATCH] check that k is >= 2 --- bfilter.c | 14 ++++++++++++++ bfilter.o | Bin 14056 -> 14320 bytes bfilter.py | 6 +++--- bfilter.so | Bin 21944 -> 21968 bytes 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/bfilter.c b/bfilter.c index cf5887c..fab2f73 100644 --- a/bfilter.c +++ b/bfilter.c @@ -132,6 +132,14 @@ kth_hash(fnv_hashes_t hashes, hashes_t hash(const char *input, uint32_t k, size_t m) { fnv_hashes_t fnv = hash_fnv(input); + + if (k <= 2) { + hashes_t hashes = malloc((sizeof (uint32_t)) * 2); + hashes[0] = fnv.hash_1 % m; + hashes[1] = fnv.hash_2 % m; + return hashes; + } + hashes_t hashes = malloc((sizeof (uint32_t)) * k); hashes[0] = fnv.hash_1 % m; @@ -147,6 +155,9 @@ int bfilter_set(bit_array_t *filter, const char *key, int k) { + if (k <= 2) { + k = 2; + } hashes_t hashes = hash(key, k, filter->num_elems); for(int i = 0; i < k; i++) { @@ -159,6 +170,9 @@ int bfilter_get(bit_array_t *filter, const char*key, int k) { + if (k <= 2) { + k = 2; + } hashes_t hashes = hash(key, k, filter->num_elems); int exists = 1; diff --git a/bfilter.o b/bfilter.o index 132ba8c77b6aa6a6be2904d1aadea39364516284..954c2715de54712302b8d1dcfc9216cff8911d5b 100644 GIT binary patch delta 5651 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 delta 5540 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 delta 3833 zcmZ`+3s6+o89wLkin|amAWv6$s30pE1+=V$A}k;*x-k%TiTKu32}RMUSZy1YbVYhq zT9VUtOzIR(jWKm>bT*yRTBlIjYT9O^PMwlzl45IgV>Hp46cz3E`}aN|6MJU3|M&f` z^PR`Ny62AZo@2brF5PjzkezRhk7eNz|3c$$W1o>#VpvhYyW@)JBfH}E zZa?u#WW}C{z;(WhTf4@o`J2T~(icu zrTo#=cU21B0nNQorTn2>xmh*znOnK(>IWuKCuY<+ZEIb+Iz z@_}3VXI1BhcIH-w{QW%WL>p(pKa>Tm<&w+)dy88ME?ePT?p)zq>0H$xoz_Ona(aAT zm-4`={I%A#*UMbWP`Pp?=s@X$_RFoAE~VeuS)LJccYe)p4o|dq4wmNf_nU)jkyKUi zUdxSTxxMJyuL^P2IlWF#m2%&!T&&s~pHYjJ$|u1O?}b9`H(H%&*tsCIAos>;j@jLv z+x%{`TDW(PTe%ucMbq|PXLR`un!{aiyXERKC8)`U=n@t#9OZNQuUlw&{j?mhPHtE? za5og{0y&B~dtmpY=Q-FQ>>XIw{ZJ?!)AzuxhE0AD3hjX10oz4>*rTv^9Nk%17wjPH z0IVHbZV!b*OGIvTmQ-?AERCMVgW~zl zB~pVtuUyV?%Jxz@y;M#vm19a}%S8QkB{$aVE}}#)-|`%%2p0PRB_EuBR_H`MRINe8$U0lVk7$6U~ez zBw*WlH$fVSP3v|tey|tLmM~@f5Eb{~FXhT~<9?RH7?v=g`Y&#}=nKoa9#g6>=@8H1&RTy6YD!||e-Z3PKuv$#1 zO8fyyToa~@|B#B0gQyaJL=x|UPO8^FDcRw6j0Mn+^zEmDiL;SrYt>UMs=n=r*y^D# z(MM9_pCfhc)bYe4Y8OQ{Py zbensbZ9of*jS5#r`j~iqT9%#iQo|?NN>aEt5fl1o!U#l2aoejP#p2Gi$!TgM4$`cZvay%E8`?s z6540}8lYIKPeX)8#wj@45S{k+L!#2GDVO2yL43-)`9L>;Xk>i~@)fNYV0iG&cQL7b zn7B<=~F9S z#5@VDc!zlkwLTke4Zu^0a^xp9&{asAf;B%)^p~{w$t3tVX!xsIB<5!)<7TE#Ws5*@;hs(0#uMl8#-qQY2-%Rz>Hw7MR{Vd>Cx= zNBP5N8DpF!UP@HX`WO!>+jItrv*}HdvI*v_ZCMW}PR^J!j_#-$$~+S(Zp}y-N1LE} zm;wJFD!a-=KO}Oie1oP43}4jC^(Uy;X7zVYIJzoaMkHhpO|FS7&1N|Nz@_3 z1)-rPs(9piOe^?>QJ7k-vN z5j86Ma`zl#f#JGJqYd#)fro-LdZuV?7}Xz605V}?`^UV&(K zj8E~L#VbW)p3!EN4hu*#W%+9KtUM!Yxeg07*TYo~YVH4}SsbMf^Nn6BRS6@{_qA-T zdNMY*TJJR1C|jXJtOvL2$ziQZ(lThhI<{#(6WiL_t&>#4xvjNZCz*zG>vQ5#!Gu6x z!F!yih@TWD;mOP5#7(DFTqwM(vcR9d+Azj;Tbp`Fv$~WllUTzOZTijZ(R!cN>?Isj ztRt|iG=t-Rntf#nCYi;+CW+p%L{khKBwrw+e5u4^#F~m#{29?#@!F_gdCyj6q41?j z2Uh~;D_8N6pL~IWs-XyJ&@A$*XIYu{QDvgB+F{i{u`%Lxu#umZA5}YI2enMy&JE<& z_#|E@PS!ejy7;KJ*!t!y^`M4DuE)XO5RIN<>&CgNPZlRV4(qp^Dmy1`A){JM_ZIUd SqS0Gy{rMs_vQXqMPWvCP6XIt8