diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/heap.h | 36 | ||||
-rw-r--r-- | src/list.h | 14 | ||||
-rw-r--r-- | src/set.h | 1 | ||||
-rw-r--r-- | src/util.h | 40 |
4 files changed, 50 insertions, 41 deletions
@@ -19,42 +19,6 @@ namespace Bu | |||
19 | { | 19 | { |
20 | subExceptionDecl( HeapException ); | 20 | subExceptionDecl( HeapException ); |
21 | 21 | ||
22 | template<typename item> | ||
23 | struct __basicLTCmp | ||
24 | { | ||
25 | bool operator()( const item &a, const item &b ) | ||
26 | { | ||
27 | return a < b; | ||
28 | } | ||
29 | }; | ||
30 | |||
31 | template<typename item> | ||
32 | struct __basicGTCmp | ||
33 | { | ||
34 | bool operator()( const item &a, const item &b ) | ||
35 | { | ||
36 | return a > b; | ||
37 | } | ||
38 | }; | ||
39 | |||
40 | template<typename item> | ||
41 | struct __basicPtrLTCmp | ||
42 | { | ||
43 | bool operator()( const item &a, const item &b ) | ||
44 | { | ||
45 | return *a < *b; | ||
46 | } | ||
47 | }; | ||
48 | |||
49 | template<typename item> | ||
50 | struct __basicPtrGTCmp | ||
51 | { | ||
52 | bool operator()( const item &a, const item &b ) | ||
53 | { | ||
54 | return *a > *b; | ||
55 | } | ||
56 | }; | ||
57 | |||
58 | template<typename item, typename cmpfunc=__basicLTCmp<item>, typename itemalloc=std::allocator<item> > | 22 | template<typename item, typename cmpfunc=__basicLTCmp<item>, typename itemalloc=std::allocator<item> > |
59 | class Heap | 23 | class Heap |
60 | { | 24 | { |
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | #include <memory> | 11 | #include <memory> |
12 | #include "bu/exceptionbase.h" | 12 | #include "bu/exceptionbase.h" |
13 | #include "bu/util.h" | ||
13 | 14 | ||
14 | namespace Bu | 15 | namespace Bu |
15 | { | 16 | { |
@@ -34,12 +35,14 @@ namespace Bu | |||
34 | *@param linkalloc (typename) Memory Allocator for the list links. | 35 | *@param linkalloc (typename) Memory Allocator for the list links. |
35 | *@ingroup Containers | 36 | *@ingroup Containers |
36 | */ | 37 | */ |
37 | template<typename value, typename valuealloc=std::allocator<value>, typename linkalloc=std::allocator<struct ListLink<value> > > | 38 | template<typename value, typename cmpfunc=__basicGTCmp<value>, |
39 | typename valuealloc=std::allocator<value>, | ||
40 | typename linkalloc=std::allocator<struct ListLink<value> > > | ||
38 | class List | 41 | class List |
39 | { | 42 | { |
40 | private: | 43 | private: |
41 | typedef struct ListLink<value> Link; | 44 | typedef struct ListLink<value> Link; |
42 | typedef class List<value, valuealloc, linkalloc> MyType; | 45 | typedef class List<value, cmpfunc, valuealloc, linkalloc> MyType; |
43 | 46 | ||
44 | public: | 47 | public: |
45 | List() : | 48 | List() : |
@@ -189,7 +192,7 @@ namespace Bu | |||
189 | Link *pCur = pFirst; | 192 | Link *pCur = pFirst; |
190 | for(;;) | 193 | for(;;) |
191 | { | 194 | { |
192 | if( !(v > *(pCur->pValue)) ) | 195 | if( !cmp( v, *(pCur->pValue)) ) |
193 | { | 196 | { |
194 | pNew->pNext = pCur; | 197 | pNew->pNext = pCur; |
195 | pNew->pPrev = pCur->pPrev; | 198 | pNew->pPrev = pCur->pPrev; |
@@ -218,7 +221,7 @@ namespace Bu | |||
218 | */ | 221 | */ |
219 | typedef struct iterator | 222 | typedef struct iterator |
220 | { | 223 | { |
221 | friend class List<value, valuealloc, linkalloc>; | 224 | friend class List<value, cmpfunc, valuealloc, linkalloc>; |
222 | private: | 225 | private: |
223 | Link *pLink; | 226 | Link *pLink; |
224 | MyType &rList; | 227 | MyType &rList; |
@@ -357,7 +360,7 @@ namespace Bu | |||
357 | */ | 360 | */ |
358 | typedef struct const_iterator | 361 | typedef struct const_iterator |
359 | { | 362 | { |
360 | friend class List<value, valuealloc, linkalloc>; | 363 | friend class List<value, cmpfunc, valuealloc, linkalloc>; |
361 | private: | 364 | private: |
362 | Link *pLink; | 365 | Link *pLink; |
363 | const MyType &rList; | 366 | const MyType &rList; |
@@ -584,6 +587,7 @@ namespace Bu | |||
584 | linkalloc la; | 587 | linkalloc la; |
585 | valuealloc va; | 588 | valuealloc va; |
586 | int nSize; | 589 | int nSize; |
590 | cmpfunc cmp; | ||
587 | }; | 591 | }; |
588 | } | 592 | } |
589 | 593 | ||
@@ -251,6 +251,7 @@ namespace Bu | |||
251 | if( isFilled( j ) ) | 251 | if( isFilled( j ) ) |
252 | if( !isDeleted( j ) ) | 252 | if( !isDeleted( j ) ) |
253 | { | 253 | { |
254 | _erase( j ); | ||
254 | onDelete(); | 255 | onDelete(); |
255 | } | 256 | } |
256 | } | 257 | } |
@@ -35,6 +35,46 @@ namespace Bu | |||
35 | { | 35 | { |
36 | return min( max( a, b ), c ); | 36 | return min( max( a, b ), c ); |
37 | } | 37 | } |
38 | |||
39 | // | ||
40 | // Basic comparison functors | ||
41 | // | ||
42 | template<typename item> | ||
43 | struct __basicLTCmp | ||
44 | { | ||
45 | bool operator()( const item &a, const item &b ) | ||
46 | { | ||
47 | return a < b; | ||
48 | } | ||
49 | }; | ||
50 | |||
51 | template<typename item> | ||
52 | struct __basicGTCmp | ||
53 | { | ||
54 | bool operator()( const item &a, const item &b ) | ||
55 | { | ||
56 | return a > b; | ||
57 | } | ||
58 | }; | ||
59 | |||
60 | template<typename item> | ||
61 | struct __basicPtrLTCmp | ||
62 | { | ||
63 | bool operator()( const item &a, const item &b ) | ||
64 | { | ||
65 | return *a < *b; | ||
66 | } | ||
67 | }; | ||
68 | |||
69 | template<typename item> | ||
70 | struct __basicPtrGTCmp | ||
71 | { | ||
72 | bool operator()( const item &a, const item &b ) | ||
73 | { | ||
74 | return *a > *b; | ||
75 | } | ||
76 | }; | ||
77 | |||
38 | }; | 78 | }; |
39 | 79 | ||
40 | #endif | 80 | #endif |