void RBRemoveAll(struct RBTree* _Tree, void(*_Callback)(void*)) { struct RBItrStack _ItrStack[_Tree->Size]; int i = 0; memset(_ItrStack, 0, sizeof(struct RBItrStack*) * _Tree->Size); RBDepthFirst(_Tree->Table, _ItrStack); for(i = 0; i < _Tree->Size; ++i) _Callback(_ItrStack[i].Node->Data); while(_Tree->Size > 0) { RBDeleteNode(_Tree, _Tree->Table); } }
void LnkLstInsertPriority(struct LinkedList* _List, void* _Value, int (*_Callback)(const void*, const void*)) { struct LnkLst_Node* _Node = CreateLnkLstNode(_Value); struct LnkLst_Node* _Itr = NULL; if(_List->Front == NULL) { _List->Front = _Node; _List->Back = _Node; ++_List->Size; return; } if(_Callback(_Value, _List->Front->Data) > 0) { _Node->Next = _List->Front; _Node->Prev = NULL; _List->Front = _Node; return; } _Itr = _List->Front; do { if(_Callback(_Value, _List->Front->Data) <= 0) { if(_Itr->Next == NULL) _List->Back = _Node; else { _Node->Next = _Itr->Next; _Node->Next->Prev = _Node; } _Node->Prev = _Itr; _Itr->Next = _Node; ++_List->Size; return; } _Itr = _Itr->Next; } while(_Itr != NULL); _List->Back->Next = _Node; _Node->Prev = _List->Back; _List->Back = _Node; ++_List->Size; }
void RBIterate(struct RBTree* _Tree, int(*_Callback)(void*)) { int i = 0; int j = 0; struct RBItrStack _Stack[_Tree->Size]; struct RBItrStack _DeleteStack[_Tree->Size]; if(_Tree->Table == NULL) return; memset(_Stack, 0, sizeof(struct RBItrStack*) * _Tree->Size); memset(_DeleteStack, 0, sizeof(struct RBItrStack*) * _Tree->Size); RBDepthFirst(_Tree->Table, _Stack); for(i = 0; i < _Tree->Size; ++i) { if(_Callback(_Stack[i].Node->Data) != 0) _DeleteStack[j] = _Stack[i]; } for(i = 0; i < j; ++i) RBDeleteNode(_Tree, _DeleteStack[i].Node); }
//------------------------------------------------- void itemSelector::update() { if(!_startCheck) { return; } _itemSelector.update(); if(_itemSelector.getIsMovieDone()) { if(_Callback) { _clickAudio.play(); _Callback(); } stopCheck(); } }