函数组:V45I

V45I函数组详解

函数组:V45I
函数组说明:读销售单据表
这个函数组包含的函数主要用来读取各类销售单据表,如:VBAK、VBAP、VBEP、VBFA、VBKD、VBPA、VBUK、VBUP 等。

SD_BUFFER_TABLES_REFRESH
SD_KOMV_ARRAY_SELECT
SD_KVBKD_GET_DATA
SD_KVBKD_PUT_DATA
SD_OPEN_DOCUMENTS_CHECK
SD_PARTNER_CHANGED_PUT_DATA
SD_PUSH_ITEM
SD_SALES_DOCUMENT_PREFETCH
SD_SALES_DOCUMENT_PRESELECT
SD_SALES_DOCUMENT_REFRESH
SD_SALES_DOCUMENT_VIEW_1
SD_THEAD_ARRAY_SELECT
SD_V45I_REFRESH
SD_VBAK_ARRAY_READ
SD_VBAK_SELECT
SD_VBAK_SINGLE_READ
SD_VBAK_TRANSFER_TO_BUFFER
SD_VBAP_ARRAY_READ
SD_VBAP_ARRAY_READ_VBELN
SD_VBAP_GET_ACCOUNT_ASSIGNMENT
SD_VBAP_GET_NEXT
SD_VBAP_READ_WITH_OBJNR
SD_VBAP_READ_WITH_VBELN
SD_VBAP_SELECT
SD_VBAP_SELECT_STRUCTURE
SD_VBAP_SINGLE_READ
SD_VBAP_TRANSFER_TO_BUFFER
SD_VBAP_VWPOS_GET
SD_VBEP_ARRAY_READ_VBELN
SD_VBEP_READ_WITH_POSNR
SD_VBEP_READ_WITH_VBELN
SD_VBEP_SELECT
SD_VBEP_SINGLE_READ
SD_VBEP_TRANSFER_TO_BUFFER
SD_VBFA_ARRAY_READ_VBELV
SD_VBFA_READ_WITH_VBELV
SD_VBFA_SELECT
SD_VBFA_SINGLE_READ
SD_VBFA_TRANSFER_TO_BUFFER
SD_VBKD_ARRAY_READ
SD_VBKD_ARRAY_READ_VBELN
SD_VBKD_READ_WITH_VBELN
SD_VBKD_SELECT
SD_VBKD_SINGLE_READ
SD_VBKD_TRANSFER_TO_BUFFER
SD_VBPA_ARRAY_READ_VBELN
SD_VBPA_READ_WITH_VBELN
SD_VBPA_SADR_ARRAY_SELECT
SD_VBPA_SELECT
SD_VBPA_SINGLE_READ
SD_VBPA_TRANSFER_TO_BUFFER
SD_VBUK_ARRAY_READ
SD_VBUK_SELECT
SD_VBUK_SINGLE_READ
SD_VBUK_TRANSFER_TO_BUFFER
SD_VBUP_ARRAY_READ
SD_VBUP_ARRAY_READ_VBELN
SD_VBUP_READ_WITH_VBELN
SD_VBUP_SELECT
SD_VBUP_SINGLE_READ
SD_VBUP_TRANSFER_TO_BUFFER
SD_VBUV_ARRAY_READ_VBELN
SD_VBUV_READ_WITH_VBELN
SD_VBUV_TRANSFER_TO_BUFFER 0 0 0

请仔细阅读和分析下面函数,保持函数原始逻辑功能不变, 不要遗漏逻辑细节,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码 要求如下: 1.保持原始函数定义不变,不要拆分函数 2.保持所有原始逻辑功能不变 3.结构体采用32位定义 4.严格保持protobuf字段映射关系,不要遗漏protobuf字段内容 5.提高执行效率,降低计算复杂度 6.已经给定的结构体名字和元素不要更改,详细的中文注释 7.自动添加中文注释说明功能逻辑 8.不使用 auto,使用显式 for 循环 特别注意: 1.函数中有关位操作不变,函数间的位操作一致,定义32位的 wire_code、wire_code1、wire_code2 位域结构体并详细注释 2.函数中的 HDDMXng::Wire::Wire 映射为 message Wire { optional uint32 flags = 1; optional uint32 graphid = 2; repeated sint32 intersects = 3 [packed = true]; optional uint32 speedidx = 4; optional uint32 tiedvalue = 5; optional uint32 wirebusmark = 6; optional uint32 costcode = 7; optional string name = 8; } 3.采用 google::protobuf::Descriptor 和 google::protobuf::Reflection 进行编程 4.将 _BYTE wire_msg[20] 映射为 HDDMXng::Wire wire_msg; 5.将 _QWORD *nameSet 映射为 std::set<std::string> *nameSet; void __fastcall HDDMWire::readme_pb(HDDMWire *this, std::istream *stream, HDDMDevice *hddmDevice, _QWORD *nameSet) { google::protobuf::Message *v5; // rdx __int16 v6; // dx unsigned __int16 v7; // ax __int16 v8; // dx __int16 v9; // ax __int64 interSectsVec; // rax unsigned __int8 v11; // dl __int64 v12; // rdx int v13; // ecx char v14; // al std::string *v15; // rsi size_t v16; // rdx _QWORD *v17; // r15 size_t v18; // r14 const void *v19; // rdi _QWORD *v20; // rax _QWORD *v21; // r12 size_t v22; // r13 size_t v23; // rbx signed __int64 v24; // rax __int64 v25; // rbx int v26; // eax const std::string *v27; // rsi volatile signed __int32 *v28; // rdi _QWORD *v29; // r12 _QWORD *v30; // rsi size_t v31; // r15 size_t v32; // rbx size_t v33; // rdx int v34; // eax unsigned int v35; // r14d __int64 v36; // rax __int64 v37; // rbx __int64 v38; // r15 int v39; // eax int v40; // edx void *s1; // [rsp+8h] [rbp-E0h] _QWORD *v43; // [rsp+20h] [rbp-C8h] char v44; // [rsp+3Fh] [rbp-A9h] BYREF void *v45[2]; // [rsp+40h] [rbp-A8h] BYREF _BYTE v46[20]; // [rsp+50h] [rbp-98h] BYREF __int16 v47; // [rsp+64h] [rbp-84h] __int64 v48; // [rsp+68h] [rbp-80h] char v49; // [rsp+70h] [rbp-78h] int v50; // [rsp+8Ch] [rbp-5Ch] char v51; // [rsp+90h] [rbp-58h] char v52; // [rsp+94h] [rbp-54h] int v53; // [rsp+98h] [rbp-50h] std::string *v54; // [rsp+A0h] [rbp-48h] int v55; // [rsp+ACh] [rbp-3Ch] if ( HDDMDeviceDump::useXngMarks ) std::istream::read(stream, HDDMDeviceDump::markBuffer, 4LL); HDDMXng::Wire::Wire((HDDMXng::Wire *)v46); HDDMDevice::readMessage((HDDMDevice *)stream, (std::istream *)v46, v5); v6 = v47; BYTE2(this->wire_code) = (8 * (v46[16] & 1)) | BYTE2(this->wire_code) & 0xF7; v7 = v6 & 0x3FF | this->wire_code & 0xFC00; LOBYTE(v6) = v49; LOWORD(this->wire_code) = v7; v8 = v6 & 0x3F; v9 = (4 * v8) | HIBYTE(v7) & 3; BYTE1(this->wire_code) = v9; if ( (v9 & 0xFC) != 0 ) { interSectsVec = operator new[](4LL * (unsigned __int8)v8); v11 = BYTE1(this->wire_code); this->interSectsVec = interSectsVec; if ( v11 >> 2 ) { v12 = 0LL; v13 = 0; while ( 1 ) { ++v13; *(_DWORD *)(interSectsVec + v12) = *(_DWORD *)(v48 + v12); v12 += 4LL; if ( BYTE1(this->wire_code) >> 2 <= v13 ) break; interSectsVec = this->interSectsVec; } } } v14 = v55; if ( (v55 & 8) != 0 ) LOWORD(this->wire_code2) = v50; if ( (v14 & 0x10) != 0 ) BYTE2(this->wire_code) = (16 * (v51 & 3)) | BYTE2(this->wire_code) & 0xCB | 4; if ( (v14 & 0x20) != 0 ) BYTE2(this->wire_code1) = (16 * v52) | BYTE2(this->wire_code1) & 7 | 8; if ( (v14 & 0x40) != 0 ) HIBYTE(this->wire_code1) = v53; v15 = v54; std::string::string((std::string *)v45, v54); v17 = (_QWORD *)nameSet[2]; v43 = nameSet + 1; if ( !v17 ) { v17 = nameSet + 1; goto LABEL_47; } s1 = v45[0]; v18 = *((_QWORD *)v45[0] - 3); v19 = v45[0]; while ( 1 ) { v21 = (_QWORD *)v17[4]; v22 = *(v21 - 3); v23 = v22; if ( v18 <= v22 ) v23 = v18; LODWORD(v24) = memcmp(v19, (const void *)v17[4], v23); if ( !(_DWORD)v24 ) break; LABEL_19: if ( (int)v24 >= 0 ) goto LABEL_26; LABEL_20: v20 = (_QWORD *)v17[2]; v15 = (std::string *)(&dword_0 + 1); if ( !v20 ) goto LABEL_27; LABEL_21: v19 = s1; v17 = v20; } v24 = v18 - v22; if ( (__int64)(v18 - v22) <= 0x7FFFFFFF ) { if ( v24 < (__int64)0xFFFFFFFF80000000LL ) goto LABEL_20; goto LABEL_19; } LABEL_26: v20 = (_QWORD *)v17[3]; v15 = 0LL; if ( v20 ) goto LABEL_21; LABEL_27: v16 = v23; v25 = (__int64)v17; if ( !(_BYTE)v15 ) goto LABEL_28; LABEL_47: v29 = (_QWORD *)nameSet[3]; if ( v29 == v17 ) { LABEL_38: if ( v43 == v29 ) goto LABEL_54; v30 = (_QWORD *)v29[4]; v31 = *((_QWORD *)v45[0] - 3); v32 = *(v30 - 3); v33 = v31; if ( v32 <= v31 ) v33 = *(v30 - 3); v34 = memcmp(v45[0], v30, v33); if ( !v34 ) { v35 = 0; if ( (__int64)(v31 - v32) > 0x7FFFFFFF ) { LABEL_43: v36 = operator new(0x28uLL); v37 = v36; v38 = 32LL; if ( v36 ) { v38 = v36 + 32; *(_DWORD *)v36 = 0; *(_QWORD *)(v36 + 8) = 0LL; *(_QWORD *)(v36 + 16) = 0LL; *(_QWORD *)(v36 + 24) = 0LL; std::string::string((std::string *)(v36 + 32), (const std::string *)v45); } std::_Rb_tree_insert_and_rebalance(v35, v37, v29, v43); v27 = (const std::string *)v38; ++nameSet[5]; goto LABEL_31; } if ( (__int64)(v31 - v32) < (__int64)0xFFFFFFFF80000000LL ) { LABEL_54: v35 = 1; goto LABEL_43; } v34 = v31 - v32; } v35 = 0; if ( v34 >= 0 ) goto LABEL_43; goto LABEL_54; } v25 = std::_Rb_tree_decrement(v17, v15, v16); v21 = *(_QWORD **)(v25 + 32); v18 = *((_QWORD *)v45[0] - 3); s1 = v45[0]; v22 = *(v21 - 3); v16 = v18; if ( v22 <= v18 ) v16 = *(v21 - 3); LABEL_28: v26 = memcmp(v21, s1, v16); if ( v26 ) { LABEL_35: if ( v26 < 0 ) goto LABEL_36; } else { if ( (__int64)(v22 - v18) > 0x7FFFFFFF ) goto LABEL_30; if ( (__int64)(v22 - v18) >= (__int64)0xFFFFFFFF80000000LL ) { v26 = v22 - v18; goto LABEL_35; } LABEL_36: if ( v17 ) { v29 = v17; goto LABEL_38; } v25 = 0LL; } LABEL_30: v27 = (const std::string *)(v25 + 32); LABEL_31: std::string::assign((std::string *)&this->wire_name, v27); v28 = (volatile signed __int32 *)((char *)v45[0] - 24); if ( (char *)v45[0] - 24 != (char *)&std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v39 = _InterlockedExchangeAdd(v28 + 4, 0xFFFFFFFF); } else { v40 = *((_DWORD *)v45[0] - 2); *((_DWORD *)v45[0] - 2) = v40 - 1; v39 = v40; } if ( v39 <= 0 ) std::string::_Rep::_M_destroy(v28, &v44); } HDDMXng::Wire::~Wire((HDDMXng::Wire *)v46); } void __fastcall HDDMWire::writeme_pb(HDDMWire *this, std::ostream *stream) { unsigned __int8 v3; // dl int v4; // eax __int64 v5; // rbp int v6; // ebx int v7; // r13d __int64 v8; // rax int v9; // eax _DWORD *v10; // r14 unsigned __int64 v11; // rdi unsigned __int8 v12; // cl std::string **p_wire_name; // r12 std::string *v14; // rdi const google::protobuf::Message *v15; // rdx __int16 wire_code; // [rsp+0h] [rbp-A8h] _BYTE v17[16]; // [rsp+10h] [rbp-98h] BYREF _BOOL4 v18; // [rsp+20h] [rbp-88h] int v19; // [rsp+24h] [rbp-84h] void *src; // [rsp+28h] [rbp-80h] int v21; // [rsp+30h] [rbp-78h] int v22; // [rsp+34h] [rbp-74h] _DWORD v23[10]; // [rsp+38h] [rbp-70h] BYREF std::string *v24; // [rsp+60h] [rbp-48h] int v25; // [rsp+6Ch] [rbp-3Ch] if ( HDDMDeviceDump::useXngMarks ) std::ostream::write(stream, "WIRE", 4LL); HDDMXng::Wire::Wire((HDDMXng::Wire *)v17); v3 = BYTE2(this->wire_code); wire_code = this->wire_code; v4 = v25 | 3; v25 |= 3u; v18 = (v3 & 8) != 0; v19 = wire_code & 0x3FF; if ( BYTE1(this->wire_code) >> 2 ) { v5 = 0LL; v6 = 0; do { v7 = *(_DWORD *)(this->interSectsVec + v5); v8 = v21; if ( v21 == v22 ) { v9 = v21 + 1; v10 = src; if ( 2 * v21 >= v21 + 1 ) v9 = 2 * v21; v22 = v9; v11 = 4LL * v9; if ( (unsigned __int64)v9 > 0x1FC0000000000000LL ) v11 = -1LL; src = (void *)operator new[](v11); memcpy(src, v10, 4LL * v21); if ( v10 != v23 && v10 ) operator delete[](v10); v8 = v21; } ++v6; v5 += 4LL; v21 = v8 + 1; *((_DWORD *)src + v8) = v7; } while ( BYTE1(this->wire_code) >> 2 > v6 ); v3 = BYTE2(this->wire_code); v4 = v25; } v12 = BYTE2(this->wire_code1); if ( (v12 & 8) != 0 ) { v4 |= 0x20u; v23[7] = v12 >> 4; } if ( LOWORD(this->wire_code2) != 0xFFFF ) { v23[5] = LOWORD(this->wire_code2); v4 |= 8u; } if ( HIBYTE(this->wire_code1) != 0xFF ) { v23[8] = HIBYTE(this->wire_code1); v4 |= 0x40u; } if ( (v3 & 0x30) != 0 ) { v4 |= 0x10u; v23[6] = (v3 >> 4) & 3; } LOBYTE(v4) = v4 | 0x80; p_wire_name = &this->wire_name; v14 = v24; v25 = v4; if ( v24 == (std::string *)&google::protobuf::internal::kEmptyString ) { v14 = (std::string *)operator new(8uLL); *(_QWORD *)v14 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24; v24 = v14; } std::string::assign(v14, (const std::string *)p_wire_name); HDDMDevice::writeMessage((HDDMDevice *)stream, (std::ostream *)v17, v15); HDDMXng::Wire::~Wire((HDDMXng::Wire *)v17); } void __fastcall HDDMWire::print(HDDMWire *this, std::ostream *stream, const std::string *filename) { __int64 v6; // rbp __int64 v7; // rbx __int64 v8; // rdi int v9; // ebx __int64 v10; // rax __int64 v11; // rsi __int64 v12; // rdx int v13; // eax unsigned int v14; // r15d int v15; // eax __int64 v16; // rax const char *v17; // rsi __int64 v18; // rcx __int64 wire_code1_high; // rbp __int64 v20; // rbx __int64 wire_code2_low; // rbp __int64 v22; // rbx __int64 v23; // rax __int64 v24; // [rsp+8h] [rbp-40h] v6 = 0LL; v7 = std::__ostream_insert<char,std::char_traits<char>>( stream, *(_QWORD *)filename, *(_QWORD *)(*(_QWORD *)filename - 24LL)); std::__ostream_insert<char,std::char_traits<char>>(v7, "WIRE : ", 7LL); v8 = v7; v9 = 0; v10 = std::__ostream_insert<char,std::char_traits<char>>(v8, this->wire_name, *((_QWORD *)this->wire_name - 3)); std::__ostream_insert<char,std::char_traits<char>>(v10, " (", 2LL); if ( BYTE1(this->wire_code) >> 2 ) { do { v11 = *(_QWORD *)filename; v12 = *(_QWORD *)(*(_QWORD *)filename - 24LL); v13 = *(_DWORD *)(this->interSectsVec + v6); v14 = v13 & 0x3FFFF; v15 = (v13 >> 18) & 3; if ( v15 ) { if ( v15 == 1 ) { v18 = std::__ostream_insert<char,std::char_traits<char>>(stream, v11, v12); v17 = " RX="; } else if ( v15 == 2 ) { v18 = std::__ostream_insert<char,std::char_traits<char>>(stream, v11, v12); v17 = " BX="; } else { v16 = std::__ostream_insert<char,std::char_traits<char>>(stream, v11, v12); v17 = " LX="; v18 = v16; } } else { v18 = std::__ostream_insert<char,std::char_traits<char>>(stream, v11, v12); v17 = " TX="; } v24 = v18; ++v9; std::__ostream_insert<char,std::char_traits<char>>(v18, v17, 4LL); v6 += 4LL; std::ostream::operator<<(v24, v14); } while ( BYTE1(this->wire_code) >> 2 > v9 ); } wire_code1_high = HIBYTE(this->wire_code1); v20 = std::__ostream_insert<char,std::char_traits<char>>( stream, *(_QWORD *)filename, *(_QWORD *)(*(_QWORD *)filename - 24LL)); std::__ostream_insert<char,std::char_traits<char>>(v20, " CC=", 4LL); std::ostream::_M_insert<unsigned long>(v20, wire_code1_high); wire_code2_low = LOWORD(this->wire_code2); v22 = std::__ostream_insert<char,std::char_traits<char>>( stream, *(_QWORD *)filename, *(_QWORD *)(*(_QWORD *)filename - 24LL)); std::__ostream_insert<char,std::char_traits<char>>(v22, " SM=", 4LL); std::ostream::_M_insert<unsigned long>(v22, wire_code2_low); v23 = std::__ostream_insert<char,std::char_traits<char>>( stream, *(_QWORD *)filename, *(_QWORD *)(*(_QWORD *)filename - 24LL)); std::__ostream_insert<char,std::char_traits<char>>(v23, " )", 2LL); }
11-05
请仔细阅读和深度思考分析下面函数,绝对保持原始代码的处理流程和步骤不变, 绝对不要遗漏各种条件判断和标志位管理的处理和各种逻辑功能处理, 采用 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); }
最新发布
11-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值