std::__rotate<unsigned_char*>
0x001437e0 · 366 bytes · unknown
_ZSt8__rotateIPhEvT_S1_S1_St26random_access_iterator_tag
Decompiled
void (4 params)
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* void std::__rotate<unsigned char*>(unsigned char*, unsigned char*, unsigned char*,
std::random_access_iterator_tag) */
void std::__rotate<unsigned_char*>(undefined1 *param_1,undefined1 *param_2,undefined1 *param_3)
{
undefined1 uVar1;
undefined1 *puVar2;
size_t __n;
int iVar3;
int iVar4;
undefined1 *puVar5;
int iVar6;
undefined1 *puVar7;
int local_24;
if ((param_1 != param_2) && (param_3 != param_2)) {
iVar6 = (int)param_2 - (int)param_1;
local_24 = (int)param_3 - (int)param_1;
puVar2 = param_2;
if (iVar6 == local_24 - iVar6) {
do {
puVar5 = param_1 + 1;
uVar1 = *param_1;
*param_1 = *puVar2;
*puVar2 = uVar1;
puVar2 = puVar2 + 1;
param_1 = puVar5;
} while (puVar5 != param_2);
return;
}
iVar3 = local_24 - iVar6;
if (iVar3 <= iVar6) goto LAB_0014386a;
while( true ) {
iVar4 = iVar6;
if (iVar4 == 1) {
uVar1 = *param_1;
if (param_1 + (local_24 - (int)(param_1 + 1)) != (undefined1 *)0x0) {
memmove(param_1,param_1 + 1,(size_t)(param_1 + (local_24 - (int)(param_1 + 1))));
}
param_1[local_24 + -1] = uVar1;
return;
}
if (0 < iVar3) {
iVar6 = 0;
do {
uVar1 = param_1[iVar6];
param_1[iVar6] = param_1[iVar6 + iVar4];
param_1[iVar6 + iVar4] = uVar1;
iVar6 = iVar6 + 1;
} while (iVar6 != iVar3);
param_1 = param_1 + iVar6;
}
if (local_24 % iVar4 == 0) break;
iVar6 = iVar4 - local_24 % iVar4;
while (iVar3 = iVar4 - iVar6, local_24 = iVar4, iVar3 <= iVar6) {
LAB_0014386a:
iVar4 = iVar3;
if (iVar4 == 1) {
uVar1 = param_1[local_24 + -1];
__n = (int)(param_1 + local_24 + -1) - (int)param_1;
if (__n == 0) {
*param_1 = uVar1;
}
else {
memmove(param_1 + (local_24 - __n),param_1,__n);
*param_1 = uVar1;
}
return;
}
puVar2 = param_1 + local_24;
param_1 = puVar2 + -iVar4;
if (0 < iVar6) {
puVar7 = puVar2 + -iVar6;
puVar5 = param_1;
do {
puVar5 = puVar5 + -1;
puVar2 = puVar2 + -1;
uVar1 = *puVar5;
*puVar5 = *puVar2;
*puVar2 = uVar1;
} while (puVar2 != puVar7);
param_1 = param_1 + -iVar6;
}
iVar6 = local_24 % iVar4;
if (iVar6 == 0) {
return;
}
}
}
}
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.