-
Notifications
You must be signed in to change notification settings - Fork 0
/
temporary_buffer.h
83 lines (68 loc) · 1.59 KB
/
temporary_buffer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/* THOR - THOR Template Library
* Joshua M. Kriegshauser
*
* temporary_buffer.h
*
* ** THOR INTERNAL FILE - NOT FOR APPLICATION USE **
*
* This file defines an internally-used temporary buffer (a sort of simplified vector).
*/
#ifndef THOR_TEMPORARY_BUFFER_H
#define THOR_TEMPORARY_BUFFER_H
#pragma once
#ifndef THOR_BASETYPES_H
#include "basetypes.h"
#endif
#ifndef THOR_ITERATOR_H
#include "iterator.h"
#endif
#ifndef THOR_MEMORY_H
#include "memory.h"
#endif
#ifndef THOR_TYPETRAITS_H
#include "typetraits.h"
#endif
namespace thor
{
template <class ForwardIterator, class T> class __TemporaryBuffer
{
public:
__TemporaryBuffer(ForwardIterator first, ForwardIterator last)
{
m_size = thor::distance(first, last);
m_requested_size = m_size;
m_elements = memory::align_alloc<T>::alloc(m_size);
typetraits<T>::range_construct(m_elements, m_elements + m_size);
}
~__TemporaryBuffer()
{
typetraits<T>::range_destruct(m_elements, m_elements + m_size);
memory::align_alloc<T>::free(m_elements);
m_elements = 0;
}
T* begin()
{
return m_elements;
}
T* end()
{
return m_elements + m_size;
}
difference_type size() const
{
return m_size;
}
difference_type requested_size() const
{
return m_requested_size;
}
private:
T* m_elements;
difference_type m_size;
difference_type m_requested_size;
// Prevent copy/assign
__TemporaryBuffer(const __TemporaryBuffer&);
__TemporaryBuffer& operator = (const __TemporaryBuffer&);
};
}
#endif