请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码
要求如下:
1.保持所有原始功能不变
2.提高执行效率,降低计算复杂度
3.已经给定的结构体名字和元素不要更改,详细的中文注释
4.自动添加中文注释说明功能逻辑
5.不使用 auto,使用显式 for 循环
6.结构体采用32位定义
7.不要使用小函数,保持原始的函数定义
8.严格保持protobuf字段映射关系
特别注意:
1.函数中有关位操作不变,函数间的位操作一致, 详细注释位操作
2.函数中的 HDDMXng::BelUsageDef::BelUsageDef 映射为
message BelUsageDef
{
optional uint32 numhiddencfgs = 1;
optional uint32 numcfgs = 2;
optional uint32 numattribs = 3;
}
3.采用 google::protobuf::Descriptor 和 google::protobuf::Reflection 进行编程
4.不要使用如 HIBYTE 等宏定义
5.将函数中的 _BYTE usagedef_msg[16] 映射为 HDDMXng::BelUsageDef usagedef_msg
6.将函数中的 hddmBelUsageAttribVec、hddmBelUsageAttribVec_End、 hddmBelUsageAttribVec_Cap 映射为 std::vector<HDDMBelUsageAttrib *> hddmBelUsageAttribVec
void HDDMBelUsageDef::HDDMBelUsageDef(HDDMBelUsageDef *this)
{
int v1; // eax
this->usagedef_code = 0;
v1 = *(_DWORD *)&this->usagedef_code;
this->hddmBelUsageAttribVec = 0;
this->hddmBelUsageAttribVec_Cap = 0;
this->ppHddmBelUsageAttrib = 0;
*(_DWORD *)&this->char28 = 0;
this->qword30 = 0;
this->qword48 = 0;
*(_DWORD *)&this->usagedef_code = v1 & 0xFFF000FF;
this->? = 0;
this->qword50 = 0;
this->qword38 = &this->char28;
this->qword40 = &this->char28;
}
void HDDMBelUsageDef::addattrib(HDDMBelUsageDef *this)
{
HDDMBelUsageAttrib *v1; // rbp
HDDMBelUsageAttrib **hddmBelUsageAttribVec_Cap; // rax
bool v3; // zf
__int64 hddmBelUsageAttribVec_Cap_1; // rdx
__int64 v5[5]; // [rsp+0h] [rbp-28h] BYREF
v1 = (HDDMBelUsageAttrib *)operator new(0x50u);
HDDMBelUsageAttrib::HDDMBelUsageAttrib(v1);
hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap;
v3 = hddmBelUsageAttribVec_Cap == this->ppHddmBelUsageAttrib;
v5[0] = (__int64)v1;
if ( v3 )
{
std::vector<HDDMBelUsageAttrib *>::_M_emplace_back_aux<HDDMBelUsageAttrib * const&>(
&this->hddmBelUsageAttribVec,
v5);
}
else
{
if ( hddmBelUsageAttribVec_Cap )
{
*hddmBelUsageAttribVec_Cap = v1;
hddmBelUsageAttribVec_Cap_1 = this->hddmBelUsageAttribVec_Cap;
}
else
{
hddmBelUsageAttribVec_Cap_1 = 0;
}
this->hddmBelUsageAttribVec_Cap = hddmBelUsageAttribVec_Cap_1 + 8;
}
}
HDDMBelUsageAttrib * HDDMBelUsageDef::getAttrib(HDDMBelUsageDef *this, const std::string *stdString)
{
__int64 p_char28; // rax
HDDMBelUsageAttrib *result; // rax
__int64 v4; // rdi
int v5; // edx
HDDMBelUsageAttrib *v6; // [rsp+8h] [rbp-40h]
char v7; // [rsp+1Fh] [rbp-29h] BYREF
_QWORD v8[5]; // [rsp+20h] [rbp-28h] BYREF
std::string::string(v8, *(_QWORD *)stdString, &v7);
p_char28 = std::_Rb_tree<std::string,std::pair<std::string const,unsigned short>,std::_Select1st<std::pair<std::string const,unsigned short>>,std::less<std::string>,std::allocator<std::pair<std::string const,unsigned short>>>::find(
&this->gap20,
v8);
if ( (_QWORD *)p_char28 == &this->char28 )
result = 0;
else
result = *(HDDMBelUsageAttrib **)(*(_QWORD *)&this->hddmBelUsageAttribVec
+ 8LL * *(unsigned __int16 *)(p_char28 + 40));
v4 = v8[0] - 24LL;
if ( (_UNKNOWN *)(v8[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v5 = _InterlockedExchangeAdd((volatile signed __int32 *)(v8[0] - 8LL), 0xFFFFFFFF);
}
else
{
v5 = *(_DWORD *)(v8[0] - 8LL);
*(_DWORD *)(v8[0] - 8LL) = v5 - 1;
}
if ( v5 <= 0 )
{
v6 = result;
std::string::_Rep::_M_destroy(v4, &v7);
return v6;
}
}
return result;
}
将 _QWORD *pHddmBelUsageAttribVec 映射为 映射为 std::vector<HDDMBelUsageAttrib *> pHddmBelUsageAttribVec
HDDMBelUsageAttrib * HDDMBelUsageDef::getAttribs(HDDMBelUsageDef *this, _QWORD *pHddmBelUsageAttribVec)
{
HDDMBelUsageAttrib *hddmBelUsageAttribVec_Cap_2; // rsi
HDDMBelUsageAttrib *hddmBelUsageAttribVec_Cap; // rdi
unsigned __int64 v6; // rdx
unsigned __int64 v7; // rax
HDDMBelUsageAttrib *hddmBelUsageAttribVec_Cap_1; // rax
__int64 v9; // r8
char *v10; // rdx
hddmBelUsageAttribVec_Cap_2 = *(HDDMBelUsageAttrib **)&this->hddmBelUsageAttribVec;
hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap;
v6 = ((char *)hddmBelUsageAttribVec_Cap - (char *)hddmBelUsageAttribVec_Cap_2) >> 3;
v7 = (__int64)(pHddmBelUsageAttribVec[1] - *pHddmBelUsageAttribVec) >> 3;
if ( v6 > v7 )
{
std::vector<HDDMBelUsageAttrib *>::_M_default_append(pHddmBelUsageAttribVec, v6 - v7);
hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap;
hddmBelUsageAttribVec_Cap_2 = *(HDDMBelUsageAttrib **)&this->hddmBelUsageAttribVec;
}
else if ( v6 < v7 )
{
pHddmBelUsageAttribVec[1] = *pHddmBelUsageAttribVec + 8 * v6;
hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap;
hddmBelUsageAttribVec_Cap_2 = *(HDDMBelUsageAttrib **)&this->hddmBelUsageAttribVec;
}
hddmBelUsageAttribVec_Cap_1 = hddmBelUsageAttribVec_Cap_2;
if ( hddmBelUsageAttribVec_Cap_2 != hddmBelUsageAttribVec_Cap )
{
do
{
v9 = *(_QWORD *)&hddmBelUsageAttribVec_Cap_1->attrib_flags;
v10 = (char *)((char *)hddmBelUsageAttribVec_Cap_1 - (char *)hddmBelUsageAttribVec_Cap_2);
hddmBelUsageAttribVec_Cap_1 = (HDDMBelUsageAttrib *)((char *)hddmBelUsageAttribVec_Cap_1 + 8);
*(_QWORD *)&v10[*pHddmBelUsageAttribVec] = v9;
}
while ( (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap != hddmBelUsageAttribVec_Cap_1 );
}
return hddmBelUsageAttribVec_Cap_1;
}
void HDDMBelUsageDef::print(HDDMBelUsageDef *this, std::ostream *stream, const std::string *filename)
{
std::ostream *v5; // rbp
__int64 v6; // rax
_BYTE *v7; // r12
char v8; // al
std::ostream *v9; // rax
HDDMBelUsageAttrib **hddmBelUsageAttribVec_Cap_1; // rbp
HDDMBelUsageAttrib *v11; // rdi
HDDMBelUsageAttrib **hddmBelUsageAttribVec_Cap; // r12
__int64 v13; // rax
_BYTE *v14; // r12
char v15; // al
std::ostream *v16; // rax
__int64 v17; // rax
_BYTE *v18; // rbp
char v19; // al
std::ostream *v20; // rax
if ( (__int64)(this->hddmBelUsageAttribVec_Cap - *(_QWORD *)&this->hddmBelUsageAttribVec) >> 3 )
{
v5 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>(
stream,
*(_QWORD *)filename,
*(_QWORD *)(*(_QWORD *)filename - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v5, "ATTRIBUTES:", 11);
v6 = *(_QWORD *)(*(_QWORD *)v5 - 24LL);
v7 = *(_BYTE **)((char *)v5 + v6 + 240);
if ( !v7 )
LABEL_21:
std::__throw_bad_cast();
if ( v7[56] )
{
v8 = v7[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v5 + v6 + 240));
v8 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v7 + 48LL))(v7, 10);
}
v9 = (std::ostream *)std::ostream::put(v5, v8);
std::ostream::flush(v9);
hddmBelUsageAttribVec_Cap_1 = *(HDDMBelUsageAttrib ***)&this->hddmBelUsageAttribVec;
while ( (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap != hddmBelUsageAttribVec_Cap_1 )
{
while ( 1 )
{
v11 = *hddmBelUsageAttribVec_Cap_1++;
HDDMBelUsageAttrib::print(v11, stream, filename);
hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap;
if ( hddmBelUsageAttribVec_Cap == hddmBelUsageAttribVec_Cap_1 )
break;
std::__ostream_insert<char,std::char_traits<char>>(stream, ",", 1);
v13 = *(_QWORD *)(*(_QWORD *)stream - 24LL);
v14 = *(_BYTE **)((char *)stream + v13 + 240);
if ( !v14 )
goto LABEL_21;
if ( v14[56] )
{
v15 = v14[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)stream + v13 + 240));
v15 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v14 + 48LL))(v14, 10);
}
v16 = (std::ostream *)std::ostream::put(stream, v15);
std::ostream::flush(v16);
if ( (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap == hddmBelUsageAttribVec_Cap_1 )
return;
}
std::__ostream_insert<char,std::char_traits<char>>(stream, ";", 1);
v17 = *(_QWORD *)(*(_QWORD *)stream - 24LL);
v18 = *(_BYTE **)((char *)stream + v17 + 240);
if ( !v18 )
goto LABEL_21;
if ( v18[56] )
{
v19 = v18[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)stream + v17 + 240));
v19 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v18 + 48LL))(v18, 10);
}
hddmBelUsageAttribVec_Cap_1 = hddmBelUsageAttribVec_Cap;
v20 = (std::ostream *)std::ostream::put(stream, v19);
std::ostream::flush(v20);
}
}
}
void __fastcall HDDMBelUsageDef::readme_pb(HDDMBelUsageDef *this, std::istream *stream, HDDMDevice *hddmDevice)
{
google::protobuf::Message *v4; // rdx
unsigned int byte0; // eax
__int16 v6; // dx
int v7; // ebx
HDDMBelUsageAttrib *v8; // rbx
HDDMBelUsageAttrib **hddmBelUsageAttribVec_Cap; // rax
bool v10; // zf
__int64 qword10_1; // rax
HDDMBelUsageAttrib *v12; // rdi
_QWORD *qword30; // r15
std::string *s2; // rbx
_QWORD *p_char28_1; // rbp
size_t n_3; // r14
int n0x7FFFFFFF_1; // eax
_QWORD *s1; // rdi
size_t n_2; // r13
size_t n; // rdx
__int64 n0x7FFFFFFF; // r13
_QWORD *s2_1; // rsi
size_t n_4; // r15
size_t n_1; // rdx
int v25; // eax
__int64 p_char28_2; // rax
__int16 v27; // cx
_QWORD *p_char28; // [rsp+0h] [rbp-E8h]
HDDMBelUsageAttrib *v29; // [rsp+8h] [rbp-E0h]
int index; // [rsp+18h] [rbp-D0h]
int v32; // [rsp+1Ch] [rbp-CCh]
_QWORD *p_qword8; // [rsp+38h] [rbp-B0h]
char v35; // [rsp+5Fh] [rbp-89h] BYREF
HDDMBelUsageAttrib *pHddmBelUsageAttrib; // [rsp+60h] [rbp-88h] BYREF
std::string **p_attrib_name; // [rsp+70h] [rbp-78h] BYREF
_BYTE usagedef_msg[16]; // [rsp+80h] [rbp-68h] BYREF
__int16 v39; // [rsp+90h] [rbp-58h]
__int16 v40; // [rsp+94h] [rbp-54h]
int v41; // [rsp+98h] [rbp-50h]
if ( HDDMDeviceDump::useXngMarks )
std::istream::read(stream, HDDMDeviceDump::markBuffer, 11);
HDDMXng::BelUsageDef::BelUsageDef((HDDMXng::BelUsageDef *)usagedef_msg);
HDDMDevice::readMessage((HDDMDevice *)stream, (std::istream *)usagedef_msg, v4);
p_qword8 = &this->hddmBelUsageAttribVec;
byte0 = ((v39 & 0xFFF) << 8) | this->usagedef_code & 0xFFF000FF;
v6 = v40;
this->usagedef_code = byte0;
HIWORD(this->usagedef_code) = (16 * v6) | BYTE2(byte0) & 0xF;
v7 = v41;
v32 = v41;
std::vector<HDDMBelUsageAttrib *>::reserve(&this->hddmBelUsageAttribVec, v41);
if ( v7 <= 0 )
goto LABEL_30;
index = 0;
p_char28 = &this->char28;
do
{
v8 = (HDDMBelUsageAttrib *)operator new(0x50u);
HDDMBelUsageAttrib::HDDMBelUsageAttrib(v8);
hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap;
v10 = hddmBelUsageAttribVec_Cap == this->ppHddmBelUsageAttrib;
pHddmBelUsageAttrib = v8;
if ( v10 )
{
std::vector<HDDMBelUsageAttrib *>::_M_emplace_back_aux<HDDMBelUsageAttrib * const&>(
p_qword8,
&pHddmBelUsageAttrib);
v12 = pHddmBelUsageAttrib;
}
else
{
if ( hddmBelUsageAttribVec_Cap )
{
*hddmBelUsageAttribVec_Cap = v8;
qword10_1 = this->hddmBelUsageAttribVec_Cap;
v12 = pHddmBelUsageAttrib;
}
else
{
v12 = v8;
qword10_1 = 0;
}
this->hddmBelUsageAttribVec_Cap = qword10_1 + 8;
}
HDDMBelUsageAttrib::readme_pb(v12, stream, hddmDevice);
pHddmBelUsageAttrib->attrib_flags = ((index & 0xFFF) << 12) | pHddmBelUsageAttrib->attrib_flags & 0xFF000FFF;
qword30 = (_QWORD *)this->qword30;
v29 = pHddmBelUsageAttrib;
if ( !qword30 )
{
p_char28_1 = p_char28;
goto LABEL_32;
}
s2 = pHddmBelUsageAttrib->attrib_name;
p_char28_1 = p_char28;
n_3 = *((_QWORD *)s2 - 3);
do
{
while ( 1 )
{
s1 = (_QWORD *)qword30[4];
n_2 = *(s1 - 3);
n = n_2;
if ( n_3 <= n_2 )
n = n_3;
n0x7FFFFFFF_1 = memcmp(s1, s2, n);
if ( !n0x7FFFFFFF_1 )
break;
LABEL_12:
if ( n0x7FFFFFFF_1 < 0 )
goto LABEL_19;
LABEL_13:
p_char28_1 = qword30;
qword30 = (_QWORD *)qword30[2];
if ( !qword30 )
goto LABEL_20;
}
n0x7FFFFFFF = n_2 - n_3;
if ( n0x7FFFFFFF > 0x7FFFFFFF )
goto LABEL_13;
if ( n0x7FFFFFFF >= (__int64)0xFFFFFFFF80000000LL )
{
n0x7FFFFFFF_1 = n0x7FFFFFFF;
goto LABEL_12;
}
LABEL_19:
qword30 = (_QWORD *)qword30[3];
}
while ( qword30 );
LABEL_20:
if ( p_char28 == p_char28_1 )
goto LABEL_32;
s2_1 = (_QWORD *)p_char28_1[4];
n_4 = *(s2_1 - 3);
n_1 = n_4;
if ( n_3 <= n_4 )
n_1 = n_3;
v25 = memcmp(s2, s2_1, n_1);
if ( v25 )
{
LABEL_27:
if ( v25 < 0 )
goto LABEL_32;
LABEL_28:
p_char28_2 = (__int64)p_char28_1;
goto LABEL_29;
}
if ( (__int64)(n_3 - n_4) > 0x7FFFFFFF )
goto LABEL_28;
if ( (__int64)(n_3 - n_4) >= (__int64)0xFFFFFFFF80000000LL )
{
v25 = n_3 - n_4;
goto LABEL_27;
}
LABEL_32:
p_attrib_name = &v29->attrib_name;
p_char28_2 = std::_Rb_tree<std::string,std::pair<std::string const,unsigned short>,std::_Select1st<std::pair<std::string const,unsigned short>>,std::less<std::string>,std::allocator<std::pair<std::string const,unsigned short>>>::_M_emplace_hint_unique<std::piecewise_construct_t const&,std::tuple<std::string const&>,std::tuple<>>(
&this->gap20,
p_char28_1,
&unk_7B5CA99,
&p_attrib_name,
&v35);
LABEL_29:
v27 = index++;
*(_WORD *)(p_char28_2 + 40) = v27;
}
while ( v32 != index );
LABEL_30:
HDDMXng::BelUsageDef::~BelUsageDef((HDDMXng::BelUsageDef *)usagedef_msg);
}
__int64 __fastcall HDDMBelUsageDef::setrecursivebelid(HDDMBelUsageDef *this, unsigned __int16 nId)
{
int v2; // esi
HDDMBelUsageAttrib *hddmBelUsageAttribVec_Cap; // rdx
int i; // esi
HDDMBelUsageAttrib *HDDMBelUsageAttrib; // rcx
__int64 result; // rax
LOWORD(v2) = nId & 0xFFF;
hddmBelUsageAttribVec_Cap = *(HDDMBelUsageAttrib **)&this->hddmBelUsageAttribVec;
for ( i = 16 * v2;
hddmBelUsageAttribVec_Cap != (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap;
HIWORD(HDDMBelUsageAttrib->attrib_type) = i | HIWORD(HDDMBelUsageAttrib->attrib_type) & 0xF )
{
HDDMBelUsageAttrib = *(HDDMBelUsageAttrib **)&hddmBelUsageAttribVec_Cap->attrib_flags;
hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib *)((char *)hddmBelUsageAttribVec_Cap + 8);
result = i | HIWORD(HDDMBelUsageAttrib->attrib_type) & 0xFu;
}
return result;
}
__int64 __fastcall HDDMBelUsageDef::setrecursivedeviceid(HDDMBelUsageDef *this, unsigned __int16 nId)
{
__int64 *hddmBelUsageAttribVec_Cap; // rdx
int i; // esi
HDDMBelUsageAttrib *HDDMBelUsageAttrib; // rcx
__int64 result; // rax
hddmBelUsageAttribVec_Cap = *(__int64 **)&this->hddmBelUsageAttribVec;
for ( i = nId & 0xF;
hddmBelUsageAttribVec_Cap != (__int64 *)this->hddmBelUsageAttribVec_Cap;
BYTE2(HDDMBelUsageAttrib->attrib_type) = i | BYTE2(HDDMBelUsageAttrib->attrib_type) & 0xF0 )
{
HDDMBelUsageAttrib = (HDDMBelUsageAttrib *)*hddmBelUsageAttribVec_Cap++;
result = i | BYTE2(HDDMBelUsageAttrib->attrib_type) & 0xF0u;
}
return result;
}
void __fastcall HDDMBelUsageDef::writeme_pb(HDDMBelUsageDef *this, std::ostream *stream)
{
int v2; // eax
HDDMBelUsageAttrib **ppHDDMBelUsageAttrib; // rdx
unsigned __int64 v4; // rax
unsigned __int64 v5; // rbx
_BYTE usagedef_msg[8]; // [rsp+0h] [rbp-58h] BYREF
int v7; // [rsp+10h] [rbp-48h]
int v8; // [rsp+14h] [rbp-44h]
int v9; // [rsp+18h] [rbp-40h]
unsigned int v10; // [rsp+20h] [rbp-38h]
if ( HDDMDeviceDump::useXngMarks )
std::ostream::write(stream, "BELUSAGEDEF", 11);
HDDMXng::BelUsageDef::BelUsageDef((HDDMXng::BelUsageDef *)usagedef_msg);
v2 = (this->usagedef_code >> 8) & 0xFFF;
v10 |= 7u;
v7 = v2;
v8 = HIWORD(this->usagedef_code) >> 4;
v9 = (__int64)(this->hddmBelUsageAttribVec_Cap - *(_QWORD *)&this->hddmBelUsageAttribVec) >> 3;
HDDMDevice::writeMessage((HDDMDevice *)stream, (std::ostream *)usagedef_msg, (const google::protobuf::Message *)v10);
ppHDDMBelUsageAttrib = *(HDDMBelUsageAttrib ***)&this->hddmBelUsageAttribVec;
v4 = 0;
v5 = 1;
if ( (__int64)(this->hddmBelUsageAttribVec_Cap - (_QWORD)ppHDDMBelUsageAttrib) >> 3 )
{
while ( 1 )
{
HDDMBelUsageAttrib::writeme_pb(ppHDDMBelUsageAttrib[v4], stream);
ppHDDMBelUsageAttrib = *(HDDMBelUsageAttrib ***)&this->hddmBelUsageAttribVec;
if ( v5 >= (__int64)(this->hddmBelUsageAttribVec_Cap - (_QWORD)ppHDDMBelUsageAttrib) >> 3 )
break;
v4 = v5++;
}
}
HDDMXng::BelUsageDef::~BelUsageDef((HDDMXng::BelUsageDef *)usagedef_msg);
}
void HDDMBelUsageDef::~HDDMBelUsageDef(HDDMBelUsageDef *this)
{
HDDMBelUsageAttrib **i_1; // rbx
HDDMBelUsageAttrib **i; // rax
HDDMBelUsageAttrib *v3; // rbp
void *v4; // rdi
i_1 = *(HDDMBelUsageAttrib ***)&this->hddmBelUsageAttribVec;
for ( i = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap; i_1 != i; ++i_1 )
{
v3 = *i_1;
if ( *i_1 )
{
HDDMBelUsageAttrib::~HDDMBelUsageAttrib(*i_1);
operator delete(v3);
i = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap;
}
}
this->qword50 = 0;
sub_21742B0(this);
std::_Rb_tree<std::string,std::pair<std::string const,unsigned short>,std::_Select1st<std::pair<std::string const,unsigned short>>,std::less<std::string>,std::allocator<std::pair<std::string const,unsigned short>>>::_M_erase(
&this->gap20,
this->qword30);
v4 = *(void **)&this->hddmBelUsageAttribVec;
if ( v4 )
operator delete(v4);
}