#include "brlists.h"
#include "harness/trace.h"
#include <assert.h>
#include <stdio.h>
// IDA: void __cdecl BrNewList(br_list *list)
void BrNewList(br_list* list) {
LOG_TRACE10("(%p)", list);
list->head = (br_node*)&list->_null;
list->_null = NULL;
list->tail = (br_node*)list;
}
// IDA: void __cdecl BrAddHead(br_list *list, br_node *node)
void BrAddHead(br_list* list, br_node* node) {
LOG_TRACE10("(%p, %p)", list, node);
//node->prev = (br_node*)list;
node->prev = (br_node*)&(list->head);
node->next = list->head;
list->head->prev = node;
list->head = node;
}
// IDA: void __cdecl BrAddTail(br_list *list, br_node *node)
void BrAddTail(br_list* list, br_node* node) {
LOG_TRACE10("(%p, %p)", list, node);
node->next = (br_node*)&list->_null;
node->prev = list->tail;
list->tail->next = node;
list->tail = node;
}
// IDA: br_node* __cdecl BrRemHead(br_list *list)
br_node* BrRemHead(br_list* list) {
br_node* n;
LOG_TRACE10("(%p)", list);
n = list->head;
if (n == (br_node*)&list->_null) {
return NULL;
}
list->head = n->next;
n->next->prev = (br_node*)&list->head;
return n;
}
// IDA: br_node* __cdecl BrRemTail(br_list *list)
br_node* BrRemTail(br_list* list) {
br_node* n;
LOG_TRACE10("(%p)", list);
n = list->tail;
if (n == (br_node*)&list->head) {
return NULL;
}
list->tail = n->prev;
n->prev->next = (br_node*)&list->_null;
return n;
}
// IDA: void __cdecl BrInsert(br_list *list, br_node *here, br_node *node)
void BrInsert(br_list* list, br_node* here, br_node* node) {
LOG_TRACE10("(%p, %p, %p)", list, here, node);
node->prev = here;
node->next = here->next;
here->next->prev = node;
here->next = node;
}
// IDA: br_node* __cdecl BrRemove(br_node *node)
br_node* BrRemove(br_node* node) {
LOG_TRACE10("(%p)", node);
node->next->prev = node->prev;
node->prev->next = node->next;
return node;
}
// IDA: void __cdecl BrSimpleNewList(br_simple_list *list)
void BrSimpleNewList(br_simple_list* list) {
LOG_TRACE10("(%p)", list);
list->head = NULL;
}
// IDA: void __cdecl BrSimpleAddHead(br_simple_list *list, br_simple_node *node)
void BrSimpleAddHead(br_simple_list* list, br_simple_node* node) {
LOG_TRACE10("(%p, %p)", list, node);
node->next = list->head;
node->prev = (br_simple_node**)&list->head;
if (list->head != NULL) {
list->head->prev = &node->next;
}
list->head = node;
}
// IDA: br_simple_node* __cdecl BrSimpleRemHead(br_simple_list *list)
br_simple_node* BrSimpleRemHead(br_simple_list* list) {
br_simple_node* node;
LOG_TRACE10("(%p)", list);
node = list->head;
if (node != NULL) {
*node->prev = node->next;
if (node->next != NULL) {
node->next->prev = node->prev;
}
node->prev = NULL;
node->next = NULL;
}
return node;
}
// IDA: void __cdecl BrSimpleInsert(br_simple_list *list, br_simple_node *here, br_simple_node *node)
void BrSimpleInsert(br_simple_list* list, br_simple_node* here, br_simple_node* node) {
LOG_TRACE10("(%p, %p, %p)", list, here, node);
node->prev = &here->next;
node->next = here->next;
if (here->next != NULL) {
here->next->prev = &node->next;
}
here->next = node;
}
// IDA: br_simple_node* __cdecl BrSimpleRemove(br_simple_node *node)
br_simple_node* BrSimpleRemove(br_simple_node* node) {
LOG_TRACE10("(%p)", node);
*node->prev = node->next;
if (node->next != NULL) {
node->next->prev = node->prev;
}
node->next = NULL;
node->prev = NULL;
return node;
}