L L4D2node

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 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)