/**
* @file src/mem.c
*/#include"mem.h"#include"bit.h"#include"chore.h"#include"exproriented.h"#include"testing.h"/**
* @brief Skip index to first non-white-space char
*/size_tskipByteDirectly(charconst*restrictstr, byte_t b,size_tlen){size_t i =0;for(; i < len && str[i]== b; i++);return i;}[[gnu::const]]staticsize_tskipByteSize(size_t s, byte_t c){returnstdc_trailing_zeros(s ^repeatBytes(c))/ p_size;}size_tskipByte(charconst*restrictstr, byte_t b){charconst*s =alignForward(str, p_size);size_t i =skipByteDirectly(str, b,-(size_t)str & p_size -1);if(str + i < s)return i;while(!isNulExist(*bit_cast(size_tconst*, s))){size_t skip =skipByteSize(*bit_cast(size_tconst*, s), b);
i += skip;if(skip < p_size)return i;
s += p_size;}return i +skipByteDirectly(s, b,-1UL);}test(skip){charconst*s =" a";for(size_t i =13;0< i; i--, s++)expecteq(i,skipByte(s,''));}/**
* @brief Skip pointer to the char following the comma
* @param[in,out] s String pointer
*/size_tskipUntil(charconst*restricts, byte_t b){charconst*str =strchr(s, b)?: p$return(strlen(s));return(size_t)(str - s +1);}char*memrchr(charconst*restricts,intc,size_tn){size_t i = n;for(;0< i && s[i]!= c; i--);return(char*)($if(i !=0) s + i $else $if(*s == c) s $else nullptr);}