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
84
85
86
87
88
89
90
|
// $Id$
#ifndef ACE_FREE_LIST_C
#define ACE_FREE_LIST_C
#include "ace/Free_List.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#if !defined (__ACE_INLINE__)
#include "ace/Free_List.i"
#endif /* __ACE_INLINE__ */
ACE_RCSID(ace, Free_List, "$Id$")
// Empty constructor
template <class T>
ACE_Free_List<T>::~ACE_Free_List (void)
{
// Nothing
}
// Default constructor that takes in a preallocation number
// (<prealloc>), a low and high water mark (<lwm> and <hwm>) and an
// increment value (<inc>)
template <class T, class ACE_LOCK>
ACE_Locked_Free_List<T, ACE_LOCK>::ACE_Locked_Free_List (int mode,
size_t prealloc,
size_t lwm,
size_t hwm,
size_t inc)
: mode_ (mode),
free_list_ (0),
lwm_ (lwm),
hwm_ (hwm),
inc_ (inc),
size_ (0)
{
this->alloc (prealloc);
}
// Destructor - removes all the elements from the free_list
template <class T, class ACE_LOCK>
ACE_Locked_Free_List<T, ACE_LOCK>::~ACE_Locked_Free_List (void)
{
if (this->mode_ != ACE_PURE_FREE_LIST)
while (this->free_list_ != 0)
{
T *temp = this->free_list_;
this->free_list_ = this->free_list_->get_next ();
delete temp;
}
}
// Allocates <n> extra nodes for the freelist
template <class T, class ACE_LOCK> void
ACE_Locked_Free_List<T, ACE_LOCK>::alloc (size_t n)
{
for (; n > 0; n--)
{
T *temp = 0;
ACE_NEW (temp, T);
temp->set_next (this->free_list_);
this->free_list_ = temp;
this->size_++;
}
}
// Removes and frees <n> nodes from the freelist.
template <class T, class ACE_LOCK> void
ACE_Locked_Free_List<T, ACE_LOCK>::dealloc (size_t n)
{
for (; this->free_list_ != 0 && n > 0;
n--)
{
T *temp = this->free_list_;
this->free_list_ = this->free_list_->get_next ();
delete temp;
this->size_--;
}
}
#endif /* ACE_FREE_LIST_C */
|