--- deliantra/server/include/dynbuf.h 2007/11/08 19:43:24 1.15 +++ deliantra/server/include/dynbuf.h 2009/01/01 19:42:43 1.21 @@ -1,7 +1,7 @@ /* * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team * Copyright (©) 1992,2007 Frank Tore Johansen * @@ -50,7 +50,7 @@ char *ptr, *end; int _size; - int extend; + int extend, cextend; chunk *first, *last; void reserve (int size); @@ -134,7 +134,7 @@ add (s, strlen (s)); } - void add (const shstr &s) + void add (shstr_tmp s) { add (s.s, s.length ()); } @@ -145,7 +145,7 @@ dynbuf &operator << (char c) { add (c); return *this; } dynbuf &operator << (unsigned char c) { return *this << char (c); } dynbuf &operator << (const char *s) { add (s); return *this; } - dynbuf &operator << (const shstr &s) { add (s); return *this; } + dynbuf &operator << (shstr_tmp s) { add (s); return *this; } dynbuf &operator << (const std::string &s) { add (s.data(), s.size ()); return *this; } operator std::string (); @@ -161,15 +161,19 @@ void add (sint32 i); void add (sint64 i); - //TODO: should optimise the case printf "(name %+d)" as it comes up extreemly often + //TODO: should optimise the case printf "(name %+d)" as it comes up extremely often - using dynbuf::operator <<; - dynbuf &operator << (sint16 i) { add (sint32 (i)); return *this; } - dynbuf &operator << (uint16 i) { add (sint32 (i)); return *this; } - dynbuf &operator << (sint32 i) { add (sint32 (i)); return *this; } - dynbuf &operator << (sint64 i) { add (sint64 (i)); return *this; } - dynbuf &operator << (uint32 i) { add (sint64 (i)); return *this; } - dynbuf &operator << (uint64 i) { add (sint64 (i)); return *this; } + //using dynbuf::operator <<; // doesn't work, sometimes C++ just suxx + // instead we use an ugly template function + template + dynbuf_text &operator << (T c) { *(dynbuf *)this << c; return *this; } + + dynbuf_text &operator << (sint16 i) { add (sint32 (i)); return *this; } + dynbuf_text &operator << (uint16 i) { add (sint32 (i)); return *this; } + dynbuf_text &operator << (sint32 i) { add (sint32 (i)); return *this; } + dynbuf_text &operator << (sint64 i) { add (sint64 (i)); return *this; } + dynbuf_text &operator << (uint32 i) { add (sint64 (i)); return *this; } + dynbuf_text &operator << (uint64 i) { add (sint64 (i)); return *this; } void printf (const char *format, ...); void vprintf (const char *format, va_list ap);