--- deliantra/Deliantra-Client/Client.xs 2018/11/18 12:47:55 1.328 +++ deliantra/Deliantra-Client/Client.xs 2018/11/18 13:07:51 1.329 @@ -298,37 +298,34 @@ typedef mapgrid *DC__Map; -static char * -prepend (char *ptr, int sze, int inc) +template +static void +prepend (T *&ptr, int sze, int inc) { - char *p; + T *p; - New (0, p, sze + inc, char); - Zero (p, inc, char); - Move (ptr, p + inc, sze, char); + New (0, p, sze + inc, T); + Zero (p, inc, T); + Move (ptr, p + inc, sze, T); Safefree (ptr); - return p; + ptr = p; } -static char * -append (char *ptr, int sze, int inc) +template +static void +append (T *&ptr, int sze, int inc) { - Renew (ptr, sze + inc, char); - Zero (ptr + sze, inc, char); - - return ptr; + Renew (ptr, sze + inc, T); + Zero (ptr + sze, inc, T); } -#define Append(type,ptr,sze,inc) (ptr) = (type *)append ((char *)ptr, (sze) * sizeof (type), (inc) * sizeof (type)) -#define Prepend(type,ptr,sze,inc) (ptr) = (type *)prepend ((char *)ptr, (sze) * sizeof (type), (inc) * sizeof (type)) - static void need_facenum (struct mapgrid *self, faceid face) { while (self->faces <= face) { - Append (tileid, self->face2tile, self->faces, self->faces); + append (self->face2tile, self->faces, self->faces); self->faces *= 2; } } @@ -338,7 +335,7 @@ { while (self->texs <= texid) { - Append (maptex, self->tex, self->texs, self->texs); + append (self->tex, self->texs, self->texs); self->texs *= 2; } } @@ -349,7 +346,7 @@ if (0 > y) { int extend = - y + MAP_EXTEND_Y; - Prepend (maprow, self->row, self->rows, extend); + prepend (self->row, self->rows, extend); self->rows += extend; self->y += extend; @@ -358,7 +355,7 @@ else if (y >= self->rows) { int extend = y - self->rows + MAP_EXTEND_Y; - Append (maprow, self->row, self->rows, extend); + append (self->row, self->rows, extend); self->rows += extend; } @@ -378,13 +375,13 @@ if (row->c0 > x) { int extend = row->c0 - x + MAP_EXTEND_X; - Prepend (mapcell, row->col, row->c1 - row->c0, extend); + prepend (row->col, row->c1 - row->c0, extend); row->c0 -= extend; } else if (x >= row->c1) { int extend = x - row->c1 + MAP_EXTEND_X; - Append (mapcell, row->col, row->c1 - row->c0, extend); + append (row->col, row->c1 - row->c0, extend); row->c1 += extend; } @@ -2058,7 +2055,7 @@ while (self->y < 0) { - Prepend (maprow, self->row, self->rows, MAP_EXTEND_Y); + prepend (self->row, self->rows, MAP_EXTEND_Y); self->rows += MAP_EXTEND_Y; self->y += MAP_EXTEND_Y;