]> git.sur5r.net Git - cc65/commitdiff
Added CollMove
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 17 Jul 2001 11:54:30 +0000 (11:54 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 17 Jul 2001 11:54:30 +0000 (11:54 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@797 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/common/coll.c
src/common/coll.h

index 465a65987a5d74644bd8ad58a0b23b88801eca51..e5a0e7eb8bc0b988cb314ca51a1f6ae8f6f16a1c 100644 (file)
@@ -182,6 +182,29 @@ void CollDeleteItem (Collection* C, const void* Item)
 
 
 
+void CollMove (Collection* C, unsigned OldIndex, unsigned NewIndex)
+/* Move an item from one position in the collection to another. OldIndex
+ * is the current position of the item, NewIndex is the new index after
+ * the function has done it's work. Existing entries with indices NewIndex
+ * and up are moved one position upwards.
+ */
+{
+    /* Get the item and remove it from the collection */
+    void* Item = CollAt (C, OldIndex);
+    CollDelete (C, OldIndex);
+
+    /* Correct NewIndex if needed */
+    if (NewIndex >= OldIndex) {
+       /* Position has changed with removal */
+       --NewIndex;
+    }
+
+    /* Now insert it at the new position */
+    CollInsert (C, Item, NewIndex);
+}
+
+
+
 static void QuickSort (Collection* C, int Lo, int Hi,
                       int (*Compare) (void*, const void*, const void*),
                       void* Data)
index 3dfdd53780bd1eeaf7bc3952dee4390279f72ff2..d925b39c9ac83b04fe23de1274b956954e394ff9 100644 (file)
@@ -248,6 +248,13 @@ INLINE void CollReplace (Collection* C, void* Item, unsigned Index)
        (C)->Items[(Index)] = (Item))
 #endif
 
+void CollMove (Collection* C, unsigned OldIndex, unsigned NewIndex);
+/* Move an item from one position in the collection to another. OldIndex
+ * is the current position of the item, NewIndex is the new index after
+ * the function has done it's work. Existing entries with indices NewIndex
+ * and up are moved one position upwards.
+ */
+
 void CollSort (Collection* C,
               int (*Compare) (void*, const void*, const void*),
               void* Data);