From d7f44e0dbe379fd2d9bda884c1346194f023a4b3 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Mon, 16 Mar 2020 20:16:28 -0300 Subject: [PATCH] Added logo to documentation backup and updated TODO --- TODO | 39 +++------------------------ documentation/source/images/logo.png | Bin 0 -> 22770 bytes 2 files changed, 4 insertions(+), 35 deletions(-) create mode 100644 documentation/source/images/logo.png diff --git a/TODO b/TODO index 5af7e66..3fd65c7 100644 --- a/TODO +++ b/TODO @@ -2,19 +2,16 @@ TODO [/] - In Progress [X] - Finished -[~] - Needs to be reviewed #!! High Priority ---------------------------------------------------------------------------------- [/] Tests [/] Documentation -[/] Add error codes that can be accessed from the collection's struct [/] Callback utility on_create, on_read, on_update, on_delete, on_resize #!! Medium Priority -------------------------------------------------------------------------------- -[ ] Add memory usage in the benchmark [ ] Add to_array and from_array functions [ ] Separate each collection unit test into their own executable @@ -27,43 +24,14 @@ TODO [ ] deserialize {all} [ ] Zip Iterators [ ] Consumer Iterators -[ ] Dev Collections - [ ] BidiMap - [~] Deque - [ ] HashMap - [ ] HashSet - [ ] Heap - [ ] IntervalHeap - [ ] LinkedList - [ ] List - [ ] MultiMap - [ ] MultiSet - [ ] Queue - [ ] SortedList - [ ] Stack - [ ] TreeMap - [ ] TreeSet -[ ] Statically Allocated Collections - [ ] BidiMap - [ ] Deque - [ ] HashMap - [ ] HashSet - [ ] Heap - [ ] IntervalHeap - [ ] LinkedList - [ ] List - [ ] MultiMap - [ ] MultiSet - [~] Queue - [ ] SortedList - [~] Stack - [ ] TreeMap - [ ] TreeSet +[ ] Add memory usage in the benchmark #!! Optimizations ---------------------------------------------------------------------------------- [ ] Use binary search to find optimum hashtable prime size inside impl_calculate_size [ ] Optimize certain loops that use iterators but can simply use a normal loop +[ ] Replace IntervalHeap node by a simple buffer of two pointers (V (*buffer)[2]) +[ ] Merge bidirectional map key_buffer and val_buffer to a single buffer and make key_dist and val_dist into dist[2] #!! Done ------------------------------------------------------------------------------------------- @@ -95,3 +63,4 @@ TODO [X] Fix cases where new_custom() should be used instead of just new() [X] Add Function Tables that contains data type functions (compare, copy, display, free, hash, priority) +[X] Add error codes that can be accessed from the collection's struct diff --git a/documentation/source/images/logo.png b/documentation/source/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c48d3ef50611e851f4084f2db52331d9a79f67 GIT binary patch literal 22770 zcmd43WmH^E*DZs#dL4YtC7TR8x_|$ECzYK|#R>%gd;vprF&C zprD>(V*)?vmH>MJUzlc!ax%a-@aIOlB@p<+`6#dFhJr%y`|&So3L60x@Ix$ju(B-H z8V)`o37M;|;R_TLIux*sq^8&W{*t$!p%&udp)P4kcbKe9 zC>n#5URf}nJx>y=R#pZ{6y2#-qLw7dGYeu#NmwIHHLPx#+2$$ww!|Erhe|M&7;6h#t! z%h4_2));rsu-@q8WwA^0%Ot6T7nG=1-LJGM*VsbBK^Ne587F^k1BR=O2dWEj=X1R( z8A(1(jRCv>t36_w7br~LupQ&(u;9)i&5LpeZ(}a|q&r>=F=eL-3%exy>%c;Z8b-(! z{)2PfePD&^rlRq!9^basx4@FA+^Y%K2Zr(Vx~=pUVhpIg+GVmy1#@lTy1@Xi^eM+i zCcW*%{L9Z*@blKioRo7_cy1ELh@y{5j&~296QmM(1Q5&s4b<1)o?8 zgUQ~+yCeul>P=V8Annxt!@OVuwnRBV+w!XWoNBQN+e& zm0|S8m|5=33Aqmm3EfXGOhZpgRgCspsL_T`0h9&*{KPoHwt5jsH-X3*Syqfkmq2T> z`sawC^u2RxU71o#f4wBSe`^4oHgW%fWES0Sy3G$26PM_Zc!+)CJTK89%gr$4fWa0E zoB<|AnF&Hes1%v7_TMk!ITEVmNY(m<4PGkjtm60YbL5P)_vvMxx@hh%8AQENy^yrx zj<{ZISeY=uiBECsG9tCLmYtV96#%DZYodM>Wu4$G92{vI{Uq=T&9+y1JN;T_R6|ha zuy%dk|3;O`mTr<^=CI4K_B#aKt$$Rr7I|N$+$;oDDTV8d6Go^|_MQ3Hw6sNUqy*Mi5bB!ISuUupm<@ zO!bnQ2oWL88U&*gdQr+Zm{1Hr>P$&58MN*(bvvS5DM~s$Q&^IKOstdfRW*2KC06WsO4WSRq;$`%V z&MgtcO~|~CA$Og5dp<4{{%d65oF13xX?(=8wB^_;TEdD8isb=-4HLfS$7CBmt^8 zk@IqQ3-=4C7F{IQKQu2T)%*3LYGS*g0M;OBLgen1hStTJVPAN-)hagcV4?$h{+7QZK}=_rS^udr=*35S@llbC0cf1#IC zELX}GYxqI?F}eK}48jO?OAM=I+o+yBSK4kGAtj2TAQD}DQ@V@Cy=3W4ShmFr`utn_LOk4VAUT&{hoI>*+6Bp z*p9AsB`Sqy-^ZBjt%}_9;LxqS8@rT+yDu`Y$Y~G;dewdf4F1Me2QpBxmJj2orSBW{ zOHTRra2n}B-%vWQtrFFb!nN5=-s~v;)ryEUD_t+%9y@g|*A$HW7<1!bQ)?DhMhCVd zP)#lgli=NcF-@IQy8DwF()QVg7yHVSbv#>}owLR*tsN2sWO#FCF;?HcGEWzr)_;6| zNFRE$g;QXe8)0dfJOQC<-!&qelmVsenha?@}XR}}ITV7{N1x1c|A#SBA zCI+@PkAZudIK!2*LMkIAzO#8oO1Unwn)HsJ>7{*KiiZvX!&96=aAE)5Z>`y$y_qn7 z;Sv*1c^~RA8?PZqT*_UWHZCFEOJHz)p=wV%7;0-He?#|fDnKg<@5(upkRO5*P~vC3 zs>W0bbNcB^wL4xFSADh6-{?W#1^S#?d^BER(thfkc21LzT0X6`N8ri$l<#X+l)rO= z!)t~yd4I|PmBif2Rp)M0Q%2=b)90X&oR8#Mi0Ay?XgzdQ#EeU-bas4_TJgjSANbzu zyiw1>?AJN_CKyy-q%Sr42PaQcP$dyoc#YE2hsbUnD|~-8ag&0-{x{&Hr;m?^j|lnY zFFFcFpM@%R_c4&B>VD@C{rvHipoZR<<9v@|vlz3F5AW_1QC6PPmPK-FIW|LgxE<*x zjvwOvth$zAsjDh?F6sF?VQ$dH?ofsz@6uw=R10dE{J6WS**l?3_@Cc}cwyI#%W z0SELZWBQxaF6Y+{eJ_<^s2F`vMeM?U7yQf2C31^^_(hro?r0!>|CxX2?=#%K*^lme zaNeCY^OC&A<-jq1J)xvmm(4Jgyi*?ogMZ@Q(FK#xRdcB4C*epLZDnShZtG{%3-rn9 zGfh;2I#hAV?DZ~Z#7q!tl;dYpoXU5-*HJ&(1^UVsSVkKlZ7PStF@k!iBy{p}QrP0` zGsS!N=H~;5G~8el`P;Cq+CbP%^LE{02MFPCBmNNUJOUBuk1!Uvk2|xO2}fMwK5#Ah z_*i>e-(7^7{n{#BTA$C9pR|3r2wh-4#bg${zdHRxj(cxBvK5fh_v~q43IE?{K4H#9 zZS;n=U>hvih61Hl%9p^~ZKbx~(9+kAOxr&H-giKT(acc-dRtVm|MfBmie((-UF|G4 zH|o1_8BiVVW`4RW2l^1CW(P`YirtyYdOT*jeYl^St zcmc$T=FP0HK=NHDgch`O5hJA*M90`Iw_%!*vb$fE25vS;Tv z^?`(Hh^07&gji~L|I~V6J>VrgXQk_Tw9r3=s+dRt1Q@-iEXAP-23O__B*)l zw@Cw-9+ZFXPveG%TfJw=;u{@}Gf#h~y%kEP8FyuWg-oABXtcU7X->qbBe4o~Nu6D!PUs~6P{gT`d-=P^S={#`0Zz#4l zojg6}?27S0yy3{#4_ zQfiHn_x+R04}v1p+9ca}#(f7uFQVg9@)Jjlcf%H)Ae&$$$*UjBLZi#hh5hbm)ytnn zA}J<~V1jC}HI0DuMtIiMiB!W|pwBaFUF*B}wo#YwO0>y4TQR0;L8gD7OR0L5LOr2Z zC>M%)Rq>uRkqZj&yo8o%JnEx_1zQMm@kdBq(G`lgQ3yYGYm=>LgiOgPKfK{fQ--xY zva>YSx1%M6wK8$kn{>CqT@O7&x$t+)T9^P%^S$u;@ChfUyDs3}nxB_BD#u8l(MVxo z$cHe79u^w(m5~>^rB39M)a|c@EedRxxP)@#wk+W_Emz|z(H)87g6g9E~i;QQ}wUvuWA)X_Gc}XHUC?IOH)^ zzchuJ_=??Of6n=K$eP-+p7SeW7~!ct(bC3qC+cHs zQ;UPfiKoqX7H0WJ$y>|J-}v*4H8EYKlM4|fVOT5Pl0QSmzHA_Rs~t2x?R)Q zwMP7(!Vh?tzf+vO$aH>yaZmYsJ908h9Iu3q8VPDR85C^=oy#dtbc!`zIG?Ly)~c4lYp&=_apx|F89d#bEya^duP&V?ltal0-w-%=wm zA})LW*{lGn{VUys}^+m2?@Cw?lgOnVAjM7S%(ZjJg~ zx@J(b3z~2Tqgk8|Ke^3^Dk%_bved6zjj`Zx!m>OP26O2s?MoL!%IwFY%KNFRr%AqH zY*a8FJToWO;uA0eLtlTZ^!XJJo@Zi=Ach~vaMp>+jDWO5MgE4xwSksYcqLG|=blTI zxCR?86s~_XPR@)!=b4fl0ez(y?iby?iSyt1L_MZkG2d!Dj=+{`!^}vhofcR+w5}Ib z{5HcAL(aZrm?)N!10Gg6gRze=K=asen>02)g)1q3!2~8nT8jD7k^PECgB#7U|` z$=kT>28dJ}hp}v|S=dEZ`W^^4h`dAnhdo@b$fm2)zHJoA=ffD*RK#W_zwV;RVZ`5i4v#uQzB$$gNOjL-KL|Osx%y9>3DQWE zMf`qSd4YrAYpfg$kmh}_Im$PmJ}NF%uJgr*OGNFY-RFvhbNvuBzBi}ZMVQkef)R0A zNAB7>-E4fSOn-#~CMUvC3*uFmq6n}KpyYq&JJ{lyTO_y3%wm`?Ibuziw&N?aRw#3W z4zBl-_by8Lwe;m$F)^3gZT|0&4l%t#H`{WAMUR{2g+OBfcwDYKfF8(N$;(v}8Xrjz zr)1Bi+L*%q4xcu?0X^qTxu|c(b!Dgyu;pnH=%v^ej0m;_z}r~SgQu9wry zA$6!Z>JA#A3r2$;5=-3}DRfQ6)4l6$(SJ~gpL8+X?l*$crL)1okhuZS#mt|l%QM49 zw+c)(%!g7ju~@G+2j2#hI>MYM^%?rOIUu~o&-0*vn8B) zC14pdx1pE^{tgLvxCuT=*rFSrias8{B2G9t*HsDyD4Ds|7mgCS<@((dmB>qEM^yVI zWQKG~`E^39=DybL7bgUvitDR0^^moX0FO_+(D>M5x{i^n6*46CA4-x zjbV;+09dn%UpbTx9}grfeDmV>NWm-0w_GIiG|A_GpmCBjlf~ul+|$;NqMAyq9A5;; z^!wYoV(QCv-`)+i558#2q2DJEr>`}v!OAnaZH;T$j>Qy4SeLMFykU4w!3GNgWfMiM zA{CIky|0$1T&UYV_YB4HEeQNghc{JKykxKqp%6Z96e$;ZM!f-Ex#Wd@7gUu4AZT!a zWpc29ilxvF7Vo*D@e-FXiuCL(2~@se3fMFBZS*fHKxBqr

%=y)n}jKT?y(86 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 aP$Aj)Pco0RzEKpW66~_mFU1$H-~KnkT|0FE literal 0 HcmV?d00001