CVProfRecorder::UpdateAverages_R
0x002370a0 · 1411 bytes · __thiscall
_ZN14CVProfRecorder16UpdateAverages_RER10CUtlVectorINS_12CNodeAverageE10CUtlMemoryIS1_iEEP10CVProfNode
Decompiled
undefined (3 params)
/* CVProfRecorder::UpdateAverages_R(CUtlVector<CVProfRecorder::CNodeAverage,
CUtlMemory<CVProfRecorder::CNodeAverage, int> >&, CVProfNode*) */
void __thiscall
CVProfRecorder::UpdateAverages_R(CVProfRecorder *this,CUtlVector *param_1,CVProfNode *param_2)
{
uint *puVar1;
uint uVar2;
uint uVar3;
CVProfNode *pCVar4;
int iVar5;
int *piVar6;
int iVar7;
int iVar8;
int iVar9;
int iVar10;
int iVar11;
int iVar12;
int iVar13;
int iVar14;
int iVar15;
iVar5 = *(int *)(param_1 + 0xc);
if (iVar5 < 1) {
LAB_002370d4:
iVar5 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>::
InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
*)param_1,iVar5);
piVar6 = (int *)(*(int *)param_1 + iVar5 * 0x14);
piVar6[1] = 0;
piVar6[2] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
*piVar6 = (int)param_2;
}
else {
piVar6 = *(int **)param_1;
if (param_2 != (CVProfNode *)*piVar6) {
iVar15 = 0;
do {
piVar6 = piVar6 + 5;
iVar15 = iVar15 + 1;
if (iVar15 == iVar5) goto LAB_002370d4;
} while (param_2 != (CVProfNode *)*piVar6);
}
}
uVar3 = *(uint *)(param_2 + 0x3c);
iVar5 = *(int *)(param_2 + 0x40);
puVar1 = (uint *)(piVar6 + 1);
uVar2 = *puVar1;
*puVar1 = *puVar1 + uVar3;
piVar6[2] = piVar6[2] + iVar5 + (uint)CARRY4(uVar2,uVar3);
iVar5 = *(int *)(param_2 + 0x38);
piVar6[4] = piVar6[4] + 1;
piVar6[3] = piVar6[3] + iVar5;
iVar5 = *(int *)(param_2 + 0x68);
do {
if (iVar5 == 0) {
return;
}
iVar15 = *(int *)(param_1 + 0xc);
if (iVar15 < 1) {
LAB_00237584:
iVar15 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
*)param_1,iVar15);
piVar6 = (int *)(*(int *)param_1 + iVar15 * 0x14);
piVar6[1] = 0;
piVar6[2] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
*piVar6 = iVar5;
}
else {
piVar6 = *(int **)param_1;
if (iVar5 != *piVar6) {
iVar10 = 0;
do {
piVar6 = piVar6 + 5;
iVar10 = iVar10 + 1;
if (iVar10 == iVar15) goto LAB_00237584;
} while (iVar5 != *piVar6);
}
}
uVar3 = *(uint *)(iVar5 + 0x3c);
iVar15 = *(int *)(iVar5 + 0x40);
puVar1 = (uint *)(piVar6 + 1);
uVar2 = *puVar1;
*puVar1 = *puVar1 + uVar3;
piVar6[2] = piVar6[2] + iVar15 + (uint)CARRY4(uVar2,uVar3);
iVar15 = *(int *)(iVar5 + 0x38);
piVar6[4] = piVar6[4] + 1;
piVar6[3] = piVar6[3] + iVar15;
for (iVar15 = *(int *)(iVar5 + 0x68); iVar15 != 0; iVar15 = *(int *)(iVar15 + 0x6c)) {
iVar10 = *(int *)(param_1 + 0xc);
if (iVar10 < 1) {
LAB_002375be:
iVar10 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
*)param_1,iVar10);
piVar6 = (int *)(*(int *)param_1 + iVar10 * 0x14);
piVar6[1] = 0;
piVar6[2] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
*piVar6 = iVar15;
}
else {
piVar6 = *(int **)param_1;
if (iVar15 != *piVar6) {
iVar11 = 0;
do {
piVar6 = piVar6 + 5;
iVar11 = iVar11 + 1;
if (iVar11 == iVar10) goto LAB_002375be;
} while (iVar15 != *piVar6);
}
}
uVar3 = *(uint *)(iVar15 + 0x3c);
iVar10 = *(int *)(iVar15 + 0x40);
puVar1 = (uint *)(piVar6 + 1);
uVar2 = *puVar1;
*puVar1 = *puVar1 + uVar3;
piVar6[2] = piVar6[2] + iVar10 + (uint)CARRY4(uVar2,uVar3);
iVar10 = *(int *)(iVar15 + 0x38);
piVar6[4] = piVar6[4] + 1;
piVar6[3] = piVar6[3] + iVar10;
for (iVar10 = *(int *)(iVar15 + 0x68); iVar10 != 0; iVar10 = *(int *)(iVar10 + 0x6c)) {
iVar11 = *(int *)(param_1 + 0xc);
if (iVar11 < 1) {
LAB_002375f8:
iVar11 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
*)param_1,iVar11);
piVar6 = (int *)(*(int *)param_1 + iVar11 * 0x14);
piVar6[1] = 0;
piVar6[2] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
*piVar6 = iVar10;
}
else {
piVar6 = *(int **)param_1;
if (iVar10 != *piVar6) {
iVar12 = 0;
do {
piVar6 = piVar6 + 5;
iVar12 = iVar12 + 1;
if (iVar12 == iVar11) goto LAB_002375f8;
} while (iVar10 != *piVar6);
}
}
uVar3 = *(uint *)(iVar10 + 0x3c);
iVar11 = *(int *)(iVar10 + 0x40);
puVar1 = (uint *)(piVar6 + 1);
uVar2 = *puVar1;
*puVar1 = *puVar1 + uVar3;
piVar6[2] = piVar6[2] + iVar11 + (uint)CARRY4(uVar2,uVar3);
iVar11 = *(int *)(iVar10 + 0x38);
piVar6[4] = piVar6[4] + 1;
piVar6[3] = piVar6[3] + iVar11;
for (iVar11 = *(int *)(iVar10 + 0x68); iVar11 != 0; iVar11 = *(int *)(iVar11 + 0x6c)) {
iVar12 = *(int *)(param_1 + 0xc);
if (iVar12 < 1) {
LAB_00237264:
iVar12 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
*)param_1,iVar12);
piVar6 = (int *)(*(int *)param_1 + iVar12 * 0x14);
piVar6[1] = 0;
piVar6[2] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
*piVar6 = iVar11;
}
else {
piVar6 = *(int **)param_1;
if (iVar11 != *piVar6) {
iVar13 = 0;
do {
piVar6 = piVar6 + 5;
iVar13 = iVar13 + 1;
if (iVar13 == iVar12) goto LAB_00237264;
} while (iVar11 != *piVar6);
}
}
uVar3 = *(uint *)(iVar11 + 0x3c);
iVar12 = *(int *)(iVar11 + 0x40);
puVar1 = (uint *)(piVar6 + 1);
uVar2 = *puVar1;
*puVar1 = *puVar1 + uVar3;
piVar6[2] = piVar6[2] + iVar12 + (uint)CARRY4(uVar2,uVar3);
iVar12 = *(int *)(iVar11 + 0x38);
piVar6[4] = piVar6[4] + 1;
piVar6[3] = piVar6[3] + iVar12;
for (iVar12 = *(int *)(iVar11 + 0x68); iVar12 != 0; iVar12 = *(int *)(iVar12 + 0x6c)) {
iVar13 = *(int *)(param_1 + 0xc);
if (iVar13 < 1) {
LAB_002372ed:
iVar13 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
*)param_1,iVar13);
piVar6 = (int *)(*(int *)param_1 + iVar13 * 0x14);
piVar6[1] = 0;
piVar6[2] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
*piVar6 = iVar12;
}
else {
piVar6 = *(int **)param_1;
if (iVar12 != *piVar6) {
iVar14 = 0;
do {
piVar6 = piVar6 + 5;
iVar14 = iVar14 + 1;
if (iVar14 == iVar13) goto LAB_002372ed;
} while (iVar12 != *piVar6);
}
}
uVar3 = *(uint *)(iVar12 + 0x3c);
iVar13 = *(int *)(iVar12 + 0x40);
puVar1 = (uint *)(piVar6 + 1);
uVar2 = *puVar1;
*puVar1 = *puVar1 + uVar3;
piVar6[2] = piVar6[2] + iVar13 + (uint)CARRY4(uVar2,uVar3);
iVar13 = *(int *)(iVar12 + 0x38);
piVar6[4] = piVar6[4] + 1;
piVar6[3] = piVar6[3] + iVar13;
for (iVar13 = *(int *)(iVar12 + 0x68); iVar13 != 0; iVar13 = *(int *)(iVar13 + 0x6c)) {
iVar14 = *(int *)(param_1 + 0xc);
if (iVar14 < 1) {
LAB_00237373:
iVar14 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
*)param_1,iVar14);
piVar6 = (int *)(*(int *)param_1 + iVar14 * 0x14);
piVar6[1] = 0;
piVar6[2] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
*piVar6 = iVar13;
}
else {
piVar6 = *(int **)param_1;
if (iVar13 != *piVar6) {
iVar7 = 0;
do {
piVar6 = piVar6 + 5;
iVar7 = iVar7 + 1;
if (iVar7 == iVar14) goto LAB_00237373;
} while (iVar13 != *piVar6);
}
}
uVar3 = *(uint *)(iVar13 + 0x3c);
iVar14 = *(int *)(iVar13 + 0x40);
puVar1 = (uint *)(piVar6 + 1);
uVar2 = *puVar1;
*puVar1 = *puVar1 + uVar3;
piVar6[2] = piVar6[2] + iVar14 + (uint)CARRY4(uVar2,uVar3);
iVar14 = *(int *)(iVar13 + 0x38);
piVar6[4] = piVar6[4] + 1;
piVar6[3] = piVar6[3] + iVar14;
for (iVar14 = *(int *)(iVar13 + 0x68); iVar14 != 0; iVar14 = *(int *)(iVar14 + 0x6c))
{
iVar7 = *(int *)(param_1 + 0xc);
if (iVar7 < 1) {
LAB_00237401:
iVar7 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
*)param_1,iVar7);
piVar6 = (int *)(*(int *)param_1 + iVar7 * 0x14);
piVar6[1] = 0;
piVar6[2] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
*piVar6 = iVar14;
}
else {
piVar6 = *(int **)param_1;
if (iVar14 != *piVar6) {
iVar8 = 0;
do {
piVar6 = piVar6 + 5;
iVar8 = iVar8 + 1;
if (iVar8 == iVar7) goto LAB_00237401;
} while (iVar14 != *piVar6);
}
}
uVar3 = *(uint *)(iVar14 + 0x3c);
iVar7 = *(int *)(iVar14 + 0x40);
puVar1 = (uint *)(piVar6 + 1);
uVar2 = *puVar1;
*puVar1 = *puVar1 + uVar3;
piVar6[2] = piVar6[2] + iVar7 + (uint)CARRY4(uVar2,uVar3);
iVar7 = *(int *)(iVar14 + 0x38);
piVar6[4] = piVar6[4] + 1;
piVar6[3] = piVar6[3] + iVar7;
for (iVar7 = *(int *)(iVar14 + 0x68); iVar7 != 0; iVar7 = *(int *)(iVar7 + 0x6c)) {
iVar8 = *(int *)(param_1 + 0xc);
if (iVar8 < 1) {
LAB_00237489:
iVar8 = CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
::InsertBefore((CUtlVector<CVProfRecorder::CNodeAverage,CUtlMemory<CVProfRecorder::CNodeAverage,int>>
*)param_1,iVar8);
piVar6 = (int *)(*(int *)param_1 + iVar8 * 0x14);
piVar6[1] = 0;
piVar6[2] = 0;
piVar6[3] = 0;
piVar6[4] = 0;
*piVar6 = iVar7;
}
else {
piVar6 = *(int **)param_1;
if (iVar7 != *piVar6) {
iVar9 = 0;
do {
piVar6 = piVar6 + 5;
iVar9 = iVar9 + 1;
if (iVar9 == iVar8) goto LAB_00237489;
} while (iVar7 != *piVar6);
}
}
uVar3 = *(uint *)(iVar7 + 0x3c);
iVar8 = *(int *)(iVar7 + 0x40);
puVar1 = (uint *)(piVar6 + 1);
uVar2 = *puVar1;
*puVar1 = *puVar1 + uVar3;
piVar6[2] = piVar6[2] + iVar8 + (uint)CARRY4(uVar2,uVar3);
iVar8 = *(int *)(iVar7 + 0x38);
piVar6[4] = piVar6[4] + 1;
piVar6[3] = piVar6[3] + iVar8;
for (pCVar4 = *(CVProfNode **)(iVar7 + 0x68); pCVar4 != (CVProfNode *)0x0;
pCVar4 = *(CVProfNode **)(pCVar4 + 0x6c)) {
UpdateAverages_R(this,param_1,pCVar4);
}
}
}
}
}
}
}
}
iVar5 = *(int *)(iVar5 + 0x6c);
} while( true );
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.