Boost库中的function_types::is_function_pointer用法演示

167 篇文章 ¥59.90 ¥99.00
这篇博客介绍了如何利用Boost库的function_types::is_function_pointer模板来判断C++中的类型是否为函数指针。通过示例程序展示了其在判断int、int*和foo函数指针类型时的应用,揭示了该模板的实用价值。

Boost库中的function_types::is_function_pointer用法演示

在使用C++时,我们经常需要判断一个类型是否为函数指针类型。为了方便,Boost库提供了function_types::is_function_pointer模板来实现这个功能。下面是一个演示程序来介绍该模板的用法。

#include <iostream>
#include <boost/function_types/is_function_pointer.hpp>
using namespace boost::function_types
请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码 要求如下: 1.保持所有原始功能不变,不要遗漏逻辑细节 2.提高执行效率,降低计算复杂度 3.已经给定的结构体名字和元素不要更改,详细的中文注释 4.自动添加中文注释说明功能逻辑 5.不使用 auto,使用显式 for 循环 6.结构体采用32位定义 7.不要使用小函数,保持原始的函数定义 8.严格保持protobuf字段映射关系 特别注意: 1.函数中有关位操作不变,函数间的位操作一致 2.函数中的 HDDMXng::BelUsageAttrib::BelUsageAttrib 映射为 message BelUsageAttrib { optional uint32 flags = 1; optional uint32 type = 2; optional uint32 bitwidth = 3; optional string attribname = 4; optional sint32 defint = 5; optional double defdouble = 6; optional bool defbool = 7; optional string defstring = 8; repeated sint32 listofints = 9 [packed = true]; repeated double listofdoubles = 10 [packed = true]; repeated bool listofbools = 11 [packed = true]; repeated string listofstrings = 12; optional uint32 precision = 13; } 3.采用 google::protobuf::Descriptor 和 google::protobuf::Reflection 进行编程 将函数中的 _BYTE attrib_msg[24] 映射为 HDDMXng::BelUsageAttrib attrib_msg void __fastcall HDDMBelUsageAttrib::readme_pb(HDDMBelUsageAttrib *this, std::istream *a2, HDDMDevice *a3) { google::protobuf::Message *v4; // rdx unsigned int v5; // ecx bool v6; // zf _QWORD *v7; // r12 _QWORD *v8; // rbp unsigned __int64 v9; // r15 _QWORD *v10; // r13 __int64 v11; // rbp __int64 v12; // rax __int64 v13; // rcx __int64 v14; // rdi unsigned __int64 v15; // rdx int v16; // esi __int64 v17; // rsi void *v18; // r14 char *v19; // rbp __int64 v20; // r13 char *v21; // r15 int v22; // eax unsigned __int64 v23; // r12 size_t v24; // rdx __int64 v25; // r12 unsigned __int64 v26; // rcx size_t v27; // rdx int v28; // eax __int64 v29; // rax int v30; // eax __int64 *v31; // rax unsigned __int64 v32; // rdx unsigned __int64 v33; // rsi __int64 v34; // r12 __int64 v35; // rax __int64 v36; // r13 unsigned __int64 v37; // r14 char *v38; // rbp __int64 v39; // rax char *v40; // r15 __int64 v41; // r12 int v42; // edi char v43; // si __int64 *v44; // rdi __int64 v45; // rax __int64 v46; // rax void *v47; // r13 __int64 *v48; // rbp __int64 v49; // r14 char *v50; // r15 int v51; // eax unsigned __int64 v52; // r12 size_t v53; // rdx __int64 v54; // r12 unsigned __int64 v55; // rcx size_t v56; // rdx int v57; // eax __int64 v58; // rax int v59; // r13d char **v60; // rax unsigned __int64 v61; // rdx unsigned __int64 v62; // rsi unsigned __int64 v63; // r13 _QWORD *v64; // rax _QWORD *v65; // r12 unsigned __int64 v66; // r13 char *v67; // rax char *v68; // r14 char *v69; // rbp int v70; // r8d void *v71; // r14 __int64 *v72; // rbp __int64 v73; // r13 char *v74; // r15 int v75; // eax unsigned __int64 v76; // r12 size_t v77; // rdx __int64 v78; // r12 unsigned __int64 v79; // rcx size_t v80; // rdx int v81; // eax __int64 v82; // rax char **v83; // rax unsigned __int64 v84; // rdx __int64 v85; // rsi unsigned __int64 v86; // r13 _QWORD *v87; // rax _QWORD *v88; // r12 unsigned __int64 v89; // r13 char *v90; // rax char *v91; // r14 char *v92; // rbp int v93; // r9d __int64 v94; // rcx void *v95; // r14 __int64 *v96; // rbp __int64 qword48; // r13 char *v98; // r15 int v99; // eax unsigned __int64 v100; // r12 size_t v101; // rdx __int64 v102; // r12 unsigned __int64 v103; // rcx size_t v104; // rdx int v105; // eax __int64 v106; // rax char **qword28; // rax unsigned __int64 v108; // rdx __int64 v109; // rsi signed __int64 v110; // r9 signed __int64 v111; // r9 signed __int64 v112; // r9 signed __int64 v113; // r9 int v114; // eax int v115; // ecx int v116; // edx unsigned __int64 v117; // [rsp+0h] [rbp-1E8h] unsigned __int64 v118; // [rsp+0h] [rbp-1E8h] int v119; // [rsp+0h] [rbp-1E8h] int v120; // [rsp+0h] [rbp-1E8h] int v121[2]; // [rsp+8h] [rbp-1E0h] int v122[2]; // [rsp+8h] [rbp-1E0h] unsigned __int64 v123; // [rsp+20h] [rbp-1C8h] unsigned __int64 v124; // [rsp+20h] [rbp-1C8h] unsigned __int64 v125; // [rsp+20h] [rbp-1C8h] unsigned __int64 v126; // [rsp+20h] [rbp-1C8h] void **v127; // [rsp+40h] [rbp-1A8h] BYREF void **v128; // [rsp+50h] [rbp-198h] BYREF void **v129; // [rsp+60h] [rbp-188h] BYREF void **v130; // [rsp+70h] [rbp-178h] BYREF void *v131[2]; // [rsp+80h] [rbp-168h] BYREF __int64 v132; // [rsp+90h] [rbp-158h] BYREF void *v133[2]; // [rsp+A0h] [rbp-148h] BYREF __int64 v134; // [rsp+B0h] [rbp-138h] BYREF void *s1[2]; // [rsp+C0h] [rbp-128h] BYREF __int64 v136; // [rsp+D0h] [rbp-118h] BYREF void *s2[2]; // [rsp+E0h] [rbp-108h] BYREF char v138; // [rsp+F0h] [rbp-F8h] BYREF _BYTE attrib_msg[24]; // [rsp+100h] [rbp-E8h] BYREF int v140; // [rsp+118h] [rbp-D0h] __int64 v141; // [rsp+120h] [rbp-C8h] int v142; // [rsp+130h] [rbp-B8h] __int64 v143; // [rsp+138h] [rbp-B0h] int v144; // [rsp+148h] [rbp-A0h] __int64 v145; // [rsp+150h] [rbp-98h] int v146; // [rsp+168h] [rbp-80h] __int64 v147; // [rsp+170h] [rbp-78h] __int64 v148; // [rsp+178h] [rbp-70h] _QWORD *v149; // [rsp+180h] [rbp-68h] unsigned int v150; // [rsp+188h] [rbp-60h] char v151; // [rsp+18Ch] [rbp-5Ch] __int16 v152; // [rsp+190h] [rbp-58h] int v153; // [rsp+194h] [rbp-54h] __int64 v154; // [rsp+198h] [rbp-50h] char v155; // [rsp+1A0h] [rbp-48h] char v156; // [rsp+1A4h] [rbp-44h] if ( HDDMDeviceDump::useXngMarks ) std::istream::read(a2, HDDMDeviceDump::markBuffer, 14); HDDMXng::BelUsageAttrib::BelUsageAttrib((HDDMXng::BelUsageAttrib *)attrib_msg); HDDMDevice::readMessage((HDDMDevice *)a2, (std::istream *)attrib_msg, v4); v5 = (4 * ((v150 >> 3) & 1)) | (2 * ((v150 >> 2) & 1)) & 0xFFFFFFBB | ((v150 & 2) != 0) | HIBYTE(this->attrib_flags) & 0xB8 | (((v150 >> 4) & 1) << 6); BYTE1(this->attrib_type) = ((unsigned __int8)(v150 >> 7) << 7) | (((v150 & 0x40) != 0) << 6) & 0x7F | (32 * ((v150 & 0x20) != 0)) & 0x7F | BYTE1(this->attrib_type) & 0x1F; v6 = (attrib_msg[16] & 0x10) == 0; HIBYTE(this->attrib_flags) = (8 * (v151 & 7)) | v5 & 0xC7; if ( !v6 ) LOWORD(this->attrib_flags) = v152 & 0xFFF | this->attrib_flags & 0xF000; std::string::_M_assign(&this->qword8, v148); switch ( (HIBYTE(this->attrib_flags) >> 3) & 7 ) { case 1: v86 = v140; v87 = (_QWORD *)operator new(0x18u); v88 = v87; *v87 = 0; v87[1] = 0; v87[2] = 0; if ( !v86 ) { v115 = v140; v87[2] = 0; v87[1] = 0; this->qword28 = v87; if ( v115 <= 0 ) goto LABEL_158; goto LABEL_163; } if ( v86 > 0x3FFFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); v89 = 4 * v86; v90 = (char *)operator new(v89); v91 = &v90[v89]; *v88 = v90; v92 = v90; v88[2] = &v90[v89]; memset(v90, 0, v89); v93 = v140; v88[1] = v91; this->qword28 = v88; if ( v93 <= 0 ) goto LABEL_158; if ( !v89 ) { LABEL_163: v109 = 0; v108 = 0; LABEL_164: std::__throw_out_of_range_fmt( "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v109, v108); } *(_QWORD *)v122 = 0; v94 = 0; v120 = 0; while ( 2 ) { *(_DWORD *)&v92[4 * v94] = *(_DWORD *)(v141 + 4LL * v120 + 8); HDDMBelUsageAttrib::getValueAsString[abi:cxx11]((int)v131); if ( !this->qword48 ) { v98 = &this->char40; goto LABEL_149; } v95 = v131[1]; v96 = (__int64 *)v131[0]; qword48 = this->qword48; v98 = &this->char40; do { while ( 1 ) { v100 = *(_QWORD *)(qword48 + 40); v101 = (size_t)v95; if ( v100 <= (unsigned __int64)v95 ) v101 = *(_QWORD *)(qword48 + 40); if ( !v101 ) break; v99 = memcmp(*(const void **)(qword48 + 32), v96, v101); if ( !v99 ) break; if ( v99 < 0 ) goto LABEL_122; LABEL_115: v98 = (char *)qword48; qword48 = *(_QWORD *)(qword48 + 16); if ( !qword48 ) goto LABEL_123; } v102 = v100 - (_QWORD)v95; if ( v102 > 0x7FFFFFFF || v102 >= (__int64)0xFFFFFFFF80000000LL && (int)v102 >= 0 ) goto LABEL_115; LABEL_122: qword48 = *(_QWORD *)(qword48 + 24); } while ( qword48 ); LABEL_123: if ( v98 == &this->char40 ) goto LABEL_149; v103 = *((_QWORD *)v98 + 5); v104 = (size_t)v95; if ( v103 <= (unsigned __int64)v95 ) v104 = *((_QWORD *)v98 + 5); if ( v104 && (v126 = *((_QWORD *)v98 + 5), v105 = memcmp(v96, *((const void **)v98 + 4), v104), v103 = v126, v105) ) { if ( v105 >= 0 ) goto LABEL_129; LABEL_149: v127 = v131; v106 = sub_12701E0(this->gap38, v98, &v127); v96 = (__int64 *)v131[0]; } else { v106 = (__int64)v98; v112 = (signed __int64)v95 - v103; if ( (__int64)((__int64)v95 - v103) <= 0x7FFFFFFF ) { if ( v112 < (__int64)0xFFFFFFFF80000000LL || (int)v112 < 0 ) goto LABEL_149; LABEL_129: v106 = (__int64)v98; } } *(_WORD *)(v106 + 64) = v120; if ( v96 != &v132 ) operator delete(v96); if ( ++v120 < v140 ) { qword28 = (char **)this->qword28; v94 = ++*(_QWORD *)v122; v92 = *qword28; v108 = (qword28[1] - *qword28) >> 2; if ( v108 <= *(_QWORD *)v122 ) { v109 = *(_QWORD *)v122; goto LABEL_164; } continue; } break; } LABEL_158: LODWORD(this->qword30) = v153; LABEL_7: if ( (attrib_msg[17] & 1) != 0 ) BYTE1(this->attrib_type) = (4 * (v156 & 7)) | BYTE1(this->attrib_type) & 0xE3 | 2; HDDMXng::BelUsageAttrib::~BelUsageAttrib((HDDMXng::BelUsageAttrib *)attrib_msg); return; case 2: v63 = v142; v64 = (_QWORD *)operator new(0x18u); v65 = v64; *v64 = 0; v64[1] = 0; v64[2] = 0; if ( v63 ) { if ( v63 > 0x1FFFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); v66 = 8 * v63; v67 = (char *)operator new(v66); v68 = &v67[v66]; *v65 = v67; v69 = v67; v65[2] = &v67[v66]; memset(v67, 0, v66); v70 = v142; v65[1] = v68; this->qword28 = v65; if ( v70 > 0 ) { *(_QWORD *)v121 = 0; if ( v66 ) { v119 = 0; while ( 1 ) { *(_QWORD *)&v69[8 * *(_QWORD *)v121] = *(_QWORD *)(v143 + 8LL * v119 + 8); HDDMBelUsageAttrib::getValueAsString[abi:cxx11]((int)v133); if ( !this->qword48 ) { v74 = &this->char40; goto LABEL_153; } v71 = v133[1]; v72 = (__int64 *)v133[0]; v73 = this->qword48; v74 = &this->char40; do { while ( 1 ) { v76 = *(_QWORD *)(v73 + 40); v77 = (size_t)v71; if ( v76 <= (unsigned __int64)v71 ) v77 = *(_QWORD *)(v73 + 40); if ( !v77 ) break; v75 = memcmp(*(const void **)(v73 + 32), v72, v77); if ( !v75 ) break; if ( v75 < 0 ) goto LABEL_93; LABEL_86: v74 = (char *)v73; v73 = *(_QWORD *)(v73 + 16); if ( !v73 ) goto LABEL_94; } v78 = v76 - (_QWORD)v71; if ( v78 > 0x7FFFFFFF || v78 >= (__int64)0xFFFFFFFF80000000LL && (int)v78 >= 0 ) goto LABEL_86; LABEL_93: v73 = *(_QWORD *)(v73 + 24); } while ( v73 ); LABEL_94: if ( v74 == &this->char40 ) goto LABEL_153; v79 = *((_QWORD *)v74 + 5); v80 = (size_t)v71; if ( v79 <= (unsigned __int64)v71 ) v80 = *((_QWORD *)v74 + 5); if ( v80 && (v125 = *((_QWORD *)v74 + 5), v81 = memcmp(v72, *((const void **)v74 + 4), v80), v79 = v125, v81) ) { if ( v81 >= 0 ) goto LABEL_100; LABEL_153: v128 = v133; v82 = sub_12701E0(this->gap38, v74, &v128); v72 = (__int64 *)v133[0]; } else { v82 = (__int64)v74; v113 = (signed __int64)v71 - v79; if ( (__int64)((__int64)v71 - v79) <= 0x7FFFFFFF ) { if ( v113 < (__int64)0xFFFFFFFF80000000LL || (int)v113 < 0 ) goto LABEL_153; LABEL_100: v82 = (__int64)v74; } } *(_WORD *)(v82 + 64) = v119; if ( v72 != &v134 ) operator delete(v72); if ( v142 <= ++v119 ) goto LABEL_157; v83 = (char **)this->qword28; ++*(_QWORD *)v121; v69 = *v83; v84 = (v83[1] - *v83) >> 3; if ( v84 <= *(_QWORD *)v121 ) { v85 = *(_QWORD *)v121; goto LABEL_167; } } } LABEL_166: v85 = 0; v84 = 0; LABEL_167: std::__throw_out_of_range_fmt( "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v85, v84); } } else { v116 = v142; v64[2] = 0; v64[1] = 0; this->qword28 = v64; if ( v116 > 0 ) goto LABEL_166; } LABEL_157: this->qword30 = v154; goto LABEL_7; case 3: v34 = v144; v35 = operator new(0x28u); *(_QWORD *)v35 = 0; *(_DWORD *)(v35 + 8) = 0; *(_QWORD *)(v35 + 16) = 0; *(_DWORD *)(v35 + 24) = 0; v36 = v35; *(_QWORD *)(v35 + 32) = 0; v37 = 8 * ((unsigned __int64)(v34 + 63) >> 6); v38 = (char *)operator new(v37); *(_QWORD *)v36 = v38; v39 = v34 + 63; *(_DWORD *)(v36 + 8) = 0; *(_QWORD *)(v36 + 32) = &v38[v37]; if ( v34 >= 0 ) v39 = v34; v40 = &v38[8 * (v39 >> 6)]; v41 = v34 % 64; if ( v41 < 0 ) { v41 += 64; v40 -= 8; } *(_QWORD *)(v36 + 16) = v40; *(_DWORD *)(v36 + 24) = v41; if ( v38 != &v38[v37] ) memset(v38, 0, v37); v42 = v144; this->qword28 = v36; if ( v42 <= 0 ) goto LABEL_141; v43 = *(_BYTE *)(v145 + 8); if ( !(v41 + 8 * (v40 - v38)) ) { v62 = 0; v61 = 0; LABEL_172: std::__throw_out_of_range_fmt( "vector<bool>::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v62, v61); } v118 = 0; LABEL_51: v44 = (__int64 *)&v38[8 * (v118 >> 6)]; v45 = 1LL << v118; if ( v43 ) v46 = *v44 | v45; else v46 = *v44 & ~v45; *v44 = v46; HDDMBelUsageAttrib::getValueAsString[abi:cxx11]((int)s1); if ( !this->qword48 ) { v50 = &this->char40; goto LABEL_138; } v47 = s1[1]; v48 = (__int64 *)s1[0]; v49 = this->qword48; v50 = &this->char40; while ( 1 ) { while ( 1 ) { v52 = *(_QWORD *)(v49 + 40); v53 = (size_t)v47; if ( v52 <= (unsigned __int64)v47 ) v53 = *(_QWORD *)(v49 + 40); if ( v53 ) { v51 = memcmp(*(const void **)(v49 + 32), v48, v53); if ( v51 ) break; } v54 = v52 - (_QWORD)v47; if ( v54 > 0x7FFFFFFF || v54 >= (__int64)0xFFFFFFFF80000000LL && (int)v54 >= 0 ) goto LABEL_57; LABEL_64: v49 = *(_QWORD *)(v49 + 24); if ( !v49 ) { LABEL_65: if ( &this->char40 == v50 ) goto LABEL_138; v55 = *((_QWORD *)v50 + 5); v56 = (size_t)v47; if ( v55 <= (unsigned __int64)v47 ) v56 = *((_QWORD *)v50 + 5); if ( v56 && (v124 = *((_QWORD *)v50 + 5), v57 = memcmp(v48, *((const void **)v50 + 4), v56), v55 = v124, v57) ) { if ( v57 >= 0 ) goto LABEL_71; LABEL_138: v129 = s1; v58 = sub_12701E0(this->gap38, v50, &v129); v48 = (__int64 *)s1[0]; } else { v58 = (__int64)v50; v110 = (signed __int64)v47 - v55; if ( (__int64)((__int64)v47 - v55) <= 0x7FFFFFFF ) { if ( v110 < (__int64)0xFFFFFFFF80000000LL || (int)v110 < 0 ) goto LABEL_138; LABEL_71: v58 = (__int64)v50; } } *(_WORD *)(v58 + 64) = v118; if ( v48 != &v136 ) operator delete(v48); v59 = v118 + 1; if ( v144 <= (int)v118 + 1 ) { LABEL_141: LOBYTE(this->qword30) = v155; goto LABEL_7; } ++v118; v43 = *(_BYTE *)(v145 + v59 + 8); v60 = (char **)this->qword28; v38 = *v60; v61 = *((unsigned int *)v60 + 6) + 8 * (v60[2] - *v60) - *((unsigned int *)v60 + 2); if ( v118 >= v61 ) { v62 = v118; goto LABEL_172; } goto LABEL_51; } } if ( v51 < 0 ) goto LABEL_64; LABEL_57: v50 = (char *)v49; v49 = *(_QWORD *)(v49 + 16); if ( !v49 ) goto LABEL_65; } case 4: case 5: case 6: v9 = v146; v117 = v146; v10 = (_QWORD *)operator new(0x18u); *v10 = 0; v10[1] = 0; v10[2] = 0; if ( v9 ) { if ( v9 > 0x7FFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); v11 = 32 * v117; v12 = operator new(32 * v117); v13 = v12 + 32 * v117; v14 = v12; *v10 = v12; v10[1] = v12; v15 = v117; v10[2] = v13; do { if ( v12 ) { *(_QWORD *)(v12 + 8) = 0; *(_BYTE *)(v12 + 16) = 0; *(_QWORD *)v12 = v12 + 16; } v12 += 32; --v15; } while ( v15 ); v16 = v146; v117 = 0; v10[1] = v13; this->qword28 = v10; if ( v16 > 0 ) { v17 = *(_QWORD *)(v147 + 8); if ( v11 ) { while ( 1 ) { std::string::_M_assign(32 * v117 + v14, v17); HDDMBelUsageAttrib::getValueAsString[abi:cxx11]((int)s2); if ( !this->qword48 ) { v21 = &this->char40; goto LABEL_145; } v18 = s2[1]; v19 = (char *)s2[0]; v20 = this->qword48; v21 = &this->char40; do { while ( 1 ) { v23 = *(_QWORD *)(v20 + 40); v24 = (size_t)v18; if ( v23 <= (unsigned __int64)v18 ) v24 = *(_QWORD *)(v20 + 40); if ( !v24 ) break; v22 = memcmp(*(const void **)(v20 + 32), v19, v24); if ( !v22 ) break; if ( v22 < 0 ) goto LABEL_29; LABEL_22: v21 = (char *)v20; v20 = *(_QWORD *)(v20 + 16); if ( !v20 ) goto LABEL_30; } v25 = v23 - (_QWORD)v18; if ( v25 > 0x7FFFFFFF || v25 >= (__int64)0xFFFFFFFF80000000LL && (int)v25 >= 0 ) goto LABEL_22; LABEL_29: v20 = *(_QWORD *)(v20 + 24); } while ( v20 ); LABEL_30: if ( v21 == &this->char40 ) goto LABEL_145; v26 = *((_QWORD *)v21 + 5); v27 = (size_t)v18; if ( v26 <= (unsigned __int64)v18 ) v27 = *((_QWORD *)v21 + 5); if ( v27 && (v123 = *((_QWORD *)v21 + 5), v28 = memcmp(v19, *((const void **)v21 + 4), v27), v26 = v123, v28) ) { if ( v28 >= 0 ) goto LABEL_36; LABEL_145: v130 = s2; v29 = sub_12701E0(this->gap38, v21, &v130); v19 = (char *)s2[0]; } else { v29 = (__int64)v21; v111 = (signed __int64)v18 - v26; if ( (__int64)((__int64)v18 - v26) <= 0x7FFFFFFF ) { if ( v111 < (__int64)0xFFFFFFFF80000000LL || (int)v111 < 0 ) goto LABEL_145; LABEL_36: v29 = (__int64)v21; } } *(_WORD *)(v29 + 64) = v117; if ( v19 != &v138 ) operator delete(v19); v30 = v117 + 1; if ( v146 <= (int)v117 + 1 ) goto LABEL_6; ++v117; v17 = *(_QWORD *)(v147 + 8LL * v30 + 8); v31 = (__int64 *)this->qword28; v14 = *v31; v32 = (v31[1] - *v31) >> 5; if ( v32 <= v117 ) { v33 = v117; goto LABEL_161; } } } LABEL_160: v33 = v117; v32 = 0; LABEL_161: std::__throw_out_of_range_fmt( "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v33, v32); } } else { v114 = v146; v10[2] = 0; v10[1] = 0; this->qword28 = v10; if ( v114 > 0 ) goto LABEL_160; } LABEL_6: v7 = v149; v8 = (_QWORD *)operator new(0x20u); *v8 = v8 + 2; sub_1269E90(v8, *v7, v7[1] + *v7); this->qword30 = v8; goto LABEL_7; default: goto LABEL_7; } } void __fastcall HDDMBelUsageAttrib::writeme_pb(HDDMBelUsageAttrib *this, std::ostream *stream) { unsigned __int8 attrib_flags_high; // dl int v4; // eax int v5; // ecx int v6; // eax char v7; // cl int v8; // esi __int16 attrib_flags; // ax int v10; // ecx unsigned __int16 v11; // ax _QWORD *p_qword8; // rsi const google::protobuf::Message *v13; // rdx __int64 qword30_2; // xmm0_8 unsigned __int8 v15; // al __int64 *qword28_6; // rax __int64 v17; // r12 __int64 v18; // rax __int64 v19; // r15 unsigned __int64 v20; // r13 int v21; // esi google::protobuf::Arena *v22; // r14 _QWORD *v23; // rax _QWORD *v24; // rbx _QWORD *v25; // rdi __int64 v26; // rax __int64 *qword28_7; // rax unsigned __int64 v28; // rdx _DWORD *v29; // rdx __int64 v30; // r12 __int64 v31; // rcx int v32; // eax __int64 *qword28_4; // rax __int64 v34; // rsi __int64 v35; // rcx __int64 v36; // r13 unsigned __int64 v37; // rbx __int64 *qword28_5; // rax unsigned __int64 v39; // rdx __int64 n4_21; // rax bool v41; // r12 _QWORD *v42; // r15 int n4_8; // edx google::protobuf::Arena *v44; // rdi int n4_7; // eax unsigned __int64 v46; // rdx size_t n; // rdx __int64 n4_12; // rcx __int64 *qword28_2; // rcx __int64 v50; // rax __int64 v51; // rcx __int64 v52; // r13 unsigned __int64 v53; // rbx __int64 *qword28_3; // rdx unsigned __int64 v55; // rdx __int64 v56; // xmm1_8 __int64 n4_19; // rax _QWORD *v58; // r14 int n4_4; // r12d google::protobuf::Arena *v60; // r15 unsigned __int64 v61; // rdx __int64 n4_18; // rax __int64 n4_6; // r15 __int64 *qword28; // rcx __int64 v65; // rax __int64 v66; // rcx __int64 v67; // r14 unsigned __int64 v68; // rbx __int64 *qword28_1; // rdx unsigned __int64 v70; // rdx int v71; // r12d __int64 n4_16; // rax _QWORD *Aligned_1; // r15 int n4; // r13d google::protobuf::Arena *v75; // rdi unsigned __int64 v76; // rdx __int64 n4_15; // rax __int64 n4_2; // rcx char qword30_4; // al int qword30; // eax __int64 qword30_6; // rsi __int64 v82; // rax int n4_11; // eax _QWORD *v84; // rax google::protobuf::internal::RepeatedPtrFieldBase *v85; // [rsp+0h] [rbp-108h] int n4_13; // [rsp+0h] [rbp-108h] google::protobuf::internal::RepeatedPtrFieldBase *v87; // [rsp+0h] [rbp-108h] int n4_3; // [rsp+0h] [rbp-108h] int n4_9; // [rsp+1Ch] [rbp-ECh] _BYTE v91[16]; // [rsp+20h] [rbp-E8h] BYREF int v92; // [rsp+30h] [rbp-D8h] int n4_14; // [rsp+38h] [rbp-D0h] int n4_1; // [rsp+3Ch] [rbp-CCh] void *Aligned; // [rsp+40h] [rbp-C8h] int n4_17; // [rsp+50h] [rbp-B8h] int n4_5; // [rsp+54h] [rbp-B4h] void *v98; // [rsp+58h] [rbp-B0h] int n4_20; // [rsp+68h] [rbp-A0h] int n4_10; // [rsp+6Ch] [rbp-9Ch] void *v101; // [rsp+70h] [rbp-98h] google::protobuf::Arena *v102; // [rsp+80h] [rbp-88h] BYREF int v103; // [rsp+88h] [rbp-80h] int v104; // [rsp+8Ch] [rbp-7Ch] _DWORD *v105; // [rsp+90h] [rbp-78h] void *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx; // [rsp+98h] [rbp-70h] BYREF void *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1; // [rsp+A0h] [rbp-68h] BYREF int v108; // [rsp+A8h] [rbp-60h] int v109; // [rsp+ACh] [rbp-5Ch] int v110; // [rsp+B0h] [rbp-58h] int qword30_1; // [rsp+B4h] [rbp-54h] __int64 qword30_3; // [rsp+B8h] [rbp-50h] char qword30_5; // [rsp+C0h] [rbp-48h] int v114; // [rsp+C4h] [rbp-44h] if ( HDDMDeviceDump::useXngMarks ) std::ostream::write(stream, "BELUSAGEATTRIB", 14); HDDMXng::BelUsageAttrib::BelUsageAttrib((HDDMXng::BelUsageAttrib *)v91); attrib_flags_high = HIBYTE(this->attrib_flags); v4 = attrib_flags_high & 1; v5 = (_BYTE)v4 == 0 ? 4 : 6; v6 = (v4 << 31 >> 31) & 2; if ( (attrib_flags_high & 2) != 0 ) v6 = v5; if ( (attrib_flags_high & 4) != 0 ) v6 |= 8u; if ( (attrib_flags_high & 0x40) != 0 ) v6 |= 0x10u; v7 = BYTE1(this->attrib_type); if ( (v7 & 0x20) != 0 ) v6 |= 0x20u; if ( (v7 & 0x40) != 0 ) v6 |= 0x40u; v8 = v6; if ( v7 < 0 ) { LOBYTE(v8) = v6 | 0x80; v6 = v8; } v108 = v6; attrib_flags = this->attrib_flags; v109 = (attrib_flags_high >> 3) & 7; v10 = v92 | 0xC; v11 = attrib_flags & 0xFFF; if ( v11 ) { v10 = v92 | 0x1C; v110 = v11; } p_qword8 = &this->qword8; v92 = v10 | 1; if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx == &google::protobuf::internal::fixed_address_empty_string[abi:cxx11] ) sub_11C39D0(&p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx, p_qword8); else std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx, p_qword8); v13 = (const google::protobuf::Message *)HIBYTE(this->attrib_flags); switch ( (HIBYTE(this->attrib_flags) >> 3) & 7 ) { case 1: qword28 = (__int64 *)this->qword28; if ( !qword28 ) goto LABEL_102; v65 = *qword28; v66 = (qword28[1] - *qword28) >> 2; if ( (int)v66 <= 0 ) goto LABEL_102; if ( !v66 ) { v70 = 0; v68 = 0; LABEL_140: std::__throw_out_of_range_fmt( "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v68, v70); } v67 = (unsigned int)(v66 - 1); v68 = 0; while ( 2 ) { v71 = *(_DWORD *)(v65 + 4 * v68); n4_16 = n4_14; if ( n4_14 != n4_1 ) goto LABEL_83; Aligned_1 = Aligned; n4 = n4_14 + 1; if ( Aligned ) { v75 = *(google::protobuf::Arena **)Aligned; if ( 2 * n4_14 >= n4 ) n4 = 2 * n4_14; v87 = *(google::protobuf::internal::RepeatedPtrFieldBase **)Aligned; if ( n4 < 4 ) n4 = 4; v76 = 4LL * n4 + 8; if ( v75 ) { Aligned = (void *)google::protobuf::Arena::AllocateAligned(v75, (const type_info *)&`typeinfo for'char, v76); *(_QWORD *)Aligned = v87; n4_15 = n4_14; n4_2 = n4_1; n4_1 = n4; if ( n4_14 <= 0 ) goto LABEL_95; goto LABEL_93; } } else { if ( 2 * n4_14 >= n4 ) n4 = 2 * n4_14; if ( n4 < 4 ) n4 = 4; v76 = 4LL * n4 + 8; } Aligned = (void *)operator new(v76); *(_QWORD *)Aligned = 0; n4_15 = n4_14; n4_2 = n4_1; n4_1 = n4; if ( n4_14 > 0 ) { LABEL_93: n4_3 = n4_2; memcpy((char *)Aligned + 8, Aligned_1 + 1, 4 * n4_15); n4_2 = n4_3; } if ( !Aligned_1 ) goto LABEL_97; LABEL_95: if ( !*Aligned_1 ) operator delete(Aligned_1, 4 * n4_2 + 8); LABEL_97: n4_16 = n4_14; LABEL_83: n4_14 = n4_16 + 1; *((_DWORD *)Aligned + n4_16 + 2) = v71; if ( v68 != v67 ) { qword28_1 = (__int64 *)this->qword28; ++v68; v65 = *qword28_1; v70 = (qword28_1[1] - *qword28_1) >> 2; if ( v70 <= v68 ) goto LABEL_140; continue; } break; } LOBYTE(v13) = HIBYTE(this->attrib_flags); LABEL_102: v13 = (const google::protobuf::Message *)((unsigned __int8)v13 & 1); if ( (_DWORD)v13 ) { qword30 = this->qword30; v92 |= 0x20u; qword30_1 = qword30; } goto LABEL_25; case 2: qword28_2 = (__int64 *)this->qword28; if ( !qword28_2 ) goto LABEL_21; v50 = *qword28_2; v51 = (qword28_2[1] - *qword28_2) >> 3; if ( (int)v51 <= 0 ) goto LABEL_21; if ( !v51 ) { v55 = 0; v53 = 0; LABEL_138: std::__throw_out_of_range_fmt( "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v53, v55); } v52 = (unsigned int)(v51 - 1); v53 = 0; while ( 2 ) { v56 = *(_QWORD *)(v50 + 8 * v53); n4_19 = n4_17; if ( n4_17 != n4_5 ) goto LABEL_64; v58 = v98; n4_4 = n4_17 + 1; if ( v98 ) { v60 = *(google::protobuf::Arena **)v98; if ( 2 * n4_17 >= n4_4 ) n4_4 = 2 * n4_17; if ( n4_4 < 4 ) n4_4 = 4; v61 = 8LL * n4_4 + 8; if ( v60 ) { v98 = (void *)google::protobuf::Arena::AllocateAligned( *(google::protobuf::Arena **)v98, (const type_info *)&`typeinfo for'char, v61); *(_QWORD *)v98 = v60; n4_18 = n4_17; n4_6 = n4_5; n4_5 = n4_4; if ( n4_17 <= 0 ) goto LABEL_76; goto LABEL_74; } } else { if ( 2 * n4_17 >= n4_4 ) n4_4 = 2 * n4_17; if ( n4_4 < 4 ) n4_4 = 4; v61 = 8LL * n4_4 + 8; } v98 = (void *)operator new(v61); *(_QWORD *)v98 = 0; n4_18 = n4_17; n4_6 = n4_5; n4_5 = n4_4; if ( n4_17 > 0 ) LABEL_74: memcpy((char *)v98 + 8, v58 + 1, 8 * n4_18); if ( !v58 ) goto LABEL_78; LABEL_76: if ( !*v58 ) operator delete(v58, 8 * n4_6 + 8); LABEL_78: n4_19 = n4_17; LABEL_64: n4_17 = n4_19 + 1; *((_QWORD *)v98 + n4_19 + 1) = v56; if ( v53 != v52 ) { qword28_3 = (__int64 *)this->qword28; ++v53; v50 = *qword28_3; v55 = (qword28_3[1] - *qword28_3) >> 3; if ( v53 >= v55 ) goto LABEL_138; continue; } break; } LOBYTE(v13) = HIBYTE(this->attrib_flags); LABEL_21: v13 = (const google::protobuf::Message *)((unsigned __int8)v13 & 1); if ( (_DWORD)v13 ) { qword30_2 = this->qword30; v92 |= 0x40u; qword30_3 = qword30_2; } v15 = BYTE1(this->attrib_type); if ( (v15 & 2) != 0 ) { v92 |= 0x100u; v114 = (v15 >> 2) & 7; } goto LABEL_25; case 3: qword28_4 = (__int64 *)this->qword28; if ( !qword28_4 ) goto LABEL_99; v34 = *qword28_4; v35 = *((unsigned int *)qword28_4 + 6) + 8 * (qword28_4[2] - *qword28_4) - *((unsigned int *)qword28_4 + 2); if ( (int)v35 <= 0 ) goto LABEL_99; if ( !v35 ) { v39 = 0; v37 = 0; LABEL_136: std::__throw_out_of_range_fmt( "vector<bool>::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v37, v39); } v36 = (unsigned int)(v35 - 1); v37 = 0; while ( 2 ) { n4_21 = n4_20; v41 = ((1LL << v37) & *(_QWORD *)(v34 + 8 * (v37 >> 6))) != 0; if ( n4_20 != n4_10 ) goto LABEL_45; v42 = v101; n4_8 = n4_20 + 1; if ( v101 ) { v44 = *(google::protobuf::Arena **)v101; if ( 2 * n4_20 >= n4_8 ) n4_8 = 2 * n4_20; n4_7 = 4; v85 = *(google::protobuf::internal::RepeatedPtrFieldBase **)v101; if ( n4_8 >= 4 ) n4_7 = n4_8; n4_9 = n4_7; v46 = n4_7 + 8LL; if ( v44 ) { v101 = (void *)google::protobuf::Arena::AllocateAligned(v44, (const type_info *)&`typeinfo for'char, v46); *(_QWORD *)v101 = v85; n = n4_20; n4_12 = n4_10; n4_10 = n4_9; if ( n4_20 <= 0 ) goto LABEL_57; goto LABEL_55; } } else { if ( 2 * n4_20 >= n4_8 ) n4_8 = 2 * n4_20; n4_11 = 4; if ( n4_8 >= 4 ) n4_11 = n4_8; n4_9 = n4_11; v46 = n4_11 + 8LL; } v84 = (_QWORD *)operator new(v46); n = n4_20; v101 = v84; *v84 = 0; n4_12 = n4_10; n4_10 = n4_9; if ( (int)n > 0 ) { LABEL_55: n4_13 = n4_12; memcpy((char *)v101 + 8, v42 + 1, n); n4_12 = n4_13; } if ( !v42 ) goto LABEL_59; LABEL_57: if ( !*v42 ) operator delete(v42, n4_12 + 8); LABEL_59: n4_21 = n4_20; LABEL_45: n4_20 = n4_21 + 1; *((_BYTE *)v101 + n4_21 + 8) = v41; if ( v36 != v37 ) { qword28_5 = (__int64 *)this->qword28; ++v37; v34 = *qword28_5; v39 = *((unsigned int *)qword28_5 + 6) + 8 * (qword28_5[2] - *qword28_5) - *((unsigned int *)qword28_5 + 2); if ( v39 <= v37 ) goto LABEL_136; continue; } break; } LOBYTE(v13) = HIBYTE(this->attrib_flags); LABEL_99: v13 = (const google::protobuf::Message *)((unsigned __int8)v13 & 1); if ( (_DWORD)v13 ) { qword30_4 = this->qword30; v92 |= 0x80u; qword30_5 = qword30_4; } LABEL_25: HDDMDevice::writeMessage((HDDMDevice *)stream, (std::ostream *)v91, v13); HDDMXng::BelUsageAttrib::~BelUsageAttrib((HDDMXng::BelUsageAttrib *)v91); return; case 4: case 5: case 6: qword28_6 = (__int64 *)this->qword28; if ( !qword28_6 ) goto LABEL_105; v17 = *qword28_6; v18 = (qword28_6[1] - *qword28_6) >> 5; if ( (int)v18 <= 0 ) goto LABEL_105; if ( !v18 ) { v28 = 0; v20 = 0; LABEL_134: std::__throw_out_of_range_fmt( "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", v20, v28); } v19 = (unsigned int)(v18 - 1); v20 = 0; while ( 2 ) { v29 = v105; v21 = v104; v30 = 32 * v20 + v17; if ( !v105 ) goto LABEL_108; v31 = v103; v32 = *v105; if ( v103 >= *v105 ) { v21 = v104; if ( v32 == v104 ) { LABEL_108: google::protobuf::internal::RepeatedPtrFieldBase::Reserve( (google::protobuf::internal::RepeatedPtrFieldBase *)&v102, v21 + 1); v29 = v105; v32 = *v105; } *v29 = v32 + 1; v22 = v102; if ( v102 ) { v23 = (_QWORD *)google::protobuf::Arena::AllocateAligned( v102, (const type_info *)&`typeinfo for'std::string, 0x20u); v24 = v23; if ( v23 ) { v23[1] = 0; *((_BYTE *)v23 + 16) = 0; *v23 = v23 + 2; } google::protobuf::Arena::AddListNode( v22, v23, (void (*)(void *))google::protobuf::internal::arena_destruct_object<std::string>); v25 = v24; } else { v82 = operator new(0x20u); *(_QWORD *)(v82 + 8) = 0; *(_BYTE *)(v82 + 16) = 0; v25 = (_QWORD *)v82; *(_QWORD *)v82 = v82 + 16; } v26 = v103++; *(_QWORD *)&v105[2 * v26 + 2] = v25; } else { ++v103; v25 = *(_QWORD **)&v105[2 * v31 + 2]; } std::string::_M_assign(v25, v30); if ( v20 != v19 ) { qword28_7 = (__int64 *)this->qword28; ++v20; v17 = *qword28_7; v28 = (qword28_7[1] - *qword28_7) >> 5; if ( v28 <= v20 ) goto LABEL_134; continue; } break; } LOBYTE(v13) = HIBYTE(this->attrib_flags); LABEL_105: v13 = (const google::protobuf::Message *)((unsigned __int8)v13 & 1); if ( (_DWORD)v13 ) { v92 |= 2u; qword30_6 = this->qword30; if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1 == &google::protobuf::internal::fixed_address_empty_string[abi:cxx11] ) sub_11C39D0(&p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1, qword30_6); else std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1, qword30_6); } goto LABEL_25; default: goto LABEL_25; } } void __fastcall HDDMBelUsageAttrib::print(HDDMBelUsageAttrib *this, std::ostream *stream, std::string *filename) { char attrib_flags_high; // al char v6; // al char n7; // al const char *unknown; // r15 __int64 v9; // r14 size_t v10; // rax __int64 v11; // r14 __int64 v12; // r14 size_t v13; // rax __int64 v14; // rax char v15; // al unsigned __int16 v16; // r14 unsigned __int8 v17; // si char n2; // al _QWORD *qword28_4; // rdx _QWORD *v20; // rax _QWORD *v21; // r13 _QWORD *qword30_1; // rbx char *_[MISMATCH]_2; // rax char *_[MISMATCH]_1; // rax char *_[MISMATCH]; // rax __int64 v26; // rax __int64 v27; // rax __int64 v28; // rax __int64 v29; // rax double **qword28_5; // rdx double *v31; // rax double *v32; // r13 unsigned int **qword28_3; // rdx unsigned int *v34; // rax unsigned int *v35; // r13 unsigned int qword30; // ebx __int64 qword28; // rax _QWORD *v38; // r14 unsigned int n63; // r13d _QWORD *v40; // rcx int n63_1; // edx __int64 qword28_1; // rax __int64 qword28_2; // rax unsigned int qword30_low; // ebx char *s; // [rsp+8h] [rbp-60h] char *sa; // [rsp+8h] [rbp-60h] void *v47[2]; // [rsp+10h] [rbp-58h] BYREF _BYTE v48[72]; // [rsp+20h] [rbp-48h] BYREF v47[0] = v48; sub_1269E90(v47, "", (__int64)""); if ( (this->attrib_flags & 0xFFF) != 0 ) std::string::append(v47, "W"); attrib_flags_high = HIBYTE(this->attrib_flags); if ( (attrib_flags_high & 4) != 0 ) { std::string::append(v47, "G"); attrib_flags_high = HIBYTE(this->attrib_flags); } if ( (attrib_flags_high & 0x40) != 0 ) std::string::append(v47, "E"); v6 = BYTE1(this->attrib_type); if ( (v6 & 2) != 0 ) { std::string::append(v47, "P"); v6 = BYTE1(this->attrib_type); } if ( (v6 & 0x40) != 0 ) { std::string::append(v47, "H"); if ( (this->attrib_type & 0x8000) == 0 ) goto LABEL_11; } else if ( v6 >= 0 ) { LABEL_11: n7 = (HIBYTE(this->attrib_flags) >> 3) & 7; goto LABEL_12; } std::string::append(v47, "B"); n7 = (HIBYTE(this->attrib_flags) >> 3) & 7; if ( n7 == 7 ) { LABEL_15: unknown = "unknown"; s = ""; goto LABEL_17; } LABEL_12: switch ( n7 ) { case 0: unknown = "unsigned"; s = ""; break; case 1: unknown = "int"; s = ""; break; case 2: _[MISMATCH] = ""; unknown = "double"; if ( (*(_QWORD *)&this->attrib_flags & 0xC00000000FFFLL) != 0 ) _[MISMATCH] = " [MISMATCH]"; s = _[MISMATCH]; break; case 3: unknown = "bool"; s = ""; break; case 4: unknown = "string"; s = ""; break; case 5: _[MISMATCH]_1 = ""; unknown = "bithex"; if ( (this->attrib_type & 0x8200) != 0 ) _[MISMATCH]_1 = " [MISMATCH]"; s = _[MISMATCH]_1; break; case 6: _[MISMATCH]_2 = ""; unknown = "bitbinary"; if ( (this->attrib_type & 0x4200) != 0 ) _[MISMATCH]_2 = " [MISMATCH]"; s = _[MISMATCH]_2; break; default: goto LABEL_15; } LABEL_17: v9 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1)); v10 = strlen(unknown); std::__ostream_insert<char,std::char_traits<char>>(v9, unknown, v10); std::__ostream_insert<char,std::char_traits<char>>(v9, "[", 1); v11 = std::__ostream_insert<char,std::char_traits<char>>(v9, v47[0], v47[1]); std::__ostream_insert<char,std::char_traits<char>>(v11, "] ", 2); v12 = std::__ostream_insert<char,std::char_traits<char>>(v11, this->qword8, this->qword10); v13 = strlen(s); std::__ostream_insert<char,std::char_traits<char>>(v12, s, v13); std::endl<char,std::char_traits<char>>(v12); v14 = std::__ostream_insert<char,std::char_traits<char>>(stream, *(_QWORD *)filename, *((_QWORD *)filename + 1)); std::__ostream_insert<char,std::char_traits<char>>(v14, " ", 3); v15 = 0; if ( (this->attrib_flags & 0x2000000) != 0 ) { std::__ostream_insert<char,std::char_traits<char>>(stream, " (HIDDEN=true)", 14); v15 = 1; } v16 = this->attrib_flags & 0xFFF; if ( v16 ) { std::__ostream_insert<char,std::char_traits<char>>(stream, " (Width=", 8); v26 = std::ostream::_M_insert<unsigned long>(stream, v16); std::__ostream_insert<char,std::char_traits<char>>(v26, ")", 1); v17 = BYTE1(this->attrib_type); if ( (v17 & 2) == 0 ) goto LABEL_49; goto LABEL_48; } v17 = BYTE1(this->attrib_type); if ( (v17 & 2) != 0 ) { LABEL_48: std::__ostream_insert<char,std::char_traits<char>>(stream, " (percision=", 12); v27 = std::ostream::_M_insert<unsigned long>(stream, (v17 >> 2) & 7); std::operator<<<std::char_traits<char>>(v27, ")"); goto LABEL_49; } if ( !v15 ) { n2 = (HIBYTE(this->attrib_flags) >> 3) & 7; if ( n2 != 2 ) goto LABEL_23; goto LABEL_50; } LABEL_49: v28 = std::endl<char,std::char_traits<char>>(stream); v29 = std::__ostream_insert<char,std::char_traits<char>>(v28, *(_QWORD *)filename, *((_QWORD *)filename + 1)); std::operator<<<std::char_traits<char>>(v29, " "); n2 = (HIBYTE(this->attrib_flags) >> 3) & 7; if ( n2 != 2 ) { LABEL_23: if ( n2 == 3 ) { std::operator<<<std::char_traits<char>>(stream, " ( "); qword28 = this->qword28; if ( qword28 ) { v38 = *(_QWORD **)qword28; n63 = *(_DWORD *)(qword28 + 8); v40 = *(_QWORD **)(qword28 + 16); n63_1 = *(_DWORD *)(qword28 + 24); while ( n63 != n63_1 || v38 != v40 ) { while ( 1 ) { std::ostream::_M_insert<bool>(stream, ((1LL << n63) & *v38) != 0); qword28_1 = this->qword28; v40 = *(_QWORD **)(qword28_1 + 16); n63_1 = *(_DWORD *)(qword28_1 + 24); if ( v40 != &v38[(n63 + 1LL) >> 6] || n63_1 != (((_BYTE)n63 + 1) & 0x3F) ) { std::__ostream_insert<char,std::char_traits<char>>(stream, ", ", 2); qword28_2 = this->qword28; n63_1 = *(_DWORD *)(qword28_2 + 24); v40 = *(_QWORD **)(qword28_2 + 16); } if ( n63 == 63 ) break; if ( ++n63 == n63_1 && v38 == v40 ) goto LABEL_74; } ++v38; n63 = 0; } } LABEL_74: if ( (this->attrib_flags & 0x1000000) != 0 ) { qword30_low = LOBYTE(this->qword30); std::__ostream_insert<char,std::char_traits<char>>(stream, " default=", 9); std::ostream::_M_insert<bool>(stream, qword30_low); } } else if ( n2 == 1 ) { std::operator<<<std::char_traits<char>>(stream, " ( "); qword28_3 = (unsigned int **)this->qword28; if ( qword28_3 ) { v34 = qword28_3[1]; v35 = *qword28_3; while ( v35 != v34 ) { while ( 1 ) { std::ostream::operator<<(stream, *v35++); v34 = *(unsigned int **)(this->qword28 + 8LL); if ( v35 == v34 ) break; std::__ostream_insert<char,std::char_traits<char>>(stream, ", ", 2); if ( v35 == *(unsigned int **)(this->qword28 + 8LL) ) goto LABEL_62; } } } LABEL_62: if ( (this->attrib_flags & 0x1000000) != 0 ) { qword30 = this->qword30; std::__ostream_insert<char,std::char_traits<char>>(stream, " default=", 9); std::ostream::operator<<(stream, qword30); } } else { std::operator<<<std::char_traits<char>>(stream, " ( "); qword28_4 = (_QWORD *)this->qword28; if ( qword28_4 ) { v20 = (_QWORD *)qword28_4[1]; v21 = (_QWORD *)*qword28_4; while ( v21 != v20 ) { while ( 1 ) { std::__ostream_insert<char,std::char_traits<char>>(stream, *v21, v21[1]); v21 += 4; v20 = *(_QWORD **)(this->qword28 + 8LL); if ( v21 == v20 ) break; std::__ostream_insert<char,std::char_traits<char>>(stream, ", ", 2); if ( v21 == *(_QWORD **)(this->qword28 + 8LL) ) goto LABEL_30; } } } LABEL_30: if ( (this->attrib_flags & 0x1000000) != 0 ) { qword30_1 = (_QWORD *)this->qword30; std::__ostream_insert<char,std::char_traits<char>>(stream, " default=", 9); std::__ostream_insert<char,std::char_traits<char>>(stream, *qword30_1, qword30_1[1]); } } goto LABEL_32; } LABEL_50: std::operator<<<std::char_traits<char>>(stream, " ( "); qword28_5 = (double **)this->qword28; if ( qword28_5 ) { v31 = qword28_5[1]; v32 = *qword28_5; while ( v32 != v31 ) { while ( 1 ) { std::ostream::_M_insert<double>(stream, *v32++); v31 = *(double **)(this->qword28 + 8LL); if ( v32 == v31 ) break; std::__ostream_insert<char,std::char_traits<char>>(stream, ", ", 2); if ( v32 == *(double **)(this->qword28 + 8LL) ) goto LABEL_55; } } } LABEL_55: if ( (this->attrib_flags & 0x1000000) != 0 ) { sa = (char *)this->qword30; std::__ostream_insert<char,std::char_traits<char>>(stream, " default=", 9); std::ostream::_M_insert<double>(stream, *(double *)&sa); } LABEL_32: std::operator<<<std::char_traits<char>>(stream, " ) "); if ( v47[0] != v48 ) operator delete(v47[0]); } void __fastcall HDDMBelUsageAttrib::HDDMBelUsageAttrib(HDDMBelUsageAttrib *this) { __int16 word4; // ax word4 = this->attrib_type; this->attrib_flags &= 0xF000u; this->? &= 0xF0u; this->qword10 = 0; *(_DWORD *)&this->attrib_flags |= 0xFFF000u; this->char18 = 0; this->? = 0; this->attrib_type = word4 & 0xFE00; HIBYTE(this->attrib_type) = 0; *(_WORD *)&this->? |= 0xFFF0u; this->qword8 = &this->char18; *(_DWORD *)&this->char40 = 0; this->qword48 = 0; this->qword60 = 0; this->qword50 = &this->char40; this->qword58 = &this->char40; this->qword30 = 0; this->qword28 = 0; } void __fastcall HDDMBelUsageAttrib::~HDDMBelUsageAttrib(HDDMBelUsageAttrib *this) { char v2; // al void ***qword28_2; // r12 void **v4; // rbp void **v5; // rbx void **qword30; // rbx void **qword28_1; // rbx __int64 qword48; // rsi _BYTE *v9; // rdi char *p_char18; // r14 char *p_char18_1; // rdi __int64 v12; // rax _QWORD *v13; // rdx _QWORD *v14; // r13 _QWORD *v15; // rbp unsigned __int64 v16; // r10 const char *v17; // rsi _QWORD *v18; // r8 _QWORD *v19; // rbx unsigned __int64 v20; // rcx _QWORD *_ZZN3hdi8tcltasks12native_cacheIP18HDDMBelUsageAttribE12t2n_ins; // r15 unsigned __int64 v22; // rsi __int64 v23; // r10 unsigned __int64 v24; // rtt __int64 v25; // r11 unsigned __int64 v26; // r9 __int64 **v27; // rdx __int64 *i; // rcx __int64 *v29; // rdi __int64 v30; // r8 unsigned __int64 v31; // rdx unsigned __int64 v32; // rdx void **qword28; // rbx __int64 v34; // [rsp+8h] [rbp-50h] HDDMBelUsageAttrib *p_this; // [rsp+18h] [rbp-40h] BYREF v2 = (HIBYTE(this->attrib_flags) >> 3) & 7; switch ( v2 ) { case 2: goto LABEL_17; case 3: qword28 = (void **)this->qword28; if ( qword28 ) { if ( *qword28 ) operator delete(*qword28); operator delete(qword28, 0x28u); } goto LABEL_21; case 1: LABEL_17: qword28_1 = (void **)this->qword28; if ( qword28_1 ) { if ( *qword28_1 ) operator delete(*qword28_1); operator delete(qword28_1, 0x18u); } LABEL_21: this->qword28 = 0; goto LABEL_22; } qword28_2 = (void ***)this->qword28; if ( qword28_2 ) { v4 = qword28_2[1]; v5 = *qword28_2; if ( v4 != *qword28_2 ) { do { if ( *v5 != v5 + 2 ) operator delete(*v5); v5 += 4; } while ( v4 != v5 ); v5 = *qword28_2; } if ( v5 ) operator delete(v5); operator delete(qword28_2, 0x18u); this->qword28 = 0; } qword30 = (void **)this->qword30; if ( qword30 ) { if ( *qword30 != qword30 + 2 ) operator delete(*qword30); operator delete(qword30, 0x20u); this->qword30 = 0; } LABEL_22: p_this = this; if ( *(_BYTE *)hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::observers() ) { if ( !(_BYTE)`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache && __cxa_guard_acquire(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache) ) { hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache = hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::get_n2t_cache(); __cxa_guard_release(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache); } v12 = std::_Hashtable<HDDMBelUsageAttrib const*,std::pair<HDDMBelUsageAttrib const* const,Tcl_Obj *>,std::allocator<std::pair<HDDMBelUsageAttrib const* const,Tcl_Obj *>>,std::__detail::_Select1st,std::equal_to<HDDMBelUsageAttrib const*>,boost::hash<HDDMBelUsageAttrib const*>,std::__detail::_Mod_range_hashing,std::__detail::_Default_ranged_hash,std::__detail::_Prime_rehash_policy,std::__detail::_Hashtable_traits<true,false,false>>::equal_range( hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache, &p_this); v34 = v12; v14 = v13; if ( (_QWORD *)v12 != v13 ) { v15 = (_QWORD *)v12; while ( 1 ) { if ( !(_BYTE)`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache && __cxa_guard_acquire(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache) ) { hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache = (_QWORD *)hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::get_t2n_cache(); __cxa_guard_release(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache); } v16 = v15[2]; v17 = (const char *)hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache[1]; v18 = *(_QWORD **)(*hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache + 8 * ((v16 + (v16 >> 3)) % (unsigned __int64)v17)); if ( !v18 ) break; v19 = (_QWORD *)*v18; v20 = *(_QWORD *)(*v18 + 24LL); while ( v16 + (v15[2] >> 3) != v20 || v16 != v19[1] ) { if ( *v19 ) { v20 = *(_QWORD *)(*v19 + 24LL); v18 = v19; v19 = (_QWORD *)*v19; if ( (v16 + (v15[2] >> 3)) % (unsigned __int64)v17 == v20 % (unsigned __int64)v17 ) continue; } goto LABEL_35; } if ( !v18 || !v19 ) break; if ( (_BYTE)`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache ) goto LABEL_39; if ( __cxa_guard_acquire(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache) ) goto LABEL_37; if ( (_BYTE)`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache ) goto LABEL_40; LABEL_56: if ( __cxa_guard_acquire(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache) ) { hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache = (_QWORD *)hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::get_t2n_cache(); __cxa_guard_release(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache); } LABEL_40: _ZZN3hdi8tcltasks12native_cacheIP18HDDMBelUsageAttribE12t2n_ins = hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache; v22 = hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache[1]; v23 = *hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache; v24 = v19[3]; v25 = 8 * (v24 % v22); v26 = v24 % v22; v27 = (__int64 **)(*hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache + v25); for ( i = *v27; ; i = (__int64 *)*i ) { v29 = (__int64 *)*i; if ( (_QWORD *)*i == v19 ) break; } v30 = *v19; if ( *v27 != i ) { if ( v30 ) { v31 = *(_QWORD *)(v30 + 24) % v22; if ( v26 != v31 ) { *(_QWORD *)(v23 + 8 * v31) = i; v30 = *v19; } } goto LABEL_47; } if ( !v30 ) { if ( i == hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache + 2 ) LABEL_65: _ZZN3hdi8tcltasks12native_cacheIP18HDDMBelUsageAttribE12t2n_ins[2] = v30; LABEL_63: *v27 = 0; v30 = *v29; goto LABEL_47; } v32 = *(_QWORD *)(v30 + 24) % v22; if ( v26 != v32 ) { *(_QWORD *)(v23 + 8 * v32) = i; v27 = (__int64 **)(*_ZZN3hdi8tcltasks12native_cacheIP18HDDMBelUsageAttribE12t2n_ins + v25); if ( *v27 == _ZZN3hdi8tcltasks12native_cacheIP18HDDMBelUsageAttribE12t2n_ins + 2 ) goto LABEL_65; goto LABEL_63; } LABEL_47: *i = v30; operator delete(v29); --_ZZN3hdi8tcltasks12native_cacheIP18HDDMBelUsageAttribE12t2n_ins[3]; hdi::tcltasks::native_cache_base::mark_invalid(v15[2]); hdi::tcltasks::native_cache_base::decr_refcount(v15[2]); v15 = (_QWORD *)*v15; if ( v14 == v15 ) { if ( !(_BYTE)`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache && __cxa_guard_acquire(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache) ) { hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache = hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::get_n2t_cache(); __cxa_guard_release(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache); } std::_Hashtable<HDDMBelUsageAttrib const*,std::pair<HDDMBelUsageAttrib const* const,Tcl_Obj *>,std::allocator<std::pair<HDDMBelUsageAttrib const* const,Tcl_Obj *>>,std::__detail::_Select1st,std::equal_to<HDDMBelUsageAttrib const*>,boost::hash<HDDMBelUsageAttrib const*>,std::__detail::_Mod_range_hashing,std::__detail::_Default_ranged_hash,std::__detail::_Prime_rehash_policy,std::__detail::_Hashtable_traits<true,false,false>>::erase( hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::n2t_instance(void)::cache, v34, v14); goto LABEL_23; } } LABEL_35: if ( !(_BYTE)`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache ) { v19 = 0; if ( __cxa_guard_acquire(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache) ) { LABEL_37: hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache = (_QWORD *)hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::get_t2n_cache(); __cxa_guard_release(&`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache); if ( v19 ) goto LABEL_39; } } hdi::tcltasks::native_cache_base::error((hdi::tcltasks::native_cache_base *)"native_cache<> corrupt", v17); v19 = 0; LABEL_39: if ( (_BYTE)`guard variable for'hdi::tcltasks::native_cache<HDDMBelUsageAttrib *>::t2n_instance(void)::cache ) goto LABEL_40; goto LABEL_56; } } LABEL_23: qword48 = this->qword48; v9 = this->gap38; p_char18 = &this->char18; std::_Rb_tree<std::string,std::pair<std::string const,unsigned short>,std::_Select1st<std::pair<std::string const,unsigned short>>,std::less<std::string>,std::allocator<std::pair<std::string const,unsigned short>>>::_M_erase( v9, qword48); p_char18_1 = (char *)*((_QWORD *)p_char18 - 2); if ( p_char18_1 != p_char18 ) operator delete(p_char18_1); }
10-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值