00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef itk_alloc_h
00018 #define itk_alloc_h
00019
00020
00021 template<class T, class Alloc>
00022 class itk_simple_alloc {
00023 typedef Alloc alloc_type;
00024 public:
00025 typedef typename Alloc::value_type alloc_value_type;
00026 typedef T value_type;
00027
00028 #if !__STL_EAGER_TYPECHECK
00029 enum {
00030 chunk = sizeof(value_type)/sizeof(alloc_value_type)+(sizeof(value_type)%sizeof(alloc_value_type)>0)
00031 };
00032 #else
00033
00034 #define chunk (sizeof(value_type)/sizeof(alloc_value_type)+(sizeof(value_type)%sizeof(alloc_value_type)>0))
00035 #endif
00036
00037 static value_type *allocate(size_t n)
00038 { return 0 == n? 0 : (value_type*) alloc_type().allocate(n * chunk, 0); }
00039 static value_type *allocate(void)
00040 { return (value_type*) alloc_type().allocate(chunk, 0); }
00041 static void deallocate(value_type *p, size_t n)
00042 { if (0 != n) alloc_type().deallocate(p, n * chunk); }
00043 static void deallocate(value_type *p)
00044 { alloc_type().deallocate((char*)p, chunk); }
00045
00046 #undef chunk
00047 };
00048 #endif