--- deliantra/server/include/dynbuf.h 2007/08/16 06:36:56 1.14 +++ deliantra/server/include/dynbuf.h 2008/09/15 00:16:19 1.20 @@ -1,11 +1,11 @@ /* - * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. + * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT 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 * - * Crossfire TRT is free software: you can redistribute it and/or modify + * Deliantra is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -18,7 +18,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . * - * The authors can be reached via e-mail to + * The authors can be reached via e-mail to */ #ifndef DYNBUF_H__ @@ -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);