--- deliantra/server/include/network.h 2017/01/29 02:47:05 1.35 +++ deliantra/server/include/network.h 2018/11/17 23:33:18 1.37 @@ -1,6 +1,7 @@ /* * This file is part of Deliantra, the Roguelike Realtime MMORPG. * + * Copyright (©) 2018 Marc Alexander Lehmann / the Deliantra team * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2002 Mark Wedel & Crossfire Development Team * Copyright (©) 1992 Frank Tore Johansen @@ -185,38 +186,21 @@ //-GPL -struct data +template +struct databuf { unsigned int len; const void *ptr; - data (const void *ptr, int len) : len (len), ptr (ptr) { } - data (const char *str) : len (strlen (str ? str : 0)), ptr ((void *)str) { } - data (shstr_tmp sh) : len (sh.length ()), ptr ((void *)&sh) { } - data (dynbuf &buf) : len (buf.size ()), ptr (buf.linearise ()) { } + databuf (const void *ptr, int len) : len (len), ptr (ptr) { } + databuf (const char *str) : len (strlen (str ? str : 0)), ptr ((void *)str) { } + databuf (shstr_tmp sh) : len (sh.length ()), ptr ((void *)&sh) { } + databuf (dynbuf &buf) : len (buf.size ()), ptr (buf.linearise ()) { } }; -struct data8 -{ - unsigned int len; - const void *ptr; - - data8 (const void *ptr, int len) : len (len), ptr (ptr) { } - data8 (const char *str) : len (strlen (str ? str : 0)), ptr ((void *)str) { } - data8 (shstr_tmp sh) : len (sh.length ()), ptr ((void *)&sh) { } - data8 (dynbuf &buf) : len (buf.size ()), ptr (buf.linearise ()) { } -}; - -struct data16 -{ - unsigned int len; - const void *ptr; - - data16 (const void *ptr, int len) : len (len), ptr (ptr) { } - data16 (const char *str) : len (strlen (str ? str : 0)), ptr ((void *)str) { } - data16 (shstr_tmp sh) : len (sh.length ()), ptr ((void *)&sh) { } - data16 (dynbuf &buf) : len (buf.size ()), ptr (buf.linearise ()) { } -}; +using data_n = databuf<0>; +using data8 = databuf<1>; +using data16 = databuf<2>; struct ber32 { @@ -278,17 +262,17 @@ // checked packet &operator <<(const ber32 v); - packet &operator <<(const data &v); + packet &operator <<(const data_n &v); packet &operator <<(const data8 &v); packet &operator <<(const data16 &v); packet &operator <<(const char *v); - packet &operator <<(shstr_tmp sh) { return *this << data (sh); } - packet &operator <<(const std::string &s) { return *this << data (s.data (), s.size ()); } + packet &operator <<(shstr_tmp sh) { return *this << data_n (sh); } + packet &operator <<(const std::string &s) { return *this << data_n (s.data (), s.size ()); } void vprintf (const char *format, va_list ap); - void printf (const char *format, ...) attribute ((format (printf, 2, 3))) + void printf (const char *format, ...) ecb_attribute ((format (printf, 2, 3))) { va_list ap; va_start (ap, format);