source: trunk/lib_c/stl_aligned_allocator.h @ 4046

Last change on this file since 4046 was 3391, checked in by linmengl, 6 years ago

check in IDISA C library and other support libraries. Some template features still remain.

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