source: trunk/lib/stl_aligned_allocator.hpp @ 4063

Last change on this file since 4063 was 2616, checked in by ksherdy, 6 years ago

Added sizeof(BitBlock?) aligned STL allocator and memory alignment allocation/deallocation template methods.

File size: 1.6 KB
Line 
1#ifndef STL_ALIGNED_ALLOCATOR_HPP_
2#define STL_ALIGNED_ALLOCATOR_HPP_
3
4/*=============================================================================
5  stl_aligned_allocator.hpp
6  Created on: 06-November-2012
7  Author: Ken Herdy
8=============================================================================*/
9
10#include <cstddef>
11#include "bitblock.hpp"
12#include "mmalloc.hpp"
13
14template <typename T, size_t N=sizeof(BitBlock)>
15class AAllocator
16{
17public:
18
19        typedef T       value_type;
20        typedef size_t size_type;
21        typedef ptrdiff_t difference_type;
22        typedef T* pointer;
23        typedef const T* const_pointer;
24        typedef T& reference;
25        typedef const T& const_reference;
26
27        inline AAllocator() throw(){}
28
29        template <typename T2> inline  AAllocator(const AAllocator<T2, N> &) throw(){}
30        inline ~AAllocator() throw(){} 
31
32        inline pointer adress(reference r)
33        { 
34                return &r; 
35        }
36
37        inline const_pointer adress(const_reference r) const
38        { 
39                return &r; 
40        }
41
42        inline pointer allocate(size_type n)
43        { 
44                return simd_malloc<T>(n*sizeof(value_type));
45
46                //return (pointer)_mm_malloc(n*sizeof(value_type), N);
47        }
48
49        inline void deallocate(pointer p, size_type)
50        { 
51                return simd_free<T>(p); 
52                //_mm_free(p);
53        }
54
55        inline void construct(pointer p, const value_type & wert)       
56        { 
57                new(p) value_type(wert); 
58        }
59
60        inline void destroy(pointer p)
61        { 
62                p; 
63                p->~value_type(); // C4100 warning
64        }
65
66        inline size_type max_size() const throw()
67        { 
68                return (size_type(-1) / sizeof(value_type)); 
69        }
70
71        template <typename T2> struct rebind
72        { 
73                typedef AAllocator<T2, N> other; 
74        };
75
76};
77
78#endif // STL_ALIGNED_ALLOCATOR_HPP_
Note: See TracBrowser for help on using the repository browser.