From 07caa7eb5229bb50481e03afa5533b5a0a70bf03 Mon Sep 17 00:00:00 2001 From: Sandu Liviu Catalin Date: Mon, 31 Oct 2016 18:34:27 +0200 Subject: [PATCH] Don't use overloads in the foreach algorithm for simplicity and performance reasons. --- source/Base/Algo.cpp | 213 ++++++++++++++++++++++++------------------- 1 file changed, 119 insertions(+), 94 deletions(-) diff --git a/source/Base/Algo.cpp b/source/Base/Algo.cpp index 7db6e0f7..10fecae6 100644 --- a/source/Base/Algo.cpp +++ b/source/Base/Algo.cpp @@ -695,122 +695,147 @@ void Register(HSQUIRRELVM vm) Table each_ns(vm); each_ns.Bind(_SC("Blip"), Table(vm) - .Overload(_SC("Active"), &Entity< CBlip >::EachActive) - .Overload(_SC("TagEquals"), &Entity< CBlip >::EachWhereTagEquals) - .Overload(_SC("TagBegins"), &Entity< CBlip >::EachWhereTagBegins) - .Overload(_SC("TagEnds"), &Entity< CBlip >::EachWhereTagEnds) - .Overload(_SC("TagContains"), &Entity< CBlip >::EachWhereTagContains) - .Overload(_SC("TagMatches"), &Entity< CBlip >::EachWhereTagMatches) - .Overload(_SC("Active"), &Entity< CBlip >::EachActiveData) - .Overload(_SC("TagEquals"), &Entity< CBlip >::EachWhereTagEqualsData) - .Overload(_SC("TagBegins"), &Entity< CBlip >::EachWhereTagBeginsData) - .Overload(_SC("TagEnds"), &Entity< CBlip >::EachWhereTagEndsData) - .Overload(_SC("TagContains"), &Entity< CBlip >::EachWhereTagContainsData) - .Overload(_SC("TagMatches"), &Entity< CBlip >::EachWhereTagMatchesData) + .Func(_SC("Active"), &Entity< CBlip >::EachActive) + .Func(_SC("TagEquals"), &Entity< CBlip >::EachWhereTagEquals) + .Func(_SC("TagBegins"), &Entity< CBlip >::EachWhereTagBegins) + .Func(_SC("TagEnds"), &Entity< CBlip >::EachWhereTagEnds) + .Func(_SC("TagContains"), &Entity< CBlip >::EachWhereTagContains) + .Func(_SC("TagMatches"), &Entity< CBlip >::EachWhereTagMatches) ); each_ns.Bind(_SC("Checkpoint"), Table(vm) - .Overload(_SC("Active"), &Entity< CCheckpoint >::EachActive) - .Overload(_SC("TagEquals"), &Entity< CCheckpoint >::EachWhereTagEquals) - .Overload(_SC("TagBegins"), &Entity< CCheckpoint >::EachWhereTagBegins) - .Overload(_SC("TagEnds"), &Entity< CCheckpoint >::EachWhereTagEnds) - .Overload(_SC("TagContains"), &Entity< CCheckpoint >::EachWhereTagContains) - .Overload(_SC("TagMatches"), &Entity< CCheckpoint >::EachWhereTagMatches) - .Overload(_SC("Active"), &Entity< CCheckpoint >::EachActiveData) - .Overload(_SC("TagEquals"), &Entity< CCheckpoint >::EachWhereTagEqualsData) - .Overload(_SC("TagBegins"), &Entity< CCheckpoint >::EachWhereTagBeginsData) - .Overload(_SC("TagEnds"), &Entity< CCheckpoint >::EachWhereTagEndsData) - .Overload(_SC("TagContains"), &Entity< CCheckpoint >::EachWhereTagContainsData) - .Overload(_SC("TagMatches"), &Entity< CCheckpoint >::EachWhereTagMatchesData) + .Func(_SC("Active"), &Entity< CCheckpoint >::EachActive) + .Func(_SC("TagEquals"), &Entity< CCheckpoint >::EachWhereTagEquals) + .Func(_SC("TagBegins"), &Entity< CCheckpoint >::EachWhereTagBegins) + .Func(_SC("TagEnds"), &Entity< CCheckpoint >::EachWhereTagEnds) + .Func(_SC("TagContains"), &Entity< CCheckpoint >::EachWhereTagContains) + .Func(_SC("TagMatches"), &Entity< CCheckpoint >::EachWhereTagMatches) ); each_ns.Bind(_SC("Keybind"), Table(vm) - .Overload(_SC("Active"), &Entity< CKeybind >::EachActive) - .Overload(_SC("TagEquals"), &Entity< CKeybind >::EachWhereTagEquals) - .Overload(_SC("TagBegins"), &Entity< CKeybind >::EachWhereTagBegins) - .Overload(_SC("TagEnds"), &Entity< CKeybind >::EachWhereTagEnds) - .Overload(_SC("TagContains"), &Entity< CKeybind >::EachWhereTagContains) - .Overload(_SC("TagMatches"), &Entity< CKeybind >::EachWhereTagMatches) - .Overload(_SC("Active"), &Entity< CKeybind >::EachActiveData) - .Overload(_SC("TagEquals"), &Entity< CKeybind >::EachWhereTagEqualsData) - .Overload(_SC("TagBegins"), &Entity< CKeybind >::EachWhereTagBeginsData) - .Overload(_SC("TagEnds"), &Entity< CKeybind >::EachWhereTagEndsData) - .Overload(_SC("TagContains"), &Entity< CKeybind >::EachWhereTagContainsData) - .Overload(_SC("TagMatches"), &Entity< CKeybind >::EachWhereTagMatchesData) + .Func(_SC("Active"), &Entity< CKeybind >::EachActive) + .Func(_SC("TagEquals"), &Entity< CKeybind >::EachWhereTagEquals) + .Func(_SC("TagBegins"), &Entity< CKeybind >::EachWhereTagBegins) + .Func(_SC("TagEnds"), &Entity< CKeybind >::EachWhereTagEnds) + .Func(_SC("TagContains"), &Entity< CKeybind >::EachWhereTagContains) + .Func(_SC("TagMatches"), &Entity< CKeybind >::EachWhereTagMatches) ); each_ns.Bind(_SC("Object"), Table(vm) - .Overload(_SC("Active"), &Entity< CObject >::EachActive) - .Overload(_SC("TagEquals"), &Entity< CObject >::EachWhereTagEquals) - .Overload(_SC("TagBegins"), &Entity< CObject >::EachWhereTagBegins) - .Overload(_SC("TagEnds"), &Entity< CObject >::EachWhereTagEnds) - .Overload(_SC("TagContains"), &Entity< CObject >::EachWhereTagContains) - .Overload(_SC("TagMatches"), &Entity< CObject >::EachWhereTagMatches) - .Overload(_SC("Active"), &Entity< CObject >::EachActiveData) - .Overload(_SC("TagEquals"), &Entity< CObject >::EachWhereTagEqualsData) - .Overload(_SC("TagBegins"), &Entity< CObject >::EachWhereTagBeginsData) - .Overload(_SC("TagEnds"), &Entity< CObject >::EachWhereTagEndsData) - .Overload(_SC("TagContains"), &Entity< CObject >::EachWhereTagContainsData) - .Overload(_SC("TagMatches"), &Entity< CObject >::EachWhereTagMatchesData) + .Func(_SC("Active"), &Entity< CObject >::EachActive) + .Func(_SC("TagEquals"), &Entity< CObject >::EachWhereTagEquals) + .Func(_SC("TagBegins"), &Entity< CObject >::EachWhereTagBegins) + .Func(_SC("TagEnds"), &Entity< CObject >::EachWhereTagEnds) + .Func(_SC("TagContains"), &Entity< CObject >::EachWhereTagContains) + .Func(_SC("TagMatches"), &Entity< CObject >::EachWhereTagMatches) ); each_ns.Bind(_SC("Pickup"), Table(vm) - .Overload(_SC("Active"), &Entity< CPickup >::EachActive) - .Overload(_SC("TagEquals"), &Entity< CPickup >::EachWhereTagEquals) - .Overload(_SC("TagBegins"), &Entity< CPickup >::EachWhereTagBegins) - .Overload(_SC("TagEnds"), &Entity< CPickup >::EachWhereTagEnds) - .Overload(_SC("TagContains"), &Entity< CPickup >::EachWhereTagContains) - .Overload(_SC("TagMatches"), &Entity< CPickup >::EachWhereTagMatches) - .Overload(_SC("Active"), &Entity< CPickup >::EachActiveData) - .Overload(_SC("TagEquals"), &Entity< CPickup >::EachWhereTagEqualsData) - .Overload(_SC("TagBegins"), &Entity< CPickup >::EachWhereTagBeginsData) - .Overload(_SC("TagEnds"), &Entity< CPickup >::EachWhereTagEndsData) - .Overload(_SC("TagContains"), &Entity< CPickup >::EachWhereTagContainsData) - .Overload(_SC("TagMatches"), &Entity< CPickup >::EachWhereTagMatchesData) + .Func(_SC("Active"), &Entity< CPickup >::EachActive) + .Func(_SC("TagEquals"), &Entity< CPickup >::EachWhereTagEquals) + .Func(_SC("TagBegins"), &Entity< CPickup >::EachWhereTagBegins) + .Func(_SC("TagEnds"), &Entity< CPickup >::EachWhereTagEnds) + .Func(_SC("TagContains"), &Entity< CPickup >::EachWhereTagContains) + .Func(_SC("TagMatches"), &Entity< CPickup >::EachWhereTagMatches) ); each_ns.Bind(_SC("Player"), Table(vm) - .Overload(_SC("Active"), &Entity< CPlayer >::EachActive) - .Overload(_SC("TagEquals"), &Entity< CPlayer >::EachWhereTagEquals) - .Overload(_SC("TagBegins"), &Entity< CPlayer >::EachWhereTagBegins) - .Overload(_SC("TagEnds"), &Entity< CPlayer >::EachWhereTagEnds) - .Overload(_SC("TagContains"), &Entity< CPlayer >::EachWhereTagContains) - .Overload(_SC("TagMatches"), &Entity< CPlayer >::EachWhereTagMatches) - .Overload(_SC("NameEquals"), &Player_EachWhereNameEquals) - .Overload(_SC("NameBegins"), &Player_EachWhereNameBegins) - .Overload(_SC("NameEnds"), &Player_EachWhereNameEnds) - .Overload(_SC("NameContains"), &Player_EachWhereNameContains) - .Overload(_SC("NameMatches"), &Player_EachWhereNameMatches) - .Overload(_SC("Active"), &Entity< CPlayer >::EachActiveData) - .Overload(_SC("TagEquals"), &Entity< CPlayer >::EachWhereTagEqualsData) - .Overload(_SC("TagBegins"), &Entity< CPlayer >::EachWhereTagBeginsData) - .Overload(_SC("TagEnds"), &Entity< CPlayer >::EachWhereTagEndsData) - .Overload(_SC("TagContains"), &Entity< CPlayer >::EachWhereTagContainsData) - .Overload(_SC("TagMatches"), &Entity< CPlayer >::EachWhereTagMatchesData) - .Overload(_SC("NameEquals"), &Player_EachWhereNameEqualsData) - .Overload(_SC("NameBegins"), &Player_EachWhereNameBeginsData) - .Overload(_SC("NameEnds"), &Player_EachWhereNameEndsData) - .Overload(_SC("NameContains"), &Player_EachWhereNameContainsData) - .Overload(_SC("NameMatches"), &Player_EachWhereNameMatchesData) + .Func(_SC("Active"), &Entity< CPlayer >::EachActive) + .Func(_SC("TagEquals"), &Entity< CPlayer >::EachWhereTagEquals) + .Func(_SC("TagBegins"), &Entity< CPlayer >::EachWhereTagBegins) + .Func(_SC("TagEnds"), &Entity< CPlayer >::EachWhereTagEnds) + .Func(_SC("TagContains"), &Entity< CPlayer >::EachWhereTagContains) + .Func(_SC("TagMatches"), &Entity< CPlayer >::EachWhereTagMatches) + .Func(_SC("NameEquals"), &Player_EachWhereNameEquals) + .Func(_SC("NameBegins"), &Player_EachWhereNameBegins) + .Func(_SC("NameEnds"), &Player_EachWhereNameEnds) + .Func(_SC("NameContains"), &Player_EachWhereNameContains) + .Func(_SC("NameMatches"), &Player_EachWhereNameMatches) ); each_ns.Bind(_SC("Vehicle"), Table(vm) - .Overload(_SC("Active"), &Entity< CVehicle >::EachActive) - .Overload(_SC("TagEquals"), &Entity< CVehicle >::EachWhereTagEquals) - .Overload(_SC("TagBegins"), &Entity< CVehicle >::EachWhereTagBegins) - .Overload(_SC("TagEnds"), &Entity< CVehicle >::EachWhereTagEnds) - .Overload(_SC("TagContains"), &Entity< CVehicle >::EachWhereTagContains) - .Overload(_SC("TagMatches"), &Entity< CVehicle >::EachWhereTagMatches) - .Overload(_SC("Active"), &Entity< CVehicle >::EachActiveData) - .Overload(_SC("TagEquals"), &Entity< CVehicle >::EachWhereTagEqualsData) - .Overload(_SC("TagBegins"), &Entity< CVehicle >::EachWhereTagBeginsData) - .Overload(_SC("TagEnds"), &Entity< CVehicle >::EachWhereTagEndsData) - .Overload(_SC("TagContains"), &Entity< CVehicle >::EachWhereTagContainsData) - .Overload(_SC("TagMatches"), &Entity< CVehicle >::EachWhereTagMatchesData) + .Func(_SC("Active"), &Entity< CVehicle >::EachActive) + .Func(_SC("TagEquals"), &Entity< CVehicle >::EachWhereTagEquals) + .Func(_SC("TagBegins"), &Entity< CVehicle >::EachWhereTagBegins) + .Func(_SC("TagEnds"), &Entity< CVehicle >::EachWhereTagEnds) + .Func(_SC("TagContains"), &Entity< CVehicle >::EachWhereTagContains) + .Func(_SC("TagMatches"), &Entity< CVehicle >::EachWhereTagMatches) ); RootTable(vm).Bind(_SC("SqForeach"), each_ns); + Table exeach_ns(vm); + + exeach_ns.Bind(_SC("Blip"), Table(vm) + .Func(_SC("Active"), &Entity< CBlip >::EachActiveData) + .Func(_SC("TagEquals"), &Entity< CBlip >::EachWhereTagEqualsData) + .Func(_SC("TagBegins"), &Entity< CBlip >::EachWhereTagBeginsData) + .Func(_SC("TagEnds"), &Entity< CBlip >::EachWhereTagEndsData) + .Func(_SC("TagContains"), &Entity< CBlip >::EachWhereTagContainsData) + .Func(_SC("TagMatches"), &Entity< CBlip >::EachWhereTagMatchesData) + ); + + exeach_ns.Bind(_SC("Checkpoint"), Table(vm) + .Func(_SC("Active"), &Entity< CCheckpoint >::EachActiveData) + .Func(_SC("TagEquals"), &Entity< CCheckpoint >::EachWhereTagEqualsData) + .Func(_SC("TagBegins"), &Entity< CCheckpoint >::EachWhereTagBeginsData) + .Func(_SC("TagEnds"), &Entity< CCheckpoint >::EachWhereTagEndsData) + .Func(_SC("TagContains"), &Entity< CCheckpoint >::EachWhereTagContainsData) + .Func(_SC("TagMatches"), &Entity< CCheckpoint >::EachWhereTagMatchesData) + ); + + exeach_ns.Bind(_SC("Keybind"), Table(vm) + .Func(_SC("Active"), &Entity< CKeybind >::EachActiveData) + .Func(_SC("TagEquals"), &Entity< CKeybind >::EachWhereTagEqualsData) + .Func(_SC("TagBegins"), &Entity< CKeybind >::EachWhereTagBeginsData) + .Func(_SC("TagEnds"), &Entity< CKeybind >::EachWhereTagEndsData) + .Func(_SC("TagContains"), &Entity< CKeybind >::EachWhereTagContainsData) + .Func(_SC("TagMatches"), &Entity< CKeybind >::EachWhereTagMatchesData) + ); + + exeach_ns.Bind(_SC("Object"), Table(vm) + .Func(_SC("Active"), &Entity< CObject >::EachActiveData) + .Func(_SC("TagEquals"), &Entity< CObject >::EachWhereTagEqualsData) + .Func(_SC("TagBegins"), &Entity< CObject >::EachWhereTagBeginsData) + .Func(_SC("TagEnds"), &Entity< CObject >::EachWhereTagEndsData) + .Func(_SC("TagContains"), &Entity< CObject >::EachWhereTagContainsData) + .Func(_SC("TagMatches"), &Entity< CObject >::EachWhereTagMatchesData) + ); + + exeach_ns.Bind(_SC("Pickup"), Table(vm) + .Func(_SC("Active"), &Entity< CPickup >::EachActiveData) + .Func(_SC("TagEquals"), &Entity< CPickup >::EachWhereTagEqualsData) + .Func(_SC("TagBegins"), &Entity< CPickup >::EachWhereTagBeginsData) + .Func(_SC("TagEnds"), &Entity< CPickup >::EachWhereTagEndsData) + .Func(_SC("TagContains"), &Entity< CPickup >::EachWhereTagContainsData) + .Func(_SC("TagMatches"), &Entity< CPickup >::EachWhereTagMatchesData) + ); + + exeach_ns.Bind(_SC("Player"), Table(vm) + .Func(_SC("Active"), &Entity< CPlayer >::EachActiveData) + .Func(_SC("TagEquals"), &Entity< CPlayer >::EachWhereTagEqualsData) + .Func(_SC("TagBegins"), &Entity< CPlayer >::EachWhereTagBeginsData) + .Func(_SC("TagEnds"), &Entity< CPlayer >::EachWhereTagEndsData) + .Func(_SC("TagContains"), &Entity< CPlayer >::EachWhereTagContainsData) + .Func(_SC("TagMatches"), &Entity< CPlayer >::EachWhereTagMatchesData) + .Func(_SC("NameEquals"), &Player_EachWhereNameEqualsData) + .Func(_SC("NameBegins"), &Player_EachWhereNameBeginsData) + .Func(_SC("NameEnds"), &Player_EachWhereNameEndsData) + .Func(_SC("NameContains"), &Player_EachWhereNameContainsData) + .Func(_SC("NameMatches"), &Player_EachWhereNameMatchesData) + ); + + exeach_ns.Bind(_SC("Vehicle"), Table(vm) + .Func(_SC("Active"), &Entity< CVehicle >::EachActiveData) + .Func(_SC("TagEquals"), &Entity< CVehicle >::EachWhereTagEqualsData) + .Func(_SC("TagBegins"), &Entity< CVehicle >::EachWhereTagBeginsData) + .Func(_SC("TagEnds"), &Entity< CVehicle >::EachWhereTagEndsData) + .Func(_SC("TagContains"), &Entity< CVehicle >::EachWhereTagContainsData) + .Func(_SC("TagMatches"), &Entity< CVehicle >::EachWhereTagMatchesData) + ); + + RootTable(vm).Bind(_SC("SqForeachEx"), exeach_ns); + Table count_ns(vm); count_ns.Bind(_SC("Blip"), Table(vm)