#ifndef __SHM_ALLOCATOR_H__ #define __SHM_ALLOCATOR_H__ #include "usg_common.h" #include "mm.h" #include #include // for exit() #include // for UNIX_MAX #include template class SHMAllocator { public: typedef T value_type; typedef T* pointer; typedef const T* const_pointer; typedef T& reference; typedef const T& const_reference; typedef size_t size_type; typedef ptrdiff_t difference_type; SHMAllocator() {}; ~SHMAllocator() {}; template SHMAllocator(const SHMAllocator& t) { }; template struct rebind { typedef SHMAllocator other; }; pointer allocate(size_type n, const void* hint=0) { // fprintf(stderr, "allocate n=%u, hint= %p\n",n, hint); return((T*) (mm_malloc(n * sizeof(T)))); } void deallocate(pointer p, size_type n) { // fprintf(stderr, "dealocate n=%u" ,n); mm_free((void*)p); } void construct(pointer p, const T& value) { ::new(p) T(value); } void construct(pointer p) { ::new(p) T(); } void destroy(pointer p) { p->~T(); } pointer address(reference x) { return (pointer)&x; } const_pointer address(const_reference x) { return (const_pointer)&x; } size_type max_size() const { return size_type(UINT_MAX/sizeof(T)); } }; // template, // class Allocator = allocator > typedef std::basic_string, SHMAllocator > shmstring; #endif