Parcourir la source

SLinkedList: implement MarkRemoved and IsRemoved

ambrop7 il y a 12 ans
Parent
commit
f5ea2bdef7

+ 2 - 0
structure/SLinkedList_decl.h

@@ -43,6 +43,8 @@ typedef struct {
 
 static SLinkedListEntry * SLinkedListNext (SLinkedListEntry *entry);
 static SLinkedListEntry * SLinkedListPrev (SLinkedListEntry *entry);
+static void SLinkedListMarkRemoved (SLinkedListEntry *entry);
+static int SLinkedListIsRemoved (SLinkedListEntry *entry);
 
 static void SLinkedList_Init (SLinkedList *o);
 static void SLinkedList_Prepend (SLinkedList *o, SLinkedListEntry *entry);

+ 2 - 0
structure/SLinkedList_footer.h

@@ -38,6 +38,8 @@
 
 #undef SLinkedListNext
 #undef SLinkedListPrev
+#undef SLinkedListMarkRemoved
+#undef SLinkedListIsRemoved
 
 #undef SLinkedList_Init
 #undef SLinkedList_Prepend

+ 2 - 0
structure/SLinkedList_header.h

@@ -41,6 +41,8 @@
 // non-object public functions
 #define SLinkedListNext MERGE(SLinkedList, Next)
 #define SLinkedListPrev MERGE(SLinkedList, Prev)
+#define SLinkedListMarkRemoved MERGE(SLinkedList, MarkRemoved)
+#define SLinkedListIsRemoved MERGE(SLinkedList, IsRemoved)
 
 // public functions
 #define SLinkedList_Init MERGE(SLinkedList, _Init)

+ 14 - 0
structure/SLinkedList_impl.h

@@ -43,6 +43,20 @@ static SLinkedListEntry * SLinkedListPrev (SLinkedListEntry *entry)
     return SLinkedList_prev(entry);
 }
 
+static void SLinkedListMarkRemoved (SLinkedListEntry *entry)
+{
+    ASSERT(entry)
+    
+    SLinkedList_next(entry) = entry;
+}
+
+static int SLinkedListIsRemoved (SLinkedListEntry *entry)
+{
+    ASSERT(entry)
+    
+    return (entry == SLinkedList_next(entry));
+}
+
 static void SLinkedList_Init (SLinkedList *o)
 {
     o->first = NULL;