std::__merge_without_buffer<unsigned_char*,int>
0x00143950 · 444 bytes · unknown
_ZSt22__merge_without_bufferIPhiEvT_S1_S1_T0_S2_
Decompiled
void (5 params)
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* void std::__merge_without_buffer<unsigned char*, int>(unsigned char*, unsigned char*, unsigned
char*, int, int) */
void std::__merge_without_buffer<unsigned_char*,int>
(uchar *param_1,uchar *param_2,uchar *param_3,int param_4,int param_5)
{
byte bVar1;
int iVar2;
int iVar3;
byte *pbVar4;
byte *pbVar5;
byte *pbVar6;
uint in_stack_ffffffd0;
int local_24;
uint local_20;
if ((param_4 != 0) && (param_5 != 0)) {
if (param_4 + param_5 != 2) {
if (param_4 <= param_5) goto LAB_00143a90;
do {
local_20 = param_4 / 2;
pbVar4 = param_1 + local_20;
pbVar6 = param_2;
for (local_24 = (int)param_3 - (int)param_2; 0 < local_24;
local_24 = (local_24 - iVar2) + -1) {
pbVar5 = pbVar6 + (local_24 >> 1);
bVar1 = *pbVar5;
iVar3 = local_24 >> 1;
while (iVar2 = iVar3, *pbVar4 <= bVar1) {
if (iVar2 == 0) goto LAB_001439dd;
pbVar5 = pbVar6 + (iVar2 >> 1);
iVar3 = iVar2 >> 1;
local_24 = iVar2;
bVar1 = *pbVar5;
}
pbVar6 = pbVar5 + 1;
}
LAB_001439dd:
iVar3 = (int)pbVar6 - (int)param_2;
local_24 = iVar3;
while( true ) {
pbVar5 = pbVar4 + iVar3;
__rotate<unsigned_char*>(pbVar4,param_2,pbVar6,in_stack_ffffffd0 & 0xffffff00);
in_stack_ffffffd0 = local_20;
__merge_without_buffer<unsigned_char*,int>(param_1,pbVar4,pbVar5,local_20,local_24);
param_4 = param_4 - local_20;
param_5 = param_5 - local_24;
if (param_5 == 0) {
return;
}
if (param_4 == 0) {
return;
}
param_1 = pbVar5;
param_2 = pbVar6;
if (param_5 + param_4 == 2) goto LAB_00143a66;
if (param_5 < param_4) break;
LAB_00143a90:
local_24 = param_5 / 2;
pbVar6 = param_2 + local_24;
pbVar4 = param_1;
for (local_20 = (int)param_2 - (int)param_1; 0 < (int)local_20;
local_20 = (local_20 - iVar2) + -1) {
pbVar5 = pbVar4 + ((int)local_20 >> 1);
bVar1 = *pbVar5;
iVar3 = (int)local_20 >> 1;
while (iVar2 = iVar3, *pbVar6 < bVar1) {
if (iVar2 == 0) goto LAB_00143ae1;
pbVar5 = pbVar4 + (iVar2 >> 1);
iVar3 = iVar2 >> 1;
local_20 = iVar2;
bVar1 = *pbVar5;
}
pbVar4 = pbVar5 + 1;
}
LAB_00143ae1:
local_20 = (int)pbVar4 - (int)param_1;
iVar3 = (int)pbVar6 - (int)param_2;
}
} while( true );
}
LAB_00143a66:
bVar1 = *param_1;
if (*param_2 < bVar1) {
*param_1 = *param_2;
*param_2 = bVar1;
}
}
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
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.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.