请仔细阅读和深度思考分析下面函数,绝对保持原始代码的处理流程和步骤不变,
绝对不要遗漏各种条件判断和标志位管理的处理和各种逻辑功能处理,
采用 google::protobuf::Descriptor 和 google::protobuf::Reflection 与C/C++11标准,
绝对不要输出简化代码和处理流程和步骤,推导并重构完整的可编译的所有函数的全部代码
特别要求如下:
1.保持所有原始功能不变,不要遗漏逻辑细节
2.提高执行效率,降低计算复杂度
3.已经给定的结构体名字和元素不要更改,详细的中文注释
4.自动添加中文注释说明功能逻辑
5.不使用 auto,使用显式 for 循环
6.结构体采用32位定义
7.不要使用小函数,保持原始的函数定义
8.严格保持protobuf字段映射关系
特别注意如下:
1.函数中有关位操作不变,函数间的位操作一致
2.确保 tileType_coded到tileType_coded8 的位操作与原始逻辑完全一致,同时保持所有功能不变,
3 单独定义tileType_coded到tileType_coded8 的位域结构体并注释位操作
3.函数中的 HDDMXng::TileType::TileType 映射为
message TileType
{
optional uint32 numarcs = 1;
optional uint32 gidx = 2;
optional uint32 numwires = 3;
optional sint32 xmin = 4;
optional sint32 xmax = 5;
optional sint32 ymin = 6;
optional sint32 ymax = 7;
optional uint32 xgridextent = 8;
optional uint32 ygridextent = 9;
optional string gname = 10;
optional string hwname = 11;
repeated SiteChildDef sitechilddefs = 12;
repeated sint32 sitepin2wire = 13 [packed = true];
optional uint32 numtileports = 14;
optional uint32 transform = 15;
optional string baseTypeName = 16;
}
message SiteChildDef
{
optional uint32 sitetype = 1;
optional string sitename = 2;
optional uint32 startpin = 3;
optional uint32 deltarpmx = 4;
optional uint32 deltarpmy = 5;
}
4.函数中的 HDDMXng::TilePort::TilePort 映射为
message TilePort
{
optional uint32 edgeid = 1;
optional uint32 faceid = 2;
optional uint32 localid = 3;
optional uint32 globalid = 4;
optional sint32 wireid = 5;
}
5. 将 _BYTE tileType_msg[16] 映射为 HDDMXng::TileType tileType_msg;
6. 将 __int64 *std_se 映射为 std::set<std::string> *std_set;
void __fastcall HDDMTileType::readme_pb(
HDDMTileType *this,
std::istream *stream,
HDDMDevice *hddmDevice,
unsigned __int16 isTilePort,
__int64 *nameSet)
{
google::protobuf::Message *v6; // rdx
__int16 v7; // dx
__int64 v8; // rsi
__int16 v9; // ax
__int16 v10; // dx
int n0x7FFFFFFF; // eax
int n0x7FFFFFFF_1; // ecx
int n0x7FFFFFFF_3; // ecx
int n0x7FFFFFFF_5; // ecx
char v15; // bp
void *v16; // rdi
bool v17; // zf
int v18; // eax
char *qwordB0; // r12
__int64 qwordA8; // rdx
unsigned __int64 v21; // rbx
unsigned __int64 v22; // rax
__int64 qwordC0; // rdx
unsigned __int64 v24; // rax
__int64 qwordF8; // rcx
__int64 qwordF0; // rdx
unsigned __int64 v27; // rax
void **qwordE0; // rbp
__int64 qwordD8; // rdx
unsigned __int64 v30; // rax
void **i_1; // rbx
void **i; // r12
__int64 v33; // r12
__int64 v34; // rax
_QWORD *v35; // rax
__int64 v36; // r14
_DWORD *v37; // rbx
void *v38; // rsi
char *v39; // rdx
void *v40; // rdi
void **qword68; // rax
_QWORD *v42; // r13
char *qword88; // rbx
char *qword88_1; // rax
char v45; // dl
__int64 v46; // r13
int v47; // r12d
__int64 v48; // rbx
__int64 v49; // rbx
char *p_char1F8_1; // rbp
__int64 qword200; // r14
__int64 v52; // rbp
int v53; // ebx
HDDMArc *v54; // r12
__int64 qword1D8; // rcx
unsigned __int64 v56; // rax
__int64 v57; // r12
char *p_char228; // r14
int v59; // r13d
__int64 qwordC0_1; // r8
int v61; // eax
__int64 v62; // rdx
int v63; // esi
__int64 qword230; // rax
int v65; // ecx
unsigned __int16 *p_char228_1; // rbp
unsigned __int16 *p_char228_4; // r8
__int64 insert_hint_unique_pos; // rax
__int64 p_char228_2; // rdx
bool v70; // di
__int64 v71; // rax
char v72; // dl
int p_char1F8_3; // r14d
HDDMTilePort **v74; // rax
google::protobuf::Message *v75; // rdx
__int64 n0xFFFF; // rsi
void *v77; // kr00_8
int n0xFFFF_1; // ecx
const HDDMWire *v79; // rbx
HDDMTileFace *v80; // rbp
HDDMTilePort *v81; // r12
__int64 v82; // rax
bool v83; // r13
_QWORD *v84; // rax
_QWORD *v85; // rsi
__int64 v86; // rax
__int64 v87; // rdx
_WORD *qwordF8_1; // rdx
unsigned __int64 v89; // rsi
unsigned __int64 v90; // rdi
unsigned __int64 v91; // rsi
__int16 v92; // [rsp+0h] [rbp-198h]
int v93; // [rsp+0h] [rbp-198h]
int p_char1F8; // [rsp+10h] [rbp-188h]
unsigned __int16 *p_char228_3; // [rsp+18h] [rbp-180h]
int v98; // [rsp+28h] [rbp-170h]
unsigned __int16 v99; // [rsp+3Ch] [rbp-15Ch]
unsigned __int16 v100; // [rsp+3Eh] [rbp-15Ah]
__int64 v102; // [rsp+50h] [rbp-148h] BYREF
void *v103[2]; // [rsp+60h] [rbp-138h] BYREF
_BYTE v104[16]; // [rsp+70h] [rbp-128h] BYREF
void *v105[2]; // [rsp+80h] [rbp-118h] BYREF
_BYTE v106[16]; // [rsp+90h] [rbp-108h] BYREF
void *v107; // [rsp+A0h] [rbp-F8h] BYREF
__int64 v108; // [rsp+A8h] [rbp-F0h]
__int64 v109; // [rsp+B0h] [rbp-E8h] BYREF
__int64 v110; // [rsp+B8h] [rbp-E0h]
void *v111; // [rsp+C0h] [rbp-D8h]
int n0xFFFF_2; // [rsp+C8h] [rbp-D0h]
_BYTE tiletype_msg[16]; // [rsp+D0h] [rbp-C8h] BYREF
int v114; // [rsp+E0h] [rbp-B8h]
int v115; // [rsp+F0h] [rbp-A8h]
__int64 v116; // [rsp+F8h] [rbp-A0h]
int v117; // [rsp+100h] [rbp-98h]
__int64 v118; // [rsp+108h] [rbp-90h]
__int64 v119; // [rsp+118h] [rbp-80h]
__int64 v120; // [rsp+120h] [rbp-78h]
_QWORD *v121; // [rsp+128h] [rbp-70h]
int v122; // [rsp+130h] [rbp-68h]
__int16 v123; // [rsp+134h] [rbp-64h]
int v124; // [rsp+138h] [rbp-60h]
int n0x7FFFFFFF_2; // [rsp+13Ch] [rbp-5Ch]
int n0x7FFFFFFF_4; // [rsp+140h] [rbp-58h]
int n0x7FFFFFFF_6; // [rsp+144h] [rbp-54h]
int n0x7FFFFFFF_7; // [rsp+148h] [rbp-50h]
int v129; // [rsp+14Ch] [rbp-4Ch]
int v130; // [rsp+150h] [rbp-48h]
int p_char1F8_2; // [rsp+154h] [rbp-44h]
int v132; // [rsp+158h] [rbp-40h]
if ( HDDMDeviceDump::useXngMarks )
std::istream::read(stream, HDDMDeviceDump::markBuffer, 8);
if ( !(_BYTE)byte_FA2D910 && __cxa_guard_acquire(&byte_FA2D910) )
{
HDDMTileType::createtypenamemap((HDDMTileType *)&byte_FA2D910);
__cxa_guard_release(&byte_FA2D910);
}
HDDMXng::TileType::TileType((HDDMXng::TileType *)tiletype_msg);
HDDMDevice::readMessage((HDDMDevice *)stream, (std::istream *)tiletype_msg, v6);
v7 = v123;
v8 = v119;
HIWORD(this->byte0) = v122;
v9 = (v7 << 6) | this->byte0 & 0x3F;
v10 = v114;
LOWORD(this->byte0) = v9;
LOWORD(this->word1C) = v124;
n0x7FFFFFFF = 0x7FFFFFFF;
n0x7FFFFFFF_1 = 0x7FFFFFFF;
if ( (v10 & 0x40) != 0 )
n0x7FFFFFFF_1 = n0x7FFFFFFF_2;
this->dword8 = n0x7FFFFFFF_1;
n0x7FFFFFFF_3 = 0x7FFFFFFF;
if ( (v10 & 0x80u) != 0 )
n0x7FFFFFFF_3 = n0x7FFFFFFF_4;
this->dwordC = n0x7FFFFFFF_3;
n0x7FFFFFFF_5 = 0x7FFFFFFF;
if ( (v10 & 0x100) != 0 )
n0x7FFFFFFF_5 = n0x7FFFFFFF_6;
if ( (v10 & 0x200) != 0 )
n0x7FFFFFFF = n0x7FFFFFFF_7;
this->dword10 = n0x7FFFFFFF_5;
this->dword14 = n0x7FFFFFFF;
LOWORD(this->word18) = v129;
HIWORD(this->word18) = v130;
std::string::_M_assign(&this->qword20, v8);
std::string::_M_assign(&this->qword40, v120);
HDDMTileType::settypeenum(this);
if ( (v114 & 0x2004) == 0x2004 )
{
v15 = v132;
v107 = &v109;
sub_13D9EE0(&v107, *v121, v121[1] + *v121);
v103[0] = v104;
sub_13D9EE0(v103, v107, (char *)v107 + v108);
HDDMTileType::setbasetypeenum(this, v103);
if ( v103[0] != v104 )
operator delete(v103[0]);
v16 = v107;
v17 = v107 == &v109;
BYTE2(this->byte4) = (2 * (v15 & 7)) | BYTE2(this->byte4) & 0xF1;
if ( !v17 )
operator delete(v16);
}
else
{
v18 = (16 * (this->byte4 >> 5)) | HIWORD(this->byte4) & 0xF;
HIWORD(this->byte4) = v18;
BYTE2(this->byte4) = v18 & 0xF1;
}
qwordB0 = (char *)this->qwordB0;
qwordA8 = this->qwordA8;
v21 = v115;
v22 = (__int64)&qwordB0[-qwordA8] >> 3;
v98 = v115;
if ( v115 > v22 )
{
v91 = v115 - v22;
if ( (__int64)(this->qwordB8 - (_QWORD)qwordB0) >> 3 < v91 )
{
sub_13DA110(&this->qwordA8);
}
else
{
memset(qwordB0, 0, 8 * v91);
this->qwordB0 = &qwordB0[8 * v91];
}
}
else if ( v115 < v22 )
{
this->qwordB0 = qwordA8 + 8LL * v115;
}
qwordC0 = this->qwordC0;
v24 = (this->qwordC8 - qwordC0) >> 1;
if ( v24 < v21 )
{
std::vector<unsigned short>::_M_default_append(&this->qwordC0, v21 - v24);
}
else if ( v24 > v21 )
{
this->qwordC8 = qwordC0 + 2 * v21;
}
qwordF8 = this->qwordF8;
qwordF0 = this->qwordF0;
v27 = (qwordF8 - qwordF0) >> 2;
if ( v21 > v27 )
{
qwordF8_1 = (_WORD *)this->qwordF8;
v89 = v21 - v27;
v90 = v21 - v27;
if ( (this->qword100 - qwordF8) >> 2 < v21 - v27 )
{
sub_13D9FD0(&this->qwordF0, v89, qwordF8_1);
}
else
{
do
{
if ( qwordF8_1 )
{
*qwordF8_1 = 0;
qwordF8_1[1] = 0;
}
qwordF8_1 += 2;
--v90;
}
while ( v90 );
this->qwordF8 = qwordF8 + 4 * v89;
}
}
else if ( v21 < v27 )
{
this->qwordF8 = qwordF0 + 4 * v21;
}
qwordE0 = (void **)this->qwordE0;
qwordD8 = this->qwordD8;
v30 = ((__int64)qwordE0 - qwordD8) >> 5;
if ( v30 < v21 )
{
std::vector<std::string>::_M_default_append(&this->qwordD8, v21 - v30);
}
else if ( v30 > v21 )
{
i_1 = (void **)(qwordD8 + 32 * v21);
for ( i = i_1; qwordE0 != i; i += 4 )
{
if ( *i != i + 2 )
operator delete(*i);
}
this->qwordE0 = i_1;
}
if ( v98 <= 0 )
goto LABEL_55;
v33 = 0;
do
{
v34 = *(_QWORD *)(v116 + 8LL * (int)v33 + 8);
*(_QWORD *)(this->qwordA8 + 8 * v33) = *(_QWORD *)(hddmDevice->qword108 + 8LL * *(unsigned __int16 *)(v34 + 32));
*(_WORD *)(this->qwordC0 + 2 * v33) = *(_DWORD *)(v34 + 36);
*(_WORD *)(this->qwordF0 + 4 * v33) = *(_DWORD *)(v34 + 40);
*(_WORD *)(this->qwordF0 + 4 * v33 + 2) = *(_DWORD *)(v34 + 44);
std::string::_M_assign(this->qwordD8 + 32 * v33, *(_QWORD *)(v34 + 24));
v35 = (_QWORD *)(this->qwordD8 + 32 * v33);
v105[0] = v106;
sub_13D9EE0(v105, *v35, v35[1] + *v35);
v36 = *(_QWORD *)(this->qwordA8 + 8 * v33);
v37 = (_DWORD *)operator new(0x58u);
*(_QWORD *)v37 = this;
v38 = v105[0];
v39 = (char *)v105[1] + (unsigned __int64)v105[0];
v37[2] = (unsigned __int16)v33;
*((_QWORD *)v37 + 2) = v37 + 8;
sub_13D9EE0(v37 + 4, v38, v39);
v40 = v105[0];
v17 = v105[0] == v106;
*((_QWORD *)v37 + 6) = v36;
*((_QWORD *)v37 + 8) = 0;
*((_QWORD *)v37 + 9) = 0;
*((_QWORD *)v37 + 10) = 0;
*((_QWORD *)v37 + 7) = v37;
v103[0] = v37;
if ( !v17 )
operator delete(v40);
qword68 = (void **)this->qword68;
if ( qword68 == (void **)this->qword70 )
{
std::vector<HDDMSiteChildDef *>::_M_emplace_back_aux<HDDMSiteChildDef * const&>(&this->qword60, v103);
}
else
{
if ( qword68 )
{
*qword68 = v103[0];
qword68 = (void **)this->qword68;
}
this->qword68 = qword68 + 1;
}
v42 = (_QWORD *)(this->qwordD8 + 32 * v33);
v107 = &v109;
sub_13D9EE0(&v107, *v42, v42[1] + *v42);
qword88 = (char *)this->qword88;
v111 = v103[0];
if ( !qword88 )
{
qword88 = &this->char80;
LABEL_115:
if ( (char *)this->qword90 == qword88
|| (v82 = std::_Rb_tree_decrement(qword88), (int)std::string::compare(v82 + 32, &v107) < 0) )
{
if ( qword88 )
goto LABEL_118;
}
goto LABEL_52;
}
while ( (int)std::string::compare(&v107, qword88 + 32) >= 0 )
{
qword88_1 = (char *)*((_QWORD *)qword88 + 3);
v45 = 0;
if ( !qword88_1 )
goto LABEL_50;
LABEL_47:
qword88 = qword88_1;
}
qword88_1 = (char *)*((_QWORD *)qword88 + 2);
v45 = 1;
if ( qword88_1 )
goto LABEL_47;
LABEL_50:
if ( v45 )
goto LABEL_115;
if ( (int)std::string::compare(qword88 + 32, &v107) >= 0 )
goto LABEL_52;
LABEL_118:
v83 = &this->char80 == qword88 || (int)std::string::compare(&v107, qword88 + 32) < 0;
v84 = (_QWORD *)operator new(0x48u);
v85 = v84;
if ( v84 != (_QWORD *)-32LL )
{
v84[4] = v84 + 6;
if ( v107 == &v109 )
{
v87 = v110;
v84[6] = v109;
v84[7] = v87;
}
else
{
v84[4] = v107;
v84[6] = v109;
}
v86 = v108;
LOBYTE(v109) = 0;
v108 = 0;
v85[5] = v86;
v107 = &v109;
v85[8] = v111;
}
std::_Rb_tree_insert_and_rebalance(v83, v85, qword88, &this->char80);
++this->qwordA0;
LABEL_52:
if ( v107 != &v109 )
operator delete(v107);
++v33;
}
while ( v98 > (int)v33 );
LABEL_55:
HDDMTileType::allocatewires(this, this->word1C);
v46 = 0;
v47 = 0;
if ( LOWORD(this->word1C) )
{
do
{
v48 = this->qword110 + v46;
HDDMWire::readme_pb(v48, stream, hddmDevice, nameSet);
*(_WORD *)(v48 + 10) = v47;
v49 = v48 + 32;
v92 = v47;
p_char1F8_1 = &this->char1F8;
if ( !this->qword200 )
goto LABEL_125;
qword200 = this->qword200;
do
{
while ( (int)std::string::compare(qword200 + 32, v49) >= 0 )
{
p_char1F8_1 = (char *)qword200;
qword200 = *(_QWORD *)(qword200 + 16);
if ( !qword200 )
goto LABEL_61;
}
qword200 = *(_QWORD *)(qword200 + 24);
}
while ( qword200 );
LABEL_61:
if ( p_char1F8_1 == &this->char1F8 || (int)std::string::compare(v49, p_char1F8_1 + 32) < 0 )
{
LABEL_125:
v102 = v49;
p_char1F8_1 = (char *)sub_13DE4A0(this->gap1F0, p_char1F8_1, &v102);
}
++v47;
v46 += 112;
*((_WORD *)p_char1F8_1 + 32) = v92;
}
while ( LOWORD(this->word1C) > v47 );
}
HDDMTileType::allocatearcs(this, HIWORD(this->byte0));
v52 = 0;
v53 = 0;
if ( HIWORD(this->byte0) )
{
do
{
v54 = (HDDMArc *)(this->qword108 + v52);
HDDMArc::readme_pb(v54, stream, hddmDevice);
*((_WORD *)v54 + 3) = v53++;
v52 += 24;
}
while ( HIWORD(this->byte0) > v53 );
}
qword1D8 = this->qword1D8;
v56 = (this->qword1E0 - qword1D8) >> 1;
v93 = v117;
if ( v117 > v56 )
{
std::vector<unsigned short>::_M_default_append(&this->qword1D8, v117 - v56);
}
else if ( v117 < v56 )
{
this->qword1E0 = qword1D8 + 2LL * v117;
}
v57 = 0;
p_char228 = &this->char228;
if ( v93 > 0 )
{
while ( 1 )
{
v59 = *(_DWORD *)(v118 + 4LL * (int)v57 + 8);
if ( v59 < 0 )
goto LABEL_95;
*(_WORD *)(this->qword1D8 + 2 * v57) = v59;
if ( (_WORD)v98 )
{
qwordC0_1 = this->qwordC0;
v61 = 1;
v62 = 0;
do
{
v63 = v61;
if ( (unsigned __int16)v57 >= (int)*(unsigned __int16 *)(qwordC0_1 + 2 * v62)
&& ((unsigned __int16)v98 == v61 || (unsigned __int16)v57 < (int)*(unsigned __int16 *)(qwordC0_1 + 2LL * v61)) )
{
v99 = v62;
v100 = v57 - *(_WORD *)(qwordC0_1 + 2 * v62);
goto LABEL_77;
}
++v62;
++v61;
}
while ( (unsigned __int16)v98 > v63 );
qword230 = this->qword230;
if ( !qword230 )
{
LABEL_114:
p_char228_1 = (unsigned __int16 *)&this->char228;
LABEL_84:
p_char228_4 = (unsigned __int16 *)operator new(0x28u);
if ( p_char228_4 != (unsigned __int16 *)-32LL )
{
p_char228_4[16] = v59;
p_char228_4[17] = 0;
p_char228_4[18] = 0;
}
p_char228_3 = p_char228_4;
insert_hint_unique_pos = std::_Rb_tree<unsigned short,std::pair<unsigned short const,std::pair<unsigned short,unsigned short>>,std::_Select1st<std::pair<unsigned short const,std::pair<unsigned short,unsigned short>>>,std::less<unsigned short>,std::allocator<std::pair<unsigned short const,std::pair<unsigned short,unsigned short>>>>::_M_get_insert_hint_unique_pos(
this->gap220,
p_char228_1,
p_char228_4 + 16);
p_char228_1 = (unsigned __int16 *)insert_hint_unique_pos;
if ( p_char228_2 )
{
v70 = insert_hint_unique_pos != 0 || p_char228 == (char *)p_char228_2;
if ( !v70 )
v70 = *(_WORD *)(p_char228_2 + 32) > p_char228_3[16];
std::_Rb_tree_insert_and_rebalance(v70, p_char228_3, p_char228_2, &this->char228);
++this->qword248;
p_char228_1 = p_char228_3;
}
else
{
operator delete(p_char228_3);
}
v65 = (unsigned __int16)v59;
goto LABEL_91;
}
}
else
{
LABEL_77:
qword230 = this->qword230;
if ( !qword230 )
goto LABEL_114;
}
v65 = (unsigned __int16)v59;
p_char228_1 = (unsigned __int16 *)&this->char228;
do
{
while ( *(unsigned __int16 *)(qword230 + 32) >= (int)(unsigned __int16)v59 )
{
p_char228_1 = (unsigned __int16 *)qword230;
qword230 = *(_QWORD *)(qword230 + 16);
if ( !qword230 )
goto LABEL_82;
}
qword230 = *(_QWORD *)(qword230 + 24);
}
while ( qword230 );
LABEL_82:
if ( p_char228_1 == (unsigned __int16 *)p_char228 || p_char228_1[16] > (int)(unsigned __int16)v59 )
goto LABEL_84;
LABEL_91:
p_char228_1[17] = v99;
p_char228_1[18] = v100;
v71 = 0;
if ( LOWORD(this->word1C) > v65 )
v71 = this->qword110 + 112LL * (unsigned __int16)v59;
v72 = *(_BYTE *)(*(_QWORD *)(*(_QWORD *)(this->qwordA8 + 8LL * v99) + 24LL) + 40LL * v100 + 2) & 3;
switch ( v72 )
{
case 0:
*(_BYTE *)(v71 + 2) |= 5u;
LABEL_95:
if ( v93 <= (int)++v57 )
goto LABEL_96;
continue;
case 2:
*(_BYTE *)(v71 + 2) |= 6u;
if ( v93 <= (int)++v57 )
goto LABEL_96;
break;
case 1:
*(_BYTE *)(v71 + 2) |= 7u;
if ( v93 <= (int)++v57 )
goto LABEL_96;
break;
default:
goto LABEL_95;
}
}
}
LABEL_96:
HDDMTileType::createedgeds(this);
HDDMTileType::createwirearcs(this, hddmDevice);
HDDMTileType::marknulltiles(this);
HDDMTileType::allocatetileports(this);
p_char1F8 = p_char1F8_2;
if ( p_char1F8_2 )
{
if ( HDDMDeviceDump::useXngMarks )
std::istream::read(stream, HDDMDeviceDump::markBuffer, 5);
p_char1F8_3 = 0;
do
{
HDDMXng::TilePort::TilePort((HDDMXng::TilePort *)&v107);
HDDMDevice::readMessage((HDDMDevice *)stream, (std::istream *)&v107, v75);
n0xFFFF = 0xFFFF;
v77 = v111;
n0xFFFF_1 = 0xFFFF;
if ( (v109 & 0x10) != 0 )
{
n0xFFFF = (unsigned __int16)n0xFFFF_2;
n0xFFFF_1 = (unsigned __int16)n0xFFFF_2;
}
v79 = 0;
v80 = *(HDDMTileFace **)(*(_QWORD *)(*(_QWORD *)(this->qword258 + 8LL * (unsigned __int16)v110) + 48LL)
+ 8LL * WORD2(v110));
if ( LOWORD(this->word1C) > n0xFFFF_1 )
v79 = (const HDDMWire *)(this->qword110 + 112 * n0xFFFF);
v81 = (HDDMTilePort *)operator new(0x18u);
HDDMTilePort::HDDMTilePort(v81, v80, (unsigned int)v77, HIDWORD(v77), v79);
v105[0] = v81;
v74 = (HDDMTilePort **)*((_QWORD *)v80 + 7);
if ( v74 == *((HDDMTilePort ***)v80 + 8) )
{
std::vector<HDDMTilePort *>::_M_emplace_back_aux<HDDMTilePort * const&>((char *)v80 + 48, v105);
}
else
{
if ( v74 )
{
*v74 = v81;
v74 = (HDDMTilePort **)*((_QWORD *)v80 + 7);
}
*((_QWORD *)v80 + 7) = v74 + 1;
}
if ( v79 )
HDDMWire::addtileport(v79, (HDDMTilePort *)v105[0]);
++p_char1F8_3;
HDDMXng::TilePort::~TilePort((HDDMXng::TilePort *)&v107);
}
while ( p_char1F8_3 != p_char1F8 );
}
HDDMXng::TileType::~TileType((HDDMXng::TileType *)tiletype_msg);
}
void __fastcall HDDMTileType::writeme_pb(HDDMTileType *this, std::ostream *stream, __int16 isTilePort)
{
int tileType_code7_low; // ecx
unsigned __int16 tileType_code; // ax
int n0x7FFFFFFF; // ecx
int v8; // eax
int tileType_code3; // eax
int tileType_code6_low; // edx
unsigned __int8 v11; // al
unsigned __int16 tileType_code1_high; // dx
_QWORD *p_qword40; // rsi
__int64 v14; // rax
__int64 v15; // r12
__int64 v16; // r14
int v17; // esi
google::protobuf::Arena *v18; // r13
HDDMXng::SiteChildDef *Aligned; // rax
HDDMXng::SiteChildDef *Aligned_1; // rbx
__int64 v21; // rax
void *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_4; // rdi
int v23; // eax
int v24; // edx
int v25; // edx
int v26; // edx
int v27; // edx
__int64 v28; // rsi
_DWORD *v29; // rdx
__int64 v30; // rcx
int v31; // eax
__int64 qword1D8; // rax
__int64 v33; // rdx
__int64 v34; // rbx
__int64 v35; // r13
int v36; // r12d
__int64 n4_6; // rax
_QWORD *v38; // r14
int n4; // r15d
google::protobuf::Arena *v40; // rsi
unsigned __int64 v41; // rdx
__int64 n4_4; // rax
__int64 n4_2; // rcx
__int64 v44; // r12
int v45; // ebx
__int64 v46; // r12
int v47; // ebx
google::protobuf::internal::RepeatedPtrFieldBase *v48; // rdi
google::protobuf::internal::RepeatedPtrFieldBase *v49; // rbp
unsigned __int16 ***v50; // rbx
unsigned __int16 **v51; // r13
__int64 v52; // r14
unsigned __int16 *v53; // r15
int v54; // eax
int v55; // edx
int v56; // edx
const google::protobuf::Message *v57; // rdx
void **p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2; // rax
void *v59; // rdi
google::protobuf::internal::RepeatedPtrFieldBase *v61; // [rsp+10h] [rbp-128h]
int n4_5; // [rsp+10h] [rbp-128h]
google::protobuf::internal::RepeatedPtrFieldBase *v63; // [rsp+10h] [rbp-128h]
void *v64; // [rsp+20h] [rbp-118h] BYREF
google::protobuf::internal::RepeatedPtrFieldBase *v65; // [rsp+28h] [rbp-110h]
__int64 v66; // [rsp+30h] [rbp-108h]
void *v67[2]; // [rsp+40h] [rbp-F8h] BYREF
void *v68; // [rsp+50h] [rbp-E8h] BYREF
void *v69; // [rsp+58h] [rbp-E0h]
int v70; // [rsp+60h] [rbp-D8h]
int v71; // [rsp+64h] [rbp-D4h]
int v72; // [rsp+68h] [rbp-D0h]
_BYTE tiletype_msg[16]; // [rsp+70h] [rbp-C8h] BYREF
int v74; // [rsp+80h] [rbp-B8h]
google::protobuf::Arena *v75; // [rsp+88h] [rbp-B0h] BYREF
int v76; // [rsp+90h] [rbp-A8h]
int v77; // [rsp+94h] [rbp-A4h]
_DWORD *v78; // [rsp+98h] [rbp-A0h]
int n4_3; // [rsp+A0h] [rbp-98h]
int n4_1; // [rsp+A4h] [rbp-94h]
void *v81; // [rsp+A8h] [rbp-90h]
void *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx; // [rsp+B8h] [rbp-80h] BYREF
void *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_3; // [rsp+C0h] [rbp-78h] BYREF
void **p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1; // [rsp+C8h] [rbp-70h] BYREF
int tileType_code_high; // [rsp+D0h] [rbp-68h]
int v86; // [rsp+D4h] [rbp-64h]
int tileType_code7_low_1; // [rsp+D8h] [rbp-60h]
int n0x7FFFFFFF_1; // [rsp+DCh] [rbp-5Ch]
int tileType_code3_1; // [rsp+E0h] [rbp-58h]
int tileType_code4; // [rsp+E4h] [rbp-54h]
int tileType_code5; // [rsp+E8h] [rbp-50h]
int tileType_code6_low_1; // [rsp+ECh] [rbp-4Ch]
int tileType_code6_high; // [rsp+F0h] [rbp-48h]
int v94; // [rsp+F4h] [rbp-44h]
int v95; // [rsp+F8h] [rbp-40h]
if ( HDDMDeviceDump::useXngMarks )
std::ostream::write(stream, "TILETYPE", 8);
HDDMXng::TileType::TileType((HDDMXng::TileType *)tiletype_msg);
tileType_code7_low = LOWORD(this->tileType_code7);
tileType_code_high = HIWORD(this->tileType_code);
tileType_code = this->tileType_code;
tileType_code7_low_1 = tileType_code7_low;
n0x7FFFFFFF = this->tileType_code2;
v86 = tileType_code >> 6;
v8 = v74 | 0x38;
if ( n0x7FFFFFFF != 0x7FFFFFFF )
{
tileType_code3 = this->tileType_code3;
n0x7FFFFFFF_1 = n0x7FFFFFFF;
tileType_code3_1 = tileType_code3;
tileType_code4 = this->tileType_code4;
v8 = v74 | 0x3F8;
tileType_code5 = this->tileType_code5;
}
tileType_code6_low = LOWORD(this->tileType_code6);
v74 = v8 | 0xC01;
tileType_code6_low_1 = tileType_code6_low;
tileType_code6_high = HIWORD(this->tileType_code6);
if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx == &google::protobuf::internal::fixed_address_empty_string[abi:cxx11] )
sub_11C39D0(&p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx, &this->tileType_code8);
else
std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx, &this->tileType_code8);
v11 = BYTE2(this->tileType_code1);
if ( (v11 & 0xE) == 0
|| (tileType_code1_high = HIWORD(this->tileType_code1), (tileType_code1_high & 0xFFF0) == 0xFFF0)
|| (HIWORD(this->tileType_code1) & 0xFFF0) == 0xA790 )
{
v95 = 0;
v74 |= 0x2004u;
if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1 == (void **)&google::protobuf::internal::fixed_address_empty_string[abi:cxx11] )
sub_11C39D0(&p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1, &this->tileType_code8);
else
std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1, &this->tileType_code8);
}
else
{
v74 |= 0x2000u;
v95 = (v11 >> 1) & 7;
HDDMTileType::getTileTypeName[abi:cxx11](v67, tileType_code1_high >> 4);
v74 |= 4u;
if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1 == (void **)&google::protobuf::internal::fixed_address_empty_string[abi:cxx11] )
{
p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2 = (void **)operator new(0x20u);
*p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2 = p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2
+ 2;
if ( v67[0] == &v68 )
{
v59 = v69;
p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2[2] = v68;
p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2[3] = v59;
}
else
{
*p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2 = v67[0];
p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2[2] = v68;
}
p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1 = p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2;
p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2[1] = v67[1];
}
else
{
std::string::operator=(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1, v67);
if ( v67[0] != &v68 )
{
operator delete(v67[0]);
if ( !this->qword48 )
goto LABEL_18;
goto LABEL_13;
}
}
}
if ( !this->qword48 )
goto LABEL_18;
LABEL_13:
v74 |= 2u;
p_qword40 = &this->qword40;
if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_3 == &google::protobuf::internal::fixed_address_empty_string[abi:cxx11] )
sub_11C39D0(&p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_3, p_qword40);
else
std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_3, p_qword40);
LABEL_18:
v64 = 0;
v65 = 0;
v66 = 0;
if ( isTilePort )
{
HDDMTileType::getAllTilePorts(this, &v64);
if ( v65 != v64 )
{
v74 |= 0x1000u;
v94 = (v65 - (google::protobuf::internal::RepeatedPtrFieldBase *)v64) >> 3;
}
}
v14 = (__int64)(this->qwordB0 - this->qwordA8) >> 3;
if ( (_WORD)v14 )
{
v15 = 0;
v16 = 2LL * ((unsigned int)(unsigned __int16)v14 - 1) + 2;
while ( 1 )
{
v29 = v78;
v17 = v77;
if ( !v78 )
goto LABEL_34;
v30 = v76;
v31 = *v78;
if ( v76 >= *v78 )
break;
++v76;
Aligned_1 = *(HDDMXng::SiteChildDef **)&v78[2 * v30 + 2];
LABEL_29:
p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_4 = (void *)*((_QWORD *)Aligned_1 + 3);
v23 = *((_DWORD *)Aligned_1 + 4);
v24 = *(_WORD *)(*(_QWORD *)(this->qwordA8 + 4 * v15) + 16LL) & 0x3FF;
*((_DWORD *)Aligned_1 + 4) = v23 | 2;
*((_DWORD *)Aligned_1 + 8) = v24;
v25 = *(unsigned __int16 *)(this->qwordC0 + v15);
*((_DWORD *)Aligned_1 + 4) = v23 | 6;
*((_DWORD *)Aligned_1 + 9) = v25;
v26 = *(__int16 *)(this->qwordF0 + 2 * v15);
*((_DWORD *)Aligned_1 + 4) = v23 | 0xE;
*((_DWORD *)Aligned_1 + 10) = v26;
v27 = *(__int16 *)(this->qwordF0 + 2 * v15 + 2);
*((_DWORD *)Aligned_1 + 4) = v23 | 0x1E;
*((_DWORD *)Aligned_1 + 11) = v27;
v28 = this->qwordD8 + 16 * v15;
*((_DWORD *)Aligned_1 + 4) = v23 | 0x1F;
if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_4 == &google::protobuf::internal::fixed_address_empty_string[abi:cxx11] )
{
sub_11C39D0((char *)Aligned_1 + 24, v28);
v15 += 2;
if ( v16 == v15 )
goto LABEL_36;
}
else
{
std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_4, v28);
v15 += 2;
if ( v16 == v15 )
goto LABEL_36;
}
}
v17 = v77;
if ( v31 == v77 )
{
LABEL_34:
google::protobuf::internal::RepeatedPtrFieldBase::Reserve(
(google::protobuf::internal::RepeatedPtrFieldBase *)&v75,
v17 + 1);
v29 = v78;
v31 = *v78;
}
*v29 = v31 + 1;
v18 = v75;
if ( v75 )
{
Aligned = (HDDMXng::SiteChildDef *)google::protobuf::Arena::AllocateAligned(
v75,
(const type_info *)&`typeinfo for'HDDMXng::SiteChildDef,
0x30u);
Aligned_1 = Aligned;
if ( Aligned )
HDDMXng::SiteChildDef::SiteChildDef(Aligned);
google::protobuf::Arena::AddListNode(
v18,
Aligned_1,
(void (*)(void *))google::protobuf::internal::arena_destruct_object<HDDMXng::SiteChildDef>);
}
else
{
Aligned_1 = (HDDMXng::SiteChildDef *)operator new(0x30u);
HDDMXng::SiteChildDef::SiteChildDef(Aligned_1);
}
v21 = v76++;
*(_QWORD *)&v78[2 * v21 + 2] = Aligned_1;
goto LABEL_29;
}
LABEL_36:
qword1D8 = this->qword1D8;
v33 = (this->qword1E0 - qword1D8) >> 1;
if ( (_WORD)v33 )
{
v34 = 0;
v35 = 2LL * ((unsigned int)(unsigned __int16)v33 - 1) + 2;
while ( 1 )
{
v36 = *(unsigned __int16 *)(qword1D8 + v34);
n4_6 = n4_3;
if ( n4_3 != n4_1 )
goto LABEL_38;
v38 = v81;
n4 = n4_3 + 1;
if ( v81 )
{
v40 = *(google::protobuf::Arena **)v81;
if ( 2 * n4_3 >= n4 )
n4 = 2 * n4_3;
v61 = *(google::protobuf::internal::RepeatedPtrFieldBase **)v81;
if ( n4 < 4 )
n4 = 4;
v41 = 4LL * n4 + 8;
if ( v40 )
{
v81 = (void *)google::protobuf::Arena::AllocateAligned(v40, (const type_info *)&`typeinfo for'char, v41);
*(_QWORD *)v81 = v61;
n4_4 = n4_3;
n4_2 = n4_1;
n4_1 = n4;
if ( n4_3 <= 0 )
goto LABEL_50;
LABEL_48:
n4_5 = n4_2;
memcpy((char *)v81 + 8, v38 + 1, 4 * n4_4);
n4_2 = n4_5;
goto LABEL_49;
}
}
else
{
if ( 2 * n4_3 >= n4 )
n4 = 2 * n4_3;
if ( n4 < 4 )
n4 = 4;
v41 = 4LL * n4 + 8;
}
v81 = (void *)operator new(v41);
*(_QWORD *)v81 = 0;
n4_4 = n4_3;
n4_2 = n4_1;
n4_1 = n4;
if ( n4_3 > 0 )
goto LABEL_48;
LABEL_49:
if ( v38 )
{
LABEL_50:
if ( !*v38 )
operator delete(v38, 4 * n4_2 + 8);
}
n4_6 = n4_3;
LABEL_38:
v34 += 2;
n4_3 = n4_6 + 1;
v33 = (__int64)v81;
*((_DWORD *)v81 + n4_6 + 2) = v36;
if ( v35 == v34 )
break;
qword1D8 = this->qword1D8;
}
}
HDDMDevice::writeMessage((HDDMDevice *)stream, (std::ostream *)tiletype_msg, (const google::protobuf::Message *)v33);
v44 = 0;
v45 = 0;
if ( LOWORD(this->tileType_code7) )
{
do
{
HDDMWire::writeme_pb(this->qword110 + v44, (HDDMTileType *)stream);
++v45;
v44 += 112;
}
while ( LOWORD(this->tileType_code7) > v45 );
}
v46 = 0;
v47 = 0;
if ( HIWORD(this->tileType_code) )
{
do
{
HDDMArc::writeme_pb(this->qword108 + v46, (HDDMTileType *)stream);
++v47;
v46 += 24;
}
while ( HIWORD(this->tileType_code) > v47 );
}
v48 = (google::protobuf::internal::RepeatedPtrFieldBase *)v64;
v63 = v65;
if ( v65 != v64 )
{
if ( !HDDMDeviceDump::useXngMarks
|| (std::ostream::write(stream, "PORTS", 5),
v48 = (google::protobuf::internal::RepeatedPtrFieldBase *)v64,
v63 = v65,
v65 != v64) )
{
v49 = v48;
do
{
v50 = *(unsigned __int16 ****)v49;
v51 = **(unsigned __int16 ****)v49;
v52 = *(_QWORD *)(*(_QWORD *)v49 + 16LL);
v53 = *v51;
HDDMXng::TilePort::TilePort((HDDMXng::TilePort *)v67);
v54 = (int)v68;
LODWORD(v69) = *v53;
LODWORD(v68) = (unsigned int)v68 | 1;
v55 = *((unsigned __int16 *)v51 + 4);
LODWORD(v68) = v54 | 3;
HIDWORD(v69) = v55;
v56 = *((_DWORD *)v50 + 2);
LODWORD(v68) = v54 | 7;
v70 = v56;
v57 = (const google::protobuf::Message *)*((unsigned int *)v50 + 3);
LODWORD(v68) = v54 | 0xF;
v71 = (int)v57;
if ( v52 )
{
v57 = (const google::protobuf::Message *)*(unsigned __int16 *)(v52 + 10);
LODWORD(v68) = v54 | 0x1F;
v72 = (int)v57;
}
HDDMDevice::writeMessage((HDDMDevice *)stream, (std::ostream *)v67, v57);
v49 = (google::protobuf::internal::RepeatedPtrFieldBase *)((char *)v49 + 8);
HDDMXng::TilePort::~TilePort((HDDMXng::TilePort *)v67);
}
while ( v63 != v49 );
v48 = (google::protobuf::internal::RepeatedPtrFieldBase *)v64;
}
}
if ( v48 )
operator delete(v48);
HDDMXng::TileType::~TileType((HDDMXng::TileType *)tiletype_msg);
}
void __fastcall HDDMTileType::print(HDDMTileType *this, std::ostream *stream, std::string *filename)
{
__int64 v4; // rbx
__int64 v5; // rax
__int64 v6; // r12
char v7; // r15
__int64 v8; // r12
__int64 v9; // rbx
__int64 v10; // rbx
__int64 v11; // rax
__int64 v12; // r12
__int64 v13; // rax
__int64 v14; // rbx
__int64 v15; // rax
__int64 v16; // rbx
__int64 v17; // rax
__int64 v18; // rbx
__int64 v19; // rax
unsigned int tileType_code3; // r15d
unsigned int tileType_code2; // r12d
__int64 v22; // rbx
__int64 v23; // rbx
__int64 v24; // rbx
__int64 v25; // rbx
__int64 v26; // rax
__int64 v27; // rbx
__int64 v28; // rbx
__int64 v29; // rax
int tileType_code7_low; // r12d
__int64 v31; // r12
int v32; // ebx
__int64 v33; // rbx
__int64 v34; // rbx
__int64 v35; // rbx
int word1C_low_1; // ebx
__int64 v37; // r12
int v38; // r12d
__int64 v39; // rax
_QWORD *v40; // rbx
__int64 v41; // rax
__int64 v42; // r15
unsigned __int16 v43; // [rsp+4h] [rbp-94h]
unsigned int tileType_code5; // [rsp+4h] [rbp-94h]
int v45; // [rsp+4h] [rbp-94h]
unsigned int tileType_code4; // [rsp+8h] [rbp-90h]
void *v47; // [rsp+20h] [rbp-78h] BYREF
__int64 v48; // [rsp+28h] [rbp-70h]
_BYTE v49[16]; // [rsp+30h] [rbp-68h] BYREF
void *v50; // [rsp+40h] [rbp-58h] BYREF
__int64 v51; // [rsp+48h] [rbp-50h]
_BYTE v52[72]; // [rsp+50h] [rbp-48h] BYREF
v4 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v4, "TILETYPE ", 9);
v5 = std::__ostream_insert<char,std::char_traits<char>>(v4, this->tileType_code8, this->tileType_code9);
std::endl<char,std::char_traits<char>>(v5);
LOWORD(v4) = HIWORD(this->tileType_code);
v6 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v6, "m_numarcs : ", 12);
std::ostream::_M_insert<unsigned long>(v6, (unsigned __int16)v4);
LOBYTE(v4) = this->tileType_code & 0xF;
v43 = LOWORD(this->tileType_code) >> 6;
v7 = LOBYTE(this->tileType_code) >> 5;
v8 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v8, " m_deviceid : ", 14);
v9 = std::ostream::_M_insert<unsigned long>(v8, (unsigned __int8)v4);
std::__ostream_insert<char,std::char_traits<char>>(v9, " m_interconnct : ", 17);
v10 = std::ostream::_M_insert<unsigned long>(v9, v7 & 1);
std::__ostream_insert<char,std::char_traits<char>>(v10, " m_gidx : ", 10);
v11 = std::ostream::_M_insert<unsigned long>(v10, v43);
std::endl<char,std::char_traits<char>>(v11);
LOWORD(v10) = this->tileType_code7;
v12 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v12, " m_numwires : ", 14);
v13 = std::ostream::_M_insert<unsigned long>(v12, (unsigned __int16)v10);
std::endl<char,std::char_traits<char>>(v13);
HDDMTileType::getTileTypeName[abi:cxx11](&v50, (this->tileType_code1 >> 5) & 0xFFF);
v14 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v14, " m_ttypeenum : ", 15);
v15 = std::__ostream_insert<char,std::char_traits<char>>(v14, v50, v51);
std::endl<char,std::char_traits<char>>(v15);
if ( v50 != v52 )
operator delete(v50);
HDDMTileType::getTileTypeName[abi:cxx11](&v50, HIWORD(this->tileType_code1) >> 4);
v16 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v16, " m_basetypeenum : ", 18);
v17 = std::__ostream_insert<char,std::char_traits<char>>(v16, v50, v51);
std::endl<char,std::char_traits<char>>(v17);
if ( v50 != v52 )
operator delete(v50);
v48 = 0;
v49[0] = 0;
v47 = v49;
switch ( (BYTE2(this->tileType_code1) >> 1) & 7 )
{
case 0:
std::string::assign(&v47, "R0");
break;
case 1:
std::string::assign(&v47, "R90");
break;
case 2:
std::string::assign(&v47, "R180");
break;
case 3:
std::string::assign(&v47, "R270");
break;
case 4:
std::string::assign(&v47, "MX");
break;
case 5:
std::string::assign(&v47, "MY");
break;
case 6:
std::string::assign(&v47, "MX90");
break;
case 7:
std::string::assign(&v47, "MY90");
break;
}
v18 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v18, " m_transform : ", 15);
v19 = std::__ostream_insert<char,std::char_traits<char>>(v18, v47, v48);
std::endl<char,std::char_traits<char>>(v19);
tileType_code3 = this->tileType_code3;
tileType_code2 = this->tileType_code2;
tileType_code5 = this->tileType_code5;
tileType_code4 = this->tileType_code4;
v22 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v22, "m_xmin : ", 9);
v23 = std::ostream::operator<<(v22, tileType_code2);
std::__ostream_insert<char,std::char_traits<char>>(v23, " m_xmax : ", 10);
v24 = std::ostream::operator<<(v23, tileType_code3);
std::__ostream_insert<char,std::char_traits<char>>(v24, " m_ymin : ", 10);
v25 = std::ostream::operator<<(v24, tileType_code4);
std::__ostream_insert<char,std::char_traits<char>>(v25, " m_ymax : ", 10);
v26 = std::ostream::operator<<(v25, tileType_code5);
std::endl<char,std::char_traits<char>>(v26);
LOWORD(tileType_code3) = HIWORD(this->tileType_code6);
LOWORD(tileType_code2) = this->tileType_code6;
v27 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v27, "m_xgridextent : ", 16);
v28 = std::ostream::_M_insert<unsigned long>(v27, (unsigned __int16)tileType_code2);
std::__ostream_insert<char,std::char_traits<char>>(v28, " m_ygridextent : ", 17);
v29 = std::ostream::_M_insert<unsigned long>(v28, (unsigned __int16)tileType_code3);
std::endl<char,std::char_traits<char>>(v29);
tileType_code7_low = LOWORD(this->tileType_code7);
if ( LOWORD(this->tileType_code7) )
{
v35 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v35, "WIRES :", 7);
std::endl<char,std::char_traits<char>>(v35);
word1C_low_1 = 0;
while ( 1 )
{
HDDMWire::print(this->qword110 + 112LL * word1C_low_1++, (HDDMTileType *)stream, filename);
if ( tileType_code7_low == word1C_low_1 )
break;
std::__ostream_insert<char,std::char_traits<char>>(stream, ",", 1);
std::endl<char,std::char_traits<char>>(stream);
if ( tileType_code7_low <= word1C_low_1 )
goto LABEL_8;
}
std::__ostream_insert<char,std::char_traits<char>>(stream, ";", 1);
std::endl<char,std::char_traits<char>>(stream);
}
LABEL_8:
v31 = 0;
v32 = 0;
if ( HIWORD(this->tileType_code) )
{
do
{
HDDMArc::print(this->qword108 + v31, (HDDMTileType *)stream, filename);
++v32;
v31 += 24;
}
while ( HIWORD(this->tileType_code) > v32 );
}
v33 = (__int64)(this->qwordB0 - this->qwordA8) >> 3;
v45 = v33;
if ( (_DWORD)v33 )
{
v37 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v37, "CHILDREN :", 10);
std::endl<char,std::char_traits<char>>(v37);
if ( (int)v33 > 0 )
{
v38 = 0;
while ( 1 )
{
v39 = *(_QWORD *)(this->qwordA8 + 8LL * v38);
v50 = v52;
v40 = (_QWORD *)(this->qwordD8 + 32LL * v38);
sub_13D9EE0(&v50, *(_QWORD *)(v39 + 32), *(_QWORD *)(v39 + 40) + *(_QWORD *)(v39 + 32));
v41 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
v42 = std::__ostream_insert<char,std::char_traits<char>>(v41, v50, v51);
std::__ostream_insert<char,std::char_traits<char>>(v42, " ", 1);
std::__ostream_insert<char,std::char_traits<char>>(v42, *v40, v40[1]);
if ( v50 != v52 )
operator delete(v50);
if ( v45 == ++v38 )
break;
std::__ostream_insert<char,std::char_traits<char>>(stream, ",", 1);
std::endl<char,std::char_traits<char>>(stream);
if ( v45 <= v38 )
goto LABEL_11;
}
std::__ostream_insert<char,std::char_traits<char>>(stream, ";", 1);
std::endl<char,std::char_traits<char>>(stream);
}
}
LABEL_11:
v34 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1));
std::__ostream_insert<char,std::char_traits<char>>(v34, "end BLOCK;", 10);
std::endl<char,std::char_traits<char>>(v34);
if ( v47 != v49 )
operator delete(v47);
}
最新发布