diff options
Diffstat (limited to 'src/list.h')
-rw-r--r-- | src/list.h | 49 |
1 files changed, 49 insertions, 0 deletions
@@ -142,6 +142,55 @@ namespace Bu | |||
142 | } | 142 | } |
143 | 143 | ||
144 | /** | 144 | /** |
145 | * Insert a new item in sort order by searching for the first item that | ||
146 | * is larger and inserting this before it, or at the end if none are | ||
147 | * larger. If this is the only function used to insert data in the | ||
148 | * List all items will be sorted. To use this, the value type must | ||
149 | * support the > operator. | ||
150 | */ | ||
151 | void insertSorted( const value &v ) | ||
152 | { | ||
153 | Link *pNew = la.allocate( 1 ); | ||
154 | pNew->pValue = va.allocate( 1 ); | ||
155 | va.construct( pNew->pValue, v ); | ||
156 | nSize++; | ||
157 | if( pFirst == NULL ) | ||
158 | { | ||
159 | // Empty list | ||
160 | pFirst = pLast = pNew; | ||
161 | pNew->pNext = pNew->pPrev = NULL; | ||
162 | return; | ||
163 | } | ||
164 | else | ||
165 | { | ||
166 | Link *pCur = pFirst; | ||
167 | for(;;) | ||
168 | { | ||
169 | if( !(v > *(pCur->pValue)) ) | ||
170 | { | ||
171 | pNew->pNext = pCur; | ||
172 | pNew->pPrev = pCur->pPrev; | ||
173 | pCur->pPrev = pNew; | ||
174 | if( pNew->pPrev == NULL ) | ||
175 | pFirst = pNew; | ||
176 | else | ||
177 | pNew->pPrev->pNext = pNew; | ||
178 | return; | ||
179 | } | ||
180 | pCur = pCur->pNext; | ||
181 | if( pCur == NULL ) | ||
182 | { | ||
183 | pNew->pNext = NULL; | ||
184 | pNew->pPrev = pLast; | ||
185 | pLast->pNext = pNew; | ||
186 | pLast = pNew; | ||
187 | return; | ||
188 | } | ||
189 | } | ||
190 | } | ||
191 | } | ||
192 | |||
193 | /** | ||
145 | * An iterator to iterate through your list. | 194 | * An iterator to iterate through your list. |
146 | */ | 195 | */ |
147 | typedef struct iterator | 196 | typedef struct iterator |