L L4D2node

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 into addons/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.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)