summaryrefslogtreecommitdiff
path: root/src/list.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/list.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/list.h b/src/list.h
index 388df7c..839494d 100644
--- a/src/list.h
+++ b/src/list.h
@@ -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