Mercurial > projects > ldc
view dmd2/lstring.c @ 1079:4e388d9d0e25
Intrinsics overhaul:
- More error checking for pragma(intrinsic)
- Properly handle templating for real (use actual nr of bits, not .sizeof * 8)
- Template all .i* and .f* intrinsics
- The old names are deprecated aliases now
I also added a preliminary patch to make tango.math.Math use the new versions.
(I think it looks a lot nicer now)
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Tue, 10 Mar 2009 04:45:32 +0100 |
parents | 356e65836fb5 |
children |
line wrap: on
line source
// lstring.c // Copyright (c) 1999-2002 by Digital Mars // All Rights Reserved // written by Walter Bright // www.digitalmars.com // License for redistribution is by either the Artistic License // in artistic.txt, or the GNU General Public License in gnu.txt. // See the included readme.txt for details. #include <stdlib.h> #include "dchar.h" #include "mem.h" #include "lstring.h" #ifdef _MSC_VER // prevent compiler internal crash Lstring Lstring::zero; #else Lstring Lstring::zero = LSTRING_EMPTY(); #endif Lstring *Lstring::ctor(const dchar *p, unsigned length) { Lstring *s; s = alloc(length); memcpy(s->string, p, length * sizeof(dchar)); return s; } Lstring *Lstring::alloc(unsigned length) { Lstring *s; s = (Lstring *)mem.malloc(size(length)); s->length = length; s->string[length] = 0; return s; } Lstring *Lstring::append(const Lstring *s) { Lstring *t; if (!s->length) return this; t = alloc(length + s->length); memcpy(t->string, string, length * sizeof(dchar)); memcpy(t->string + length, s->string, s->length * sizeof(dchar)); return t; } Lstring *Lstring::substring(int start, int end) { Lstring *t; if (start == end) return &zero; t = alloc(end - start); memcpy(t->string, string + start, (end - start) * sizeof(dchar)); return t; }