请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码
特别注意:
1.保持所有原始功能不变
2.提高执行效率,降低计算复杂度
3.已经给定的结构体名字和元素不要更改,详细的中文注释
4.自动添加中文注释说明功能逻辑
5.不使用 auto,使用显式 for 循环
6.结构体采用32位定义
7.不要使用小函数,保持原始的函数定义
函数中的 HDDMXng::Chip::Chip 映射为
message Chip
{
optional uint32 numsites = 1;
optional uint32 numrows = 2;
optional uint32 numcols = 3;
optional uint32 rpmgridx = 4;
optional uint32 rpmgridy = 5;
optional sint32 extremaxmin = 6;
optional sint32 extremaxmax = 7;
optional sint32 extremaymin = 8;
optional sint32 extremaymax = 9;
optional string chip = 10;
optional string arch = 11;
}
将 _BYTE chip_msg[8] 映射为 HDDMXng::Chip chip_msg;
void __cdecl HDDMDevice::readchip_pb(HDDMDevice *this, HDDMChipDesc *hddmChipDesc)
{
HDDMChipType *v2; // eax
HDDMDevice *v3; // eax
int v4; // eax
int v5; // esi
HDDMChip *pHDDMChip; // ebp
char *dword214; // esi
int dword220; // ebp
int v9; // edi
void *v10; // esi
__int16 v11; // dx
__int16 v12; // dx
int hddmTileVec; // edi
unsigned int *v14; // esi
int v15; // edx
int v16; // ecx
int v17; // ecx
_DWORD *v18; // esi
int v19; // ebp
void *v20; // edi
int hddmSiteVec; // edi
int v22; // esi
int v23; // edx
int v24; // ecx
int v25; // ecx
_DWORD *v26; // esi
int v27; // ebp
void *v28; // edi
_BYTE *src; // ecx
size_t n; // ebp
int v31; // edi
unsigned int v32; // eax
unsigned int v33; // edi
char *v34; // edi
HDDMChip **dest; // edx
HDDMChip **v36; // eax
_DWORD *v37; // esi
void *dword210; // eax
int v39; // edi
int v40; // ebp
HDDMChipType *pHDDMChipType; // esi
_DWORD *v42; // eax
int v43; // eax
int v44; // edi
__int16 v45; // dx
int v46; // esi
void *v47; // [esp+4h] [ebp-218h]
const char *srca; // [esp+4h] [ebp-218h]
const char *srcb; // [esp+4h] [ebp-218h]
const char *srcc; // [esp+4h] [ebp-218h]
const char *srcd; // [esp+4h] [ebp-218h]
char *dword38; // [esp+1Ch] [ebp-200h]
int dword3C; // [esp+1Ch] [ebp-200h]
int dword40; // [esp+1Ch] [ebp-200h]
HDDMChip **v55; // [esp+1Ch] [ebp-200h]
HDDMChip **v56; // [esp+1Ch] [ebp-200h]
unsigned int i; // [esp+20h] [ebp-1FCh]
unsigned int j; // [esp+20h] [ebp-1FCh]
int v59; // [esp+24h] [ebp-1F8h]
int v60; // [esp+24h] [ebp-1F8h]
HDDMChip *hddmChip; // [esp+28h] [ebp-1F4h]
bool v62; // [esp+2Fh] [ebp-1EDh]
int v63; // [esp+34h] [ebp-1E8h]
int v64; // [esp+34h] [ebp-1E8h]
int NumTiles; // [esp+38h] [ebp-1E4h]
int NumSites; // [esp+38h] [ebp-1E4h]
int v67; // [esp+3Ch] [ebp-1E0h]
int v68; // [esp+3Ch] [ebp-1E0h]
HDDMChipType hddmChipType; // [esp+4Ch] [ebp-1D0h] BYREF
int v70; // [esp+C0h] [ebp-15Ch]
int v71; // [esp+C4h] [ebp-158h]
HDDMChip v72; // [esp+D0h] [ebp-14Ch] BYREF
_DWORD v73[6]; // [esp+118h] [ebp-104h] BYREF
_BYTE v74[16]; // [esp+130h] [ebp-ECh] BYREF
_BYTE *v75; // [esp+140h] [ebp-DCh]
_BYTE *v76; // [esp+144h] [ebp-D8h]
int v77; // [esp+148h] [ebp-D4h]
_BYTE chip_msg[8]; // [esp+150h] [ebp-CCh] BYREF
int v79; // [esp+158h] [ebp-C4h]
int v80; // [esp+15Ch] [ebp-C0h]
int v81; // [esp+160h] [ebp-BCh]
int v82; // [esp+164h] [ebp-B8h]
int v83; // [esp+168h] [ebp-B4h]
int v84; // [esp+16Ch] [ebp-B0h]
int v85; // [esp+170h] [ebp-ACh]
int v86; // [esp+174h] [ebp-A8h]
int v87; // [esp+178h] [ebp-A4h]
int v88; // [esp+180h] [ebp-9Ch]
_BYTE v89[8]; // [esp+198h] [ebp-84h] BYREF
int v90[31]; // [esp+1A0h] [ebp-7Ch] BYREF
isl::iostreams::filtering_stream<boost::iostreams::input,char,stlp_std::char_traits<char>,stlp_std::allocator<char>,boost::iostreams::public_>::filtering_stream(
v89,
hddmChipDesc->dword50,
4,
0);
sub_8D8DC4();
HDDMXng::Chip::Chip((HDDMXng::Chip *)chip_msg);
HDDMDevice::readMessage((int)v90, (google::protobuf::MessageLite *)chip_msg);
v2 = *(HDDMChipType **)stlp_std::map<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,HDDMChipType *,stlp_std::less<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>>,stlp_std::allocator<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const,HDDMChipType *>>>::operator[]<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>>(
&this->char1F8,
hddmChipDesc);
hddmChipDesc->hddmChipType = v2;
hddmChipType.hddmChipType = v2;
v62 = v2 == 0;
if ( !v2 )
{
v40 = (this->dword1F0 - this->hddmChipTypeVec) >> 2;
stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::basic_string(&v72.gapD[11], v87);
pHDDMChipType = (HDDMChipType *)operator new(0x78u);
HDDMChipType::HDDMChipType((int)pHDDMChipType, (int)this, v40, (int)&v72.gapD[11]);
hddmChipDesc->hddmChipType = pHDDMChipType;
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(&v72.gapD[11]);
hddmChipType.hddmChipType = hddmChipDesc->hddmChipType;
stlp_std::vector<HDDMChipType *,stlp_std::allocator<HDDMChipType *>>::push_back(
&this->hddmChipTypeVec,
&hddmChipType.hddmChipType);
HDDMChipType::getName((HDDMChipType *)&v72.hddmChipType);
v42 = (_DWORD *)stlp_std::map<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,HDDMChipType *,stlp_std::less<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>>,stlp_std::allocator<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const,HDDMChipType *>>>::operator[]<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>>(
&this->char1F8,
&v72.hddmChipType);
*v42 = hddmChipType.hddmChipType;
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(&v72.hddmChipType);
v43 = hddmChipType.hddmChipType;
v44 = v79;
*(_DWORD *)(hddmChipType.hddmChipType + 36) = v79;
*(_WORD *)(v43 + 44) = v82;
*(_WORD *)(v43 + 46) = v83;
v45 = v81;
LOWORD(pHDDMChipType) = v80;
*(_DWORD *)(v43 + 32) = v81 * v80;
*(_WORD *)(v43 + 40) = v45;
*(_WORD *)(v43 + 42) = (_WORD)pHDDMChipType;
v75 = v74;
v76 = v74;
v74[0] = 0;
stlp_std::vector<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,stlp_std::allocator<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>>>::resize(
v43 + 60,
v44,
v74);
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(v74);
v75 = v74;
v76 = v74;
v74[0] = 0;
stlp_std::vector<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,stlp_std::allocator<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>>>::resize(
hddmChipType.hddmChipType + 48,
*(_DWORD *)(hddmChipType.hddmChipType + 32),
v74);
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(v74);
}
v3 = this;
if ( !this->isXngd )
{
if ( (char *)v87 != &this->archFilePath )
stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::_M_assign(
(int)&this->archFilePath,
*(void **)(v87 + 20),
*(_DWORD *)(v87 + 16));
*(_DWORD *)&this->nDeviceCode = (16 * (v79 & 0x3FFFFF)) | *(_DWORD *)&this->nDeviceCode & 0xFC00000F;
this->numrows = v80;
this->numcols = v81;
this->rpmgridx = v82;
this->rpmgridy = v83;
this->extremaxmin = v84;
this->extremaxmax = v85;
this->extremaymin = v86;
this->extremaymax = v88;
v4 = hddmChipType.hddmChipType;
this->dword94 = hddmChipType.hddmChipType + 96;
this->dword98 = v4 + 72;
v3 = this;
}
v5 = (v3->dword214 - v3->dword210) >> 2;
stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::basic_string(
v73,
(int)&hddmChipDesc->char18);
pHDDMChip = (HDDMChip *)operator new(0x3Cu);
HDDMChip::HDDMChip(pHDDMChip, (int)this, v5, v73, hddmChipType.hddmChipType);
hddmChipDesc->hddmChip = pHDDMChip;
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(v73);
hddmChip = hddmChipDesc->hddmChip;
dword214 = (char *)this->dword214;
if ( dword214 != (char *)this->dword218 )
{
*(_DWORD *)dword214 = hddmChipDesc->hddmChip;
this->dword214 += 4;
goto LABEL_9;
}
src = (_BYTE *)this->dword210;
n = dword214 - src;
v31 = 1;
v32 = (dword214 - src) >> 2;
if ( v32 )
v31 = (dword214 - src) >> 2;
v33 = v32 + v31;
if ( v33 > 0x3FFFFFFF || v32 > v33 )
{
v39 = -4;
LABEL_71:
dest = (HDDMChip **)stlp_std::__malloc_alloc::allocate((stlp_std::__malloc_alloc *)v39, (unsigned int)v47);
src = (_BYTE *)this->dword210;
n = dword214 - src;
v34 = (char *)dest + (v39 & 0xFFFFFFFC);
goto LABEL_65;
}
if ( v33 )
{
v39 = 4 * v33;
goto LABEL_71;
}
v34 = 0;
dest = 0;
LABEL_65:
v36 = dest;
if ( n )
{
v55 = dest;
v36 = (HDDMChip **)((char *)memmove(dest, src, n) + n);
dest = v55;
}
*v36 = hddmChip;
v37 = v36 + 1;
dword210 = (void *)this->dword210;
if ( dword210 )
{
v56 = dest;
free(dword210);
dest = v56;
}
this->dword210 = dest;
this->dword214 = v37;
this->dword218 = v34;
LABEL_9:
HDDMChip::getName(&v72);
dword220 = this->dword220;
if ( !dword220 )
{
dword38 = &this->char21C;
LABEL_58:
stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::basic_string(v74, (int)&v72);
v77 = 0;
*(_DWORD *)&hddmChipType.gap9[11] = dword38;
stlp_std::priv::_Rb_tree<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,stlp_std::less<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>>,stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const,HDDMChip *>,stlp_std::priv::_Select1st<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const,HDDMChip *>>,stlp_std::priv::_MapTraitsT<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const,HDDMChip *>>,stlp_std::allocator<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const,HDDMChip *>>>::insert_unique(&hddmChipType.dword38);
dword38 = (char *)hddmChipType.dword38;
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(v74);
goto LABEL_16;
}
v9 = *(_DWORD *)&v72.gapD[3];
v10 = *(void **)&v72.gapD[7];
dword38 = &this->char21C;
do
{
while ( stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::_M_compare(
*(void **)(dword220 + 36),
*(_DWORD *)(dword220 + 32),
v10,
v9) >= 0 )
{
dword38 = (char *)dword220;
dword220 = *(_DWORD *)(dword220 + 8);
if ( !dword220 )
goto LABEL_14;
}
dword220 = *(_DWORD *)(dword220 + 12);
}
while ( dword220 );
LABEL_14:
if ( &this->char21C == dword38
|| stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::_M_compare(
v10,
v9,
*((void **)dword38 + 9),
*((_DWORD *)dword38 + 8)) < 0 )
{
goto LABEL_58;
}
LABEL_16:
*((_DWORD *)dword38 + 10) = hddmChip;
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(&v72);
hddmChip->dword24 = hddmChipDesc->dword5C;
hddmChip->dword28 = hddmChipDesc->dword60;
*(_DWORD *)&hddmChip->hddmChipType = *(_DWORD *)&hddmChipDesc->word34;
HDDMChipType::getTileGridExtent(&hddmChipType);
v11 = hddmChipDesc->word36 + HIWORD(hddmChipType.dword0);
hddmChip->word2C = hddmChipDesc->word34 + LOWORD(hddmChipType.dword0);
hddmChip->word2E = v11;
*(_DWORD *)&hddmChip->word38 = *(_DWORD *)&hddmChipDesc->word30;
HDDMChipType::getRpmGridExtent(&hddmChipType);
v12 = hddmChipDesc->word32 + HIWORD(hddmChipType.dword0);
hddmChip->word34 = hddmChipDesc->word30 + LOWORD(hddmChipType.dword0);
hddmChip->word36 = v12;
if ( !this->hddmTileVec )
HDDMDevice::allocatesupersites(this);
NumTiles = HDDMChipType::getNumTiles((HDDMChipType *)hddmChipType.hddmChipType);
if ( NumTiles )
{
v59 = 0;
for ( i = 0; i != NumTiles; ++i )
{
hddmTileVec = this->hddmTileVec;
v14 = (unsigned int *)(hddmTileVec + 48 * (i + HDDMChip::getMinTileIndex(hddmChip)));
HDDMTile::readme_pb(v14, v90);
v14[11] = HDDMChip::getIndex(hddmChip);
v14[1] = (v14[1] + HDDMChip::getMinSiteIndex(hddmChip)) & 0x3FFFFF | v14[1] & 0xFFC00000;
*v14 = (4 * (((*v14 >> 2) + (__int16)hddmChipDesc->word38) & 0x1FFFFFF)) | *v14 & 0xF8000003;
v14[2] += (__int16)hddmChipDesc->word3A;
if ( !v62 )
{
v75 = v74;
v76 = v74;
v74[0] = 0;
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_swap(v74, v14 + 3);
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(v74);
goto LABEL_31;
}
v15 = *(_DWORD *)(hddmChipType.hddmChipType + 48);
if ( i >= -1431655765 * ((*(_DWORD *)(hddmChipType.hddmChipType + 52) - v15) >> 3) )
{
v46 = stlp_std::__stl_throw_out_of_range((stlp_std *)"vector", srca);
operator delete(hddmChip);
goto LABEL_74;
}
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_swap(v59 + v15, v14 + 3);
v16 = *(_DWORD *)(hddmChipType.hddmChipType + 48);
if ( i >= -1431655765 * ((*(_DWORD *)(hddmChipType.hddmChipType + 52) - v16) >> 3) )
{
v46 = stlp_std::__stl_throw_out_of_range((stlp_std *)"vector", srcb);
LABEL_74:
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(hddmTileVec);
goto LABEL_75;
}
v17 = v59 + v16;
v67 = v17;
v63 = hddmChipType.hddmChipType + 72;
v18 = *(_DWORD **)(hddmChipType.hddmChipType + 76);
if ( v18 )
{
v19 = *(_DWORD *)(v17 + 16);
v20 = *(void **)(v17 + 20);
dword3C = hddmChipType.hddmChipType + 72;
do
{
while ( stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::_M_compare(
*(void **)(v18[4] + 20),
*(_DWORD *)(v18[4] + 16),
v20,
v19) >= 0 )
{
dword3C = (int)v18;
v18 = (_DWORD *)v18[2];
if ( !v18 )
goto LABEL_28;
}
v18 = (_DWORD *)v18[3];
}
while ( v18 );
LABEL_28:
if ( v63 != dword3C
&& stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::_M_compare(
v20,
v19,
*(void **)(*(_DWORD *)(dword3C + 16) + 20),
*(_DWORD *)(*(_DWORD *)(dword3C + 16) + 16)) >= 0 )
{
goto LABEL_30;
}
}
else
{
dword3C = hddmChipType.hddmChipType + 72;
}
hddmChipType.dword64 = v67;
hddmChipType.dword68 = 0;
hddmChipType.dword24 = dword3C;
stlp_std::priv::_Rb_tree<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const*,HDDMChipType::_DerefStringPtrLessThan,stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const* const,unsigned int>,stlp_std::priv::_Select1st<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const* const,unsigned int>>,stlp_std::priv::_MapTraitsT<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const* const,unsigned int>>,stlp_std::allocator<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const* const,unsigned int>>>::insert_unique(&hddmChipType.dword3C);
dword3C = hddmChipType.dword3C;
LABEL_30:
*(_DWORD *)(dword3C + 20) = i;
LABEL_31:
v59 += 24;
}
}
if ( !this->hddmSiteVec )
HDDMDevice::allocatesites(this);
NumSites = HDDMChipType::getNumSites((HDDMChipType *)hddmChipType.hddmChipType);
if ( NumSites )
{
v60 = 0;
for ( j = 0; j != NumSites; ++j )
{
hddmSiteVec = this->hddmSiteVec;
v22 = hddmSiteVec + 36 * (j + HDDMChip::getMinSiteIndex(hddmChip));
HDDMSite::readme_pb(v22, (int)v90);
*(_DWORD *)(v22 + 32) = HDDMChip::getIndex(hddmChip);
*(_DWORD *)v22 = (4 * (((*(_DWORD *)v22 >> 2) + HDDMChip::getMinTileIndex(hddmChip)) & 0x3FFFFF)) | *(_DWORD *)v22 & 0xFF000003;
if ( *(char *)(v22 + 7) >= 0 )
{
HDDMChip::getRpmGridRect((HDDMChip *)&hddmChipType.dword44);
*(_WORD *)(v22 + 4) = (*(_WORD *)&hddmChipType.byte48 + *(_WORD *)(v22 + 4)) & 0xFFF | *(_WORD *)(v22 + 4) & 0xF000;
srcc = (const char *)hddmChip;
HDDMChip::getRpmGridRect((HDDMChip *)&hddmChipType.dword54);
*(_DWORD *)(v22 + 4) = ((((unsigned __int16)(*(_DWORD *)(v22 + 4) >> 12) + HIWORD(hddmChipType.dword58)) & 0xFFF) << 12) | *(_DWORD *)(v22 + 4) & 0xFF000FFF;
}
if ( !v62 )
{
v75 = v74;
v76 = v74;
v74[0] = 0;
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_swap(v74, v22 + 8);
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(v74);
goto LABEL_49;
}
v23 = *(_DWORD *)(hddmChipType.hddmChipType + 60);
if ( -1431655765 * ((*(_DWORD *)(hddmChipType.hddmChipType + 64) - v23) >> 3) <= j )
goto LABEL_78;
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_swap(v60 + v23, v22 + 8);
v24 = *(_DWORD *)(hddmChipType.hddmChipType + 60);
if ( -1431655765 * ((*(_DWORD *)(hddmChipType.hddmChipType + 64) - v24) >> 3) <= j )
{
stlp_std::__stl_throw_out_of_range((stlp_std *)"vector", srcd);
LABEL_78:
v46 = stlp_std::__stl_throw_out_of_range((stlp_std *)"vector", srcc);
stlp_std::priv::_String_base<char,stlp_std::allocator<char>>::_M_deallocate_block(v60);
LABEL_75:
HDDMXng::Chip::~Chip((HDDMXng::Chip *)chip_msg);
isl::iostreams::filtering_stream<boost::iostreams::input,char,stlp_std::char_traits<char>,stlp_std::allocator<char>,boost::iostreams::public_>::~filtering_stream(v89);
_Unwind_Resume(v46);
}
v25 = v60 + v24;
v68 = v25;
v64 = hddmChipType.hddmChipType + 96;
v26 = *(_DWORD **)(hddmChipType.hddmChipType + 100);
if ( v26 )
{
v27 = *(_DWORD *)(v25 + 16);
v28 = *(void **)(v25 + 20);
dword40 = hddmChipType.hddmChipType + 96;
do
{
while ( stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::_M_compare(
*(void **)(v26[4] + 20),
*(_DWORD *)(v26[4] + 16),
v28,
v27) >= 0 )
{
dword40 = (int)v26;
v26 = (_DWORD *)v26[2];
if ( !v26 )
goto LABEL_46;
}
v26 = (_DWORD *)v26[3];
}
while ( v26 );
LABEL_46:
if ( dword40 != v64
&& stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::_M_compare(
v28,
v27,
*(void **)(*(_DWORD *)(dword40 + 16) + 20),
*(_DWORD *)(*(_DWORD *)(dword40 + 16) + 16)) >= 0 )
{
goto LABEL_48;
}
}
else
{
dword40 = hddmChipType.hddmChipType + 96;
}
v70 = v68;
v71 = 0;
hddmChipType.dword34 = dword40;
stlp_std::priv::_Rb_tree<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const*,HDDMChipType::_DerefStringPtrLessThan,stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const* const,unsigned int>,stlp_std::priv::_Select1st<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const* const,unsigned int>>,stlp_std::priv::_MapTraitsT<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const* const,unsigned int>>,stlp_std::allocator<stlp_std::pair<stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>> const* const,unsigned int>>>::insert_unique(&hddmChipType.dword40);
dword40 = hddmChipType.dword40;
LABEL_48:
*(_DWORD *)(dword40 + 20) = j;
LABEL_49:
v60 += 24;
}
}
HDDMXng::Chip::~Chip((HDDMXng::Chip *)chip_msg);
isl::iostreams::filtering_stream<boost::iostreams::input,char,stlp_std::char_traits<char>,stlp_std::allocator<char>,boost::iostreams::public_>::~filtering_stream(v89);
}
void __cdecl HDDMDevice::writechip_pb(HDDMDevice *this, int ostream, __int16 nFileVersion)
{
int v3; // eax
int v4; // eax
int v5; // edi
int v6; // ebp
int v7; // ebp
int v8; // edi
int v9; // [esp+18h] [ebp-74h]
__int16 v10; // [esp+2Ch] [ebp-60h] BYREF
__int16 v11; // [esp+2Eh] [ebp-5Eh] BYREF
_BYTE chip_msg[8]; // [esp+30h] [ebp-5Ch] BYREF
int v13; // [esp+38h] [ebp-54h]
int word4; // [esp+3Ch] [ebp-50h]
int word6; // [esp+40h] [ebp-4Ch]
int word8; // [esp+44h] [ebp-48h]
int wordA; // [esp+48h] [ebp-44h]
int dword10; // [esp+4Ch] [ebp-40h]
int dword14; // [esp+50h] [ebp-3Ch]
int dword18; // [esp+54h] [ebp-38h]
int v21; // [esp+58h] [ebp-34h]
int v22; // [esp+5Ch] [ebp-30h]
int dword1C; // [esp+60h] [ebp-2Ch]
int v24; // [esp+68h] [ebp-24h]
stlp_std::basic_ostream<char,stlp_std::char_traits<char>>::write(ostream, "xngp", 4);
v10 = nFileVersion | 0x8000;
v11 = 0;
stlp_std::basic_ostream<char,stlp_std::char_traits<char>>::write(ostream, &v10, 2);
stlp_std::basic_ostream<char,stlp_std::char_traits<char>>::write(ostream, &v11, 2);
HDDMXng::Chip::Chip((HDDMXng::Chip *)chip_msg);
v13 = (*(_DWORD *)&this->nDeviceCode >> 4) & 0x3FFFFF;
word4 = (unsigned __int16)this->numrows;
word6 = (unsigned __int16)this->numcols;
word8 = (unsigned __int16)this->rpmgridx;
wordA = (unsigned __int16)this->rpmgridy;
dword10 = this->extremaxmin;
dword14 = this->extremaxmax;
dword18 = this->extremaymin;
dword1C = this->extremaymax;
v24 |= 0x5FFu;
v3 = v22;
if ( (_UNKNOWN *)v22 == &google::protobuf::internal::kEmptyString )
{
v3 = operator new(0x18u);
*(_DWORD *)(v3 + 16) = v3;
*(_DWORD *)(v3 + 20) = v3;
*(_BYTE *)v3 = 0;
v22 = v3;
}
stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::_M_assign(
v3,
(void *)this->dword38,
this->dword34);
v24 |= 0x200u;
v4 = v21;
if ( (_UNKNOWN *)v21 == &google::protobuf::internal::kEmptyString )
{
v4 = operator new(0x18u);
*(_DWORD *)(v4 + 16) = v4;
*(_DWORD *)(v4 + 20) = v4;
*(_BYTE *)v4 = 0;
v21 = v4;
}
stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>::_M_assign(
v4,
(void *)this->dword50,
this->dword4C);
HDDMDevice::writeMessage(ostream, chip_msg);
v9 = (unsigned __int16)this->numrows * (unsigned __int16)this->numcols;
v5 = 0;
v6 = 0;
if ( v9 )
{
do
{
HDDMTile::writeme_pb(v5 + this->hddmTileVec, ostream);
++v6;
v5 += 48;
}
while ( v6 != v9 );
}
v7 = 0;
v8 = 0;
if ( (*(_DWORD *)&this->nDeviceCode & 0x3FFFFF0) != 0 )
{
do
{
HDDMSite::writeme_pb(v7 + this->hddmSiteVec, ostream);
++v8;
v7 += 36;
}
while ( ((*(_DWORD *)&this->nDeviceCode >> 4) & 0x3FFFFF) > v8 );
}
stlp_std::basic_ostream<char,stlp_std::char_traits<char>>::flush(ostream);
HDDMXng::Chip::~Chip((HDDMXng::Chip *)chip_msg);
}