Mercurial > projects > ldc
view dmd/root/lstring.h @ 1628:6c36e3f49b28
Merge DMD r324: bugzilla 3663 and 3664 - fwd ref regressions
---
dmd/class.c | 2 +-
dmd/enum.c | 4 +++-
dmd/enum.h | 2 ++
dmd/mars.c | 2 +-
dmd/struct.c | 5 ++++-
5 files changed, 11 insertions(+), 4 deletions(-)
author | Leandro Lucarella <llucax@gmail.com> |
---|---|
date | Wed, 06 Jan 2010 15:18:23 -0300 |
parents | 1853dcd9b944 |
children |
line wrap: on
line source
// lstring.h // length-prefixed strings // 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. #ifndef LSTRING_H #define LSTRING_H 1 #include "dchar.h" struct Lstring { unsigned length; // Disable warning about nonstandard extension #pragma warning (disable : 4200) dchar string[]; static Lstring zero; // 0 length string // No constructors because we want to be able to statically // initialize Lstring's, and Lstrings are of variable size. #if M_UNICODE #define LSTRING(p,length) { length, L##p } #else #define LSTRING(p,length) { length, p } #endif #if __GNUC__ #define LSTRING_EMPTY() { 0 } #else #define LSTRING_EMPTY() LSTRING("", 0) #endif static Lstring *ctor(const dchar *p) { return ctor(p, Dchar::len(p)); } static Lstring *ctor(const dchar *p, unsigned length); static unsigned size(unsigned length) { return sizeof(Lstring) + (length + 1) * sizeof(dchar); } static Lstring *alloc(unsigned length); Lstring *clone(); unsigned len() { return length; } dchar *toDchars() { return string; } hash_t hash() { return Dchar::calcHash(string, length); } hash_t ihash() { return Dchar::icalcHash(string, length); } static int cmp(const Lstring *s1, const Lstring *s2) { int c = s2->length - s1->length; return c ? c : Dchar::memcmp(s1->string, s2->string, s1->length); } static int icmp(const Lstring *s1, const Lstring *s2) { int c = s2->length - s1->length; return c ? c : Dchar::memicmp(s1->string, s2->string, s1->length); } Lstring *append(const Lstring *s); Lstring *substring(int start, int end); }; #endif