diff -r c84b6f2337dd -r aab0b14b96e3 src/core/alloc_func.hpp --- a/src/core/alloc_func.hpp Tue Jan 22 08:47:30 2008 +0000 +++ b/src/core/alloc_func.hpp Tue Jan 22 12:09:12 2008 +0000 @@ -81,4 +81,35 @@ return t_ptr; } +/** + * A small 'wrapper' for allocations that can be done on most OSes on the + * stack, but are just too large to fit in the stack on devices with a small + * stack such as the NDS. + * So when it is possible a stack allocation is made, otherwise a heap + * allocation is made and this is freed once the struct goes out of scope. + * @param T the type to make the allocation for + * @param length the amount of items to allocate + */ +template +struct SmallStackSafeStackAlloc { +#if !defined(__NDS__) + /** Storing the data on the stack */ + T data[length]; +#else + /** Storing it on the heap */ + T *data; + + /** Allocating the memory */ + SmallStackSafeStackAlloc() : data(MallocT(length)) {} + /** And freeing when it goes out of scope */ + ~SmallStackSafeStackAlloc() { free(data); } +#endif + + /** + * Gets a pointer to the data stored in this wrapper. + * @return the pointer. + */ + operator T* () { return data; } +}; + #endif /* ALLOC_FUNC_HPP */