<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><div class="">I recently posted a question on StackOverflow regarding the performance of std::find and std::count when provided with char* input: <a href="http://stackoverflow.com/questions/43483378/why-arent-stdcount-and-stdfind-optimised-to-use-memchr" class="">http://stackoverflow.com/questions/43483378/why-arent-stdcount-and-stdfind-optimised-to-use-memchr</a>.</div><div class=""><br class=""></div><div class="">I would propose adding overloads of these functions for char* and const char* inputs that delegate to memchr, something like:</div><div class=""><br class=""></div><div class=""><div class="">inline const char* find(const char* first, const char* const last, const char value)</div><div class="">{</div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>const auto result = std::memchr(first, value, last - first);</div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>return result != nullptr ? static_cast<const char*>(result) : last;</div><div class="">}</div></div><div class=""><br class=""></div><div class=""><div class="">inline typename std::iterator_traits<const char*>::difference_type</div><div class="">count(const char* first, const char* const last, const char value)</div><div class="">{</div><div class=""><span class="Apple-tab-span" style="white-space:pre">    </span>typename std::iterator_traits<const char*>::difference_type result {0};</div><div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>while (first && first != last) {</div><div class=""><span class="Apple-tab-span" style="white-space:pre">          </span>if ((first = static_cast<const char*>(std::memchr(first, value, last - first)))) {</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                  </span>++result;</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                 </span>++first;</div><div class=""><span class="Apple-tab-span" style="white-space:pre">          </span>}</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>return result;</div><div class="">}</div></div><div class=""><br class=""></div><div class="">I’ve never contributed to LLVM, so I’m not sure how to proceed, if this is a change that is likely to be accepted?</div><div class=""><br class=""></div><div class="">Best,</div><div class="">Dan</div><div class=""><br class=""></div></body></html>