--- deliantra/server/include/dynbuf.h 2007/11/08 19:43:24 1.15 +++ deliantra/server/include/dynbuf.h 2008/09/15 00:16:19 1.20 @@ -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); @@ -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);