1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
// This file is part of The New Aspell
// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
// version 2.0 or 2.1. You should have received a copy of the LGPL
// license along with this library if you did not you can find
// it at http://www.gnu.org/.
#ifndef ASPELL_VARARRAY__HPP
#define ASPELL_VARARRAY__HPP
#ifndef __GNUC__
# include <stdlib.h>
#endif
namespace acommon {
// only use this on types with a trivial constructors destructor
#ifdef __GNUC__ // use variable arrays
#define VARARRAY(type, name, num) type name[num]
#define VARARRAYM(type, name, num, max) type name[num]
#else // use malloc
struct MallocPtr {
void * ptr;
MallocPtr() : ptr(0) {};
~MallocPtr() {if (ptr) free(ptr);}
};
#define VARARRAY(type, name, num) \
acommon::MallocPtr name##_data; \
name##_data.ptr = malloc(sizeof(type) * (num)); \
type * name = (type *)name##_data.ptr
#define VARARRAYM(type, name, num, max) type name[max]
#endif
#if 0 // this version uses alloca
#define VARARRAY(type, name, num) \
type * name = (type *)alloca(sizeof(type) * (num))
#define VARARRAYM(type, name, num, max) \
type * name = (type *)alloca(sizeof(type) * (num))
#endif
}
#endif
|