- sllnode<ModelAction *> * llnode = reinterpret_cast<sllnode<ModelAction *> *>(((uintptr_t) tmp) & ALLMASK);
- bool first = true;
- do {
- if (llnode->val == act) {
- //found node to remove
- sllnode<ModelAction *> * llnodeprev = llnode->prev;
- sllnode<ModelAction *> * llnodenext = llnode->next;
- if (llnodeprev != NULL) {
- llnodeprev->next = llnodenext;
- } else {
- head = llnodenext;
- }
- if (llnodenext != NULL) {
- llnodenext->prev = llnodeprev;
- } else {
- tail = llnodeprev;
- }
- if (first) {
- //see if previous node has same clock as us...
- if (llnodeprev->val->get_seq_number() == clock) {
- ptr->children[index] = reinterpret_cast<allnode *>(((uintptr_t)llnodeprev) | ISACT);
- } else {
- //remove ourselves and go up tree
- ptr->children[index] = NULL;
- decrementCount(ptr);
- }
- }
- delete llnode;
- _size--;
- return;
- }
- llnode = llnode->prev;
- first = false;
- } while(llnode != NULL && llnode->val->get_seq_number() == clock);
- //node not found in list... no deletion
- return;