diff --git a/SilentPatchSA/rwpred.hpp b/SilentPatchSA/rwpred.hpp index 5dadcd1..a1e4745 100644 --- a/SilentPatchSA/rwpred.hpp +++ b/SilentPatchSA/rwpred.hpp @@ -4,22 +4,22 @@ #include template -RwFrame* RwFrameForAllChildren(RwFrame* frame, Pred callback) +RwFrame* RwFrameForAllChildren(RwFrame* frame, Pred&& callback) { for ( RwFrame* curFrame = frame->child; curFrame != nullptr; curFrame = curFrame->next ) { - if ( callback(curFrame) == nullptr ) + if ( std::forward(callback)(curFrame) == nullptr ) break; } return frame; } template -RwFrame* RwFrameForAllObjects(RwFrame* frame, Pred callback) +RwFrame* RwFrameForAllObjects(RwFrame* frame, Pred&& callback) { for ( RwLLLink* link = rwLinkListGetFirstLLLink(&frame->objectList); link != rwLinkListGetTerminator(&frame->objectList); link = rwLLLinkGetNext(link) ) { - if ( callback(&rwLLLinkGetData(link, RwObjectHasFrame, lFrame)->object) == nullptr ) + if ( std::forward(callback)(&rwLLLinkGetData(link, RwObjectHasFrame, lFrame)->object) == nullptr ) break; } @@ -27,22 +27,22 @@ RwFrame* RwFrameForAllObjects(RwFrame* frame, Pred callback) } template -RpClump* RpClumpForAllAtomics(RpClump* clump, Pred callback) +RpClump* RpClumpForAllAtomics(RpClump* clump, Pred&& callback) { for ( RwLLLink* link = rwLinkListGetFirstLLLink(&clump->atomicList); link != rwLinkListGetTerminator(&clump->atomicList); link = rwLLLinkGetNext(link) ) { - if ( callback(rwLLLinkGetData(link, RpAtomic, inClumpLink)) == nullptr ) + if ( std::forward(callback)(rwLLLinkGetData(link, RpAtomic, inClumpLink)) == nullptr ) break; } return clump; } template -RpGeometry* RpGeometryForAllMaterials(RpGeometry* geometry, Pred callback) +RpGeometry* RpGeometryForAllMaterials(RpGeometry* geometry, Pred&& callback) { for ( RwInt32 i = 0, j = geometry->matList.numMaterials; i < j; i++ ) { - if ( callback(geometry->matList.materials[i]) == nullptr ) + if ( std::forward(callback)(geometry->matList.materials[i]) == nullptr ) break; } return geometry;