Last active
September 16, 2020 14:27
-
-
Save RobertDurfee/c9cae55139119197d8e42e8845b99077 to your computer and use it in GitHub Desktop.
Revisions
-
RobertDurfee revised this gist
Sep 16, 2020 . 1 changed file with 12 additions and 15 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,15 +8,24 @@ #define OUT /* OUT */ #define INOUT /* INOUT */ struct Value { }; struct Value *ValueNew(); void ValueDelete(INOUT struct Value **value); struct QueueNode { struct Value *value; struct QueueNode *next; }; struct QueueNode *QueueNodeNew(IN struct Value *value, IN struct QueueNode *next); void QueueNodeDelete(INOUT struct QueueNode **node); struct Queue { struct QueueNode *first; struct QueueNode *last; }; struct Queue *QueueNew(); inline bool QueueIsEmpty(IN const struct Queue *queue); void QueuePush(INOUT struct Queue *queue, IN struct Value *value); @@ -27,8 +36,6 @@ void QueueDelete(INOUT struct Queue **queue); // Value //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct Value *ValueNew() { struct Value *value; @@ -46,11 +53,6 @@ void ValueDelete(INOUT struct Value **value) { // Queue Node //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct QueueNode *QueueNodeNew(IN struct Value *value, IN struct QueueNode *next) { struct QueueNode *node; @@ -76,11 +78,6 @@ void QueueNodeDelete(INOUT struct **node) { // Queue //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct Queue *QueueNew() { struct Queue *queue; -
RobertDurfee revised this gist
Sep 16, 2020 . 1 changed file with 27 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,15 +1,42 @@ #include <stdlib.h> //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Header //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define IN /* IN */ #define OUT /* OUT */ #define INOUT /* INOUT */ struct Value; struct Value *ValueNew(); void ValueDelete(INOUT struct Value **value); struct QueueNode; struct QueueNode *QueueNodeNew(IN struct Value *value, IN struct QueueNode *next); void QueueNodeDelete(INOUT struct QueueNode **node); struct Queue; struct Queue *QueueNew(); inline bool QueueIsEmpty(IN const struct Queue *queue); void QueuePush(INOUT struct Queue *queue, IN struct Value *value); struct Value *QueuePop(INOUT struct Queue *queue); void QueueDelete(INOUT struct Queue **queue); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Value //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct Value { }; struct Value *ValueNew() { struct Value *value; value = malloc(sizeof(struct Value)); return value; } void ValueDelete(INOUT struct Value **value) { free(*value); *value = NULL; -
RobertDurfee created this gist
Sep 16, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,113 @@ #include <stdlib.h> #define IN /* IN */ #define OUT /* OUT */ #define INOUT /* INOUT */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Value //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct Value { }; void ValueDelete(INOUT struct Value **value) { free(*value); *value = NULL; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Queue Node //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct QueueNode { struct Value *value; struct QueueNode *next; }; struct QueueNode *QueueNodeNew(IN struct Value *value, IN struct QueueNode *next) { struct QueueNode *node; node = malloc(sizeof(struct QueueNode)); node->value = value; node->next = next; return node; } void QueueNodeDelete(INOUT struct **node) { if ((*node)->next) { QueueNodeDelete(&(*node)->next); } if ((*node)->value) { ValueDelete(&(*node)->value); } free(*node); *node = NULL; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Queue //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct Queue { struct QueueNode *first; struct QueueNode *last; }; struct Queue *QueueNew() { struct Queue *queue; queue = malloc(sizeof(struct Queue)); queue->first = NULL; queue->last = NULL; return queue; } inline bool QueueIsEmpty(IN const struct Queue *queue) { return !queue->first; } void QueuePush(INOUT struct Queue *queue, IN struct Value *value) { struct QueueNode *node; node = QueueNodeNew(value, NULL); if (QueueIsEmpty(queue)) { queue->first = node; queue->last = node; } else { queue->last->next = node; queue->last = node; } } struct Value *QueuePop(INOUT struct Queue *queue) { struct QueueNode *node; struct Value *value; node = queue->first; if (node->next) { queue->first = node->next; } else { queue->first = NULL; queue->last = NULL; } value = node->value; node->value = NULL; node->next = NULL; QueueNodeDelete(&node); return value; } void QueueDelete(INOUT struct Queue **queue) { if (!QueueIsEmpty(*queue)) { QueueNodeDelete(&(*node)->first); } (*queue)->last = NULL; free(*queue); *queue = NULL; }