Эффективный memcspn - PullRequest
       14

Эффективный memcspn

2 голосов
/ 30 августа 2010

Кто-нибудь знает об эффективной реализации функции memcspn ?? Он должен вести себя как strcspn, но искать диапазон в буфере памяти, а не в строке с нулевым окончанием Целевым компилятором является VisualC ++.

Спасибо, Лука

Ответы [ 2 ]

2 голосов
/ 30 августа 2010

Одна почти оптимальная реализация:

size_t memcspan(const unsigned char *buf, size_t len, const unsigned char *set, size_t n)
{
    size_t i;
    char set2[1<<CHAR_BIT] = {0};
    while (n--) set2[set[n]] = 1;
    for (i=0; i<len && !set2[buf[i]]; i++);
    return i;
}

Возможно, лучше использовать битовый массив вместо байтового массива для set2, в зависимости от того, чем больше арифметическое или немного больше кешадорого на твоей машине.

0 голосов
/ 30 августа 2010

Казалось бы, довольно сложно написать неэффективную реализацию этой функции, TBH - реализация кажется довольно простой, поэтому я бы предложил написать ее самостоятельно, если вы не можете найти реализацию в разумные сроки.

...