▁size _ t ▁pat len ) ▁{ ▁▁▁▁ ▁s size _ t ▁p ; ▁▁▁▁ ▁size _ t ▁last _ prefix _ index ▁= ▁pat len - 1 ; ▁▁▁▁▁ ▁// ▁first ▁loop ▁▁▁▁ ▁for ▁( p = pat len - 1 ; ▁p >= 0 ; ▁p -- ) ▁{ ▁▁▁▁▁▁▁▁ ▁if ▁( is _ prefix ( pat , ▁pat len , ▁p + 1 )) ▁{ ▁▁▁▁▁▁▁▁▁▁▁▁ ▁last _ prefix _ index ▁= ▁p + 1 ; ▁▁▁▁▁▁▁▁ ▁} ▁▁▁▁▁▁▁▁ ▁delta 2 [ p ] ▁= ▁last _ prefix _ index ▁+ ▁( pat len - 1 ▁- ▁p ); ▁▁▁▁ ▁} ▁▁▁▁▁ ▁// ▁second ▁loop ▁▁▁▁ ▁for ▁( p = 0 ; ▁p ▁< ▁pat len - 1 ; ▁p ++) ▁{ ▁▁▁▁▁▁▁▁ ▁size _ t ▁sl en ▁= ▁suffix _ length ( pat , ▁pat len , ▁p ); ▁▁▁▁▁▁▁▁ ▁if ▁( pat [ p ▁- ▁sl en ] ▁!= ▁pat [ pat len - 1 ▁- ▁sl en ]) ▁{ ▁▁▁▁▁▁▁▁▁▁▁▁ ▁delta 2 [ pat len - 1 ▁- ▁sl en ] ▁= ▁pat len - 1 ▁- ▁p ▁+ ▁sl en ; ▁▁▁▁▁▁▁▁ ▁} ▁▁▁▁ ▁} ▁} ▁ ▁// ▁Returns ▁pointer ▁to ▁first ▁match . ▁// ▁See ▁also ▁g lib c ▁mem mem () ▁( non - B M ) ▁and ▁std :: bo yer _ mo ore _ search er ▁( first - match ). ▁uint 8 _ t * ▁bo yer _ mo ore ▁( uint 8 _ t ▁* string , ▁size _ t