wmemchar for unix

H. S. Teoh hsteoh at quickfur.ath.cx
Tue Aug 27 07:41:41 PDT 2013


On Tue, Aug 27, 2013 at 07:37:02AM -0700, Sean Kelly wrote:
> On Aug 26, 2013, at 11:57 PM, monarch_dodra <monarchdodra at gmail.com> wrote:
> 
> > For performance reasons, I need a "w" version of memchr.
> > 
> > C defines wmemchr as:
> > wchar_t * wmemchr ( const wchar_t *, wchar_t, size_t );
> > 
> > Unfortunatly, on unix, "wchar_t" is defined a *4* bytes long,
> > making wmemchr, effectivelly, "dmemchr".
> > 
> > Are there any "2 byte" alternatives for wmemchr on unix?
> 
> Why not cast the array to ushort[] and do a find()?  Or is that too
> slow as well?

Optimized searches of this kind ideally translate to the various rep*
instructions on x86. I'm not sure if dmd does that optimization. If you
really feel inclined, you could do static if (X86) and throw in an asm
block (but that would break purity, @safety, etc., so probably not a
good idea).

You *might* be able to coax GDC (or LDC) to do loop unrolling and/or
substitution with rep* instructions with just plain D code, though.
Can't really say without trying it out.


T

-- 
They pretend to pay us, and we pretend to work. -- Russian saying


More information about the Digitalmars-d-learn mailing list