CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>::Unlink
0x008b0270 · 2981 bytes · __thiscall
_ZN10CUtlRBTreeIN7CUtlMapI7CHandleI11CBaseEntityE22scavenge_cache_entry_thE6Node_tEhNS5_8CKeyLessE10CUtlMemoryI15UtlRBTreeNode_tIS6_hEhEE6UnlinkEh
Decompiled
undefined (2 params)
/* CUtlRBTree<CUtlMap<CHandle<CBaseEntity>, scavenge_cache_entry_t, unsigned char>::Node_t, unsigned
char, CUtlMap<CHandle<CBaseEntity>, scavenge_cache_entry_t, unsigned char>::CKeyLess,
CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>, scavenge_cache_entry_t, unsigned
char>::Node_t, unsigned char>, unsigned char> >::Unlink(unsigned char) */
void __thiscall
CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
::Unlink(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*this,uchar param_1)
{
char cVar1;
int iVar2;
byte bVar3;
char *pcVar4;
CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*pCVar5;
undefined1 *puVar6;
uchar *puVar7;
byte *pbVar8;
CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
CVar9;
char cVar10;
uint uVar11;
int iVar12;
bool bVar13;
CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
local_29;
int local_24;
char local_20;
if (param_1 == 0xff) {
return;
}
local_20 = Links(unsigned_char)::s_Sentinel;
if (Links(unsigned_char)::s_Sentinel == '\0') {
iVar12 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar12 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
local_20 = Links(unsigned_char)::s_Sentinel;
iVar12 = (uint)param_1 * 0x10;
pcVar4 = (char *)(*(int *)(this + 4) + iVar12);
if (*pcVar4 != -1) {
if (Links(unsigned_char)::s_Sentinel != '\0') goto LAB_008b044d;
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
bVar3 = *(byte *)(*(int *)(this + 4) + iVar12 + 1);
uVar11 = (uint)bVar3;
local_20 = Links(unsigned_char)::s_Sentinel;
if (bVar3 != 0xff) {
if (Links(unsigned_char)::s_Sentinel == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
uVar11 = (uint)*(byte *)(*(int *)(this + 4) + 1 + iVar12);
local_20 = Links(unsigned_char)::s_Sentinel;
}
goto LAB_008b08a5;
}
}
LAB_008b02b8:
uVar11 = (uint)param_1;
Links(unsigned_char)::s_Sentinel = local_20;
local_24 = iVar12;
}
else {
iVar12 = (uint)param_1 * 0x10;
pcVar4 = (char *)(*(int *)(this + 4) + iVar12);
if (*pcVar4 == -1) goto LAB_008b02b8;
LAB_008b044d:
uVar11 = (uint)(byte)pcVar4[1];
local_20 = Links(unsigned_char)::s_Sentinel;
if (pcVar4[1] == 0xff) goto LAB_008b02b8;
LAB_008b08a5:
while( true ) {
cVar10 = (char)uVar11;
if ((local_20 == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel),
local_20 = Links(unsigned_char)::s_Sentinel, iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
local_20 = Links(unsigned_char)::s_Sentinel;
}
cVar1 = Links(unsigned_char)::s_Sentinel;
if (cVar10 != -1) {
cVar1 = *(char *)(uVar11 * 0x10 + *(int *)(this + 4));
}
if (cVar1 == -1) break;
if (local_20 == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
local_20 = Links(unsigned_char)::s_Sentinel;
if (cVar10 != -1) goto LAB_008b089c;
LAB_008b0904:
pbVar8 = (byte *)&Links(unsigned_char)::s_Sentinel;
}
else {
if (cVar10 == -1) goto LAB_008b0904;
LAB_008b089c:
pbVar8 = (byte *)(uVar11 * 0x10 + *(int *)(this + 4));
}
uVar11 = (uint)*pbVar8;
}
local_24 = uVar11 << 4;
}
CVar9 = SUB41(uVar11,0);
if (local_20 == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
local_20 = Links(unsigned_char)::s_Sentinel;
if (CVar9 != (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) goto LAB_008b02d2;
LAB_008b0627:
if (Links(unsigned_char)::s_Sentinel != -1) goto LAB_008b02e1;
LAB_008b0638:
if (local_20 == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
local_20 = Links(unsigned_char)::s_Sentinel;
}
if (CVar9 == (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
puVar6 = &Links(unsigned_char)::s_Sentinel;
}
else {
puVar6 = (undefined1 *)(local_24 + *(int *)(this + 4));
}
local_29 = *(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)(puVar6 + 1);
}
else {
if (CVar9 == (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) goto LAB_008b0627;
LAB_008b02d2:
if (*(char *)(local_24 + *(int *)(this + 4)) == -1) goto LAB_008b0638;
LAB_008b02e1:
if (local_20 == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
local_20 = Links(unsigned_char)::s_Sentinel;
}
if (CVar9 == (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
pCVar5 = (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)&Links(unsigned_char)::s_Sentinel;
}
else {
pCVar5 = (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)(local_24 + *(int *)(this + 4));
}
local_29 = *pCVar5;
}
if (local_29 !=
(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
if (local_20 == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
local_20 = Links(unsigned_char)::s_Sentinel;
}
puVar6 = &Links(unsigned_char)::s_Sentinel;
if (CVar9 != (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
puVar6 = (undefined1 *)(*(int *)(this + 4) + local_24);
}
*(undefined1 *)(*(int *)(this + 4) + 2 + (uint)(byte)local_29 * 0x10) = puVar6[2];
}
if (CVar9 == this[0x10]) {
this[0x10] = local_29;
}
else {
if (local_20 == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
local_20 = Links(unsigned_char)::s_Sentinel;
}
if (CVar9 == (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
puVar6 = &Links(unsigned_char)::s_Sentinel;
}
else {
puVar6 = (undefined1 *)(local_24 + *(int *)(this + 4));
}
bVar3 = puVar6[2];
if (local_20 == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 == 0) {
local_20 = Links(unsigned_char)::s_Sentinel;
}
else {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
local_20 = Links(unsigned_char)::s_Sentinel;
}
}
if (bVar3 == 0xff) {
pCVar5 = (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)&Links(unsigned_char)::s_Sentinel;
}
else {
pCVar5 = (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)((uint)bVar3 * 0x10 + *(int *)(this + 4));
}
if (CVar9 == *pCVar5) {
if ((local_20 == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel), iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
puVar6 = &Links(unsigned_char)::s_Sentinel;
if (CVar9 != (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
puVar6 = (undefined1 *)(local_24 + *(int *)(this + 4));
}
*(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)(*(int *)(this + 4) + (uint)(byte)puVar6[2] * 0x10) = local_29;
local_20 = Links(unsigned_char)::s_Sentinel;
}
else {
if (local_20 == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
local_20 = Links(unsigned_char)::s_Sentinel;
}
puVar6 = &Links(unsigned_char)::s_Sentinel;
if (CVar9 != (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
puVar6 = (undefined1 *)(*(int *)(this + 4) + local_24);
}
*(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)(*(int *)(this + 4) + 1 + (uint)(byte)puVar6[2] * 0x10) = local_29;
}
}
if ((local_20 == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel), iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
cVar10 = DAT_00f5e1e3;
if ((CVar9 != (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) &&
(cVar10 = *(char *)(*(int *)(this + 4) + 3 + local_24),
CVar9 == (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)param_1)) goto LAB_008b03dc;
if (Links(unsigned_char)::s_Sentinel == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
bVar13 = Links(unsigned_char)::s_Sentinel != '\0';
*(undefined1 *)(*(int *)(this + 4) + 2 + local_24) =
*(undefined1 *)(*(int *)(this + 4) + 2 + iVar12);
if (bVar13) goto LAB_008b048e;
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
bVar13 = Links(unsigned_char)::s_Sentinel == '\0';
*(undefined1 *)(*(int *)(this + 4) + 1 + local_24) =
*(undefined1 *)(*(int *)(this + 4) + 1 + iVar12);
if ((bVar13) && (iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel), iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
}
else {
*(undefined1 *)(*(int *)(this + 4) + 2 + local_24) =
*(undefined1 *)(*(int *)(this + 4) + 2 + iVar12);
LAB_008b048e:
*(undefined1 *)(*(int *)(this + 4) + 1 + local_24) =
*(undefined1 *)(*(int *)(this + 4) + 1 + iVar12);
}
*(undefined1 *)(*(int *)(this + 4) + local_24) = *(undefined1 *)(*(int *)(this + 4) + iVar12);
if ((CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)param_1 == this[0x10]) {
this[0x10] = CVar9;
cVar1 = Links(unsigned_char)::s_Sentinel;
}
else {
if (Links(unsigned_char)::s_Sentinel == '\0') {
iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel);
if (iVar2 != 0) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
bVar3 = *(byte *)(*(int *)(this + 4) + 2 + iVar12);
if ((Links(unsigned_char)::s_Sentinel == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel), iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
}
else {
bVar3 = *(byte *)(*(int *)(this + 4) + 2 + iVar12);
}
if (bVar3 == 0xff) {
puVar7 = (uchar *)&Links(unsigned_char)::s_Sentinel;
}
else {
puVar7 = (uchar *)((uint)bVar3 * 0x10 + *(int *)(this + 4));
}
if (param_1 == *puVar7) {
if ((Links(unsigned_char)::s_Sentinel == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel), iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
*(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)(*(int *)(this + 4) + (uint)*(byte *)(*(int *)(this + 4) + 2 + iVar12) * 0x10) = CVar9;
cVar1 = Links(unsigned_char)::s_Sentinel;
}
else {
if ((Links(unsigned_char)::s_Sentinel == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel), iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
cVar1 = Links(unsigned_char)::s_Sentinel;
*(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)(*(int *)(this + 4) + 1 + (uint)*(byte *)(*(int *)(this + 4) + 2 + iVar12) * 0x10) = CVar9
;
}
}
if ((cVar1 == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel),
cVar1 = Links(unsigned_char)::s_Sentinel, iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
cVar1 = Links(unsigned_char)::s_Sentinel;
}
if (CVar9 == (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
pcVar4 = &Links(unsigned_char)::s_Sentinel;
}
else {
pcVar4 = (char *)(local_24 + *(int *)(this + 4));
}
if (*pcVar4 != -1) {
if ((cVar1 == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel),
cVar1 = Links(unsigned_char)::s_Sentinel, iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
cVar1 = Links(unsigned_char)::s_Sentinel;
}
pbVar8 = (byte *)&Links(unsigned_char)::s_Sentinel;
if (CVar9 != (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
pbVar8 = (byte *)(local_24 + *(int *)(this + 4));
}
*(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)(*(int *)(this + 4) + 2 + (uint)*pbVar8 * 0x10) = CVar9;
}
if ((cVar1 == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel),
cVar1 = Links(unsigned_char)::s_Sentinel, iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
cVar1 = Links(unsigned_char)::s_Sentinel;
}
if (CVar9 == (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
puVar6 = &Links(unsigned_char)::s_Sentinel;
}
else {
puVar6 = (undefined1 *)(local_24 + *(int *)(this + 4));
}
if (puVar6[1] != -1) {
if ((cVar1 == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel),
cVar1 = Links(unsigned_char)::s_Sentinel, iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
cVar1 = Links(unsigned_char)::s_Sentinel;
}
puVar6 = &Links(unsigned_char)::s_Sentinel;
if (CVar9 != (CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) {
puVar6 = (undefined1 *)(local_24 + *(int *)(this + 4));
}
*(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
*)(*(int *)(this + 4) + 2 + (uint)(byte)puVar6[1] * 0x10) = CVar9;
}
if ((cVar1 == '\0') &&
(iVar2 = __cxa_guard_acquire(&Links(unsigned_char)::s_Sentinel), iVar2 != 0)) {
Links(unsigned_char)::s_Sentinel = -1;
DAT_00f5e1e1 = 0xff;
DAT_00f5e1e2 = 0xff;
__cxa_guard_release(&Links(unsigned_char)::s_Sentinel);
}
*(undefined1 *)(*(int *)(this + 4) + 3 + local_24) =
*(undefined1 *)(*(int *)(this + 4) + 3 + iVar12);
LAB_008b03dc:
if ((local_29 !=
(CUtlRBTree<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char,CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<CHandle<CBaseEntity>,scavenge_cache_entry_t,unsigned_char>::Node_t,unsigned_char>,unsigned_char>>
)0xff) && (cVar10 == '\x01')) {
RemoveRebalance(this,(uchar)local_29);
return;
}
return;
}
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.