operator delete(void*) 和 operator new(unsigned long)未定义的问题

博客指出依次添加libc++.tbd和libz.tbd两个库,添加完成后问题即可解决,聚焦于通过添加特定库来解决相关信息技术问题。

依次添加两个库,库名分别为 libc++.tbd 和libz.tbd,添加完成问题即可解决

报错ude/opencv4/opencv2/flann/any.h:84: undefined reference to `operator delete(void*, unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<cvflann::anyimpl::empty_any>::copy_from_value(void const*, void**)': /usr/include/opencv4/opencv2/flann/any.h:89: undefined reference to `operator new(unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<cvflann::anyimpl::empty_any>::clone(void* const*, void**)': /usr/include/opencv4/opencv2/flann/any.h:93: undefined reference to `operator new(unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::static_delete(void**)': /usr/include/opencv4/opencv2/flann/any.h:84: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /usr/bin/ld: /usr/include/opencv4/opencv2/flann/any.h:84: undefined reference to `operator delete(void*, unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::copy_from_value(void const*, void**)': /usr/include/opencv4/opencv2/flann/any.h:89: undefined reference to `operator new(unsigned long)' /usr/bin/ld: /usr/include/opencv4/opencv2/flann/any.h:89: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /usr/bin/ld: /usr/include/opencv4/opencv2/flann/any.h:89: undefined reference to `operator delete(void*, unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::clone(void* const*, void**)': /usr/include/opencv4/opencv2/flann/any.h:93: undefined reference to `operator new(unsigned long)' /usr/bin/ld: /usr/include/opencv4/opencv2/flann/any.h:93: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /usr/bin/ld: /usr/include/opencv4/opencv2/flann/any.h:93: undefined reference to `operator delete(void*, unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::move(void* const*, void**)': /usr/include/opencv4/opencv2/flann/any.h:97: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /usr/bin/ld: /usr/include/opencv4/opencv2/flann/any.h:98: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<cvflann::flann_algorithm_t>::static_delete(void**)': /usr/include/opencv4/opencv2/flann/any.h:84: undefined reference to `operator delete(void*, unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<cvflann::flann_algorithm_t>::copy_from_value(void const*, void**)': /usr/include/opencv4/opencv2/flann/any.h:89: undefined reference to `operator new(unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<cvflann::flann_algorithm_t>::clone(void* const*, void**)': /usr/include/opencv4/opencv2/flann/any.h:93: undefined reference to `operator new(unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<cvflann::flann_centers_init_t>::static_delete(void**)': /usr/include/opencv4/opencv2/flann/any.h:84: undefined reference to `operator delete(void*, unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<cvflann::flann_centers_init_t>::copy_from_value(void const*, void**)': /usr/include/opencv4/opencv2/flann/any.h:89: undefined reference to `operator new(unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o: in function `cvflann::anyimpl::big_any_policy<cvflann::flann_centers_init_t>::clone(void* const*, void**)': /usr/include/opencv4/opencv2/flann/any.h:93: undefined reference to `operator new(unsigned long)' /usr/bin/ld: /tmp/ccghGJuZ.o:(.data.rel.ro._ZTIN7cvflann20flann_centers_init_tE[_ZTIN7cvflann20flann_centers_init_tE]+0x0): undefined reference to `vtable for __cxxabiv1::__enum_type_info' /usr/bin/ld: /tmp/ccghGJuZ.o:(.data.rel.ro._ZTIN7cvflann17flann_algorithm_tE[_ZTIN7cvflann17flann_algorithm_tE]+0x0): undefined reference to `vtable for __cxxabiv1::__enum_type_info' /usr/bin/ld: /tmp/ccghGJuZ.o:(.data.rel.ro._ZTINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZTINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info' /usr/bin/ld: /tmp/ccghGJuZ.o:(.data.rel.local.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0' collect2: error: ld returned 1 exit status
08-30
请仔细阅读分析下面函数,进行深度优化后, 自定义结构体内部元素请采用32位定义,实现可编译、完整的代码 void __fastcall HDDMTemplateIOFlator::loadTilePatterns(HDDMTemplateIOFlator *this, HDDMBinFileMgr *pFile) { __int64 v4; // rdx __int64 tilePatternVec; // rsi unsigned int i; // ebx void **NodeTemplateIndexData2DVec; // rbp void **qword70; // r15 void **NodeTemplateIndexDataVec; // r13 __int64 v10; // rsi unsigned __int64 v11; // rax __int64 v12; // rdx unsigned int nMaxNodeTemplateIndexDatas; // ecx void **v14; // r13 void **v15; // rbx int numMaxNodeTemplateIndexCount2D; // eax unsigned int j; // ebp __int64 v18; // r13 unsigned int nIndexCont; // r15d _QWORD *v20; // rax __int64 NodeTemplateIndexData3DVec; // rbx __int64 qword88; // r15 __int64 v23; // rbp unsigned int *v24; // rax void **v25; // r13 __int64 v26; // rcx unsigned __int64 v27; // rax __int64 v28; // rdx __int64 v29; // r15 __int64 k; // r13 unsigned int *v31; // rax void **v32; // rbp unsigned int *v33; // rax char *v34; // r13 void **v35; // rbx void **v36; // rbp unsigned __int64 v37; // rbp unsigned int v38; // edx void *v39; // rdi unsigned __int64 v40; // rbx unsigned int v41; // edx unsigned int v42; // ebp unsigned int v43; // ecx _QWORD *v44; // r13 unsigned int v45; // ebx char *v46; // rax _QWORD *v47; // rsi char *v48; // rax char *v49; // rbp unsigned int *v50; // rax unsigned __int64 *v51; // rbx signed __int64 v52; // rbp unsigned __int64 v53; // rax char *v54; // rdi char *v55; // r8 _QWORD *v56; // rcx char *v57; // rdx __int64 NodeTemplateOffsetData3DVec; // rbx __int64 qwordA0; // r15 __int64 v60; // rbp unsigned int *v61; // rax void **v62; // r13 __int64 v63; // rcx unsigned __int64 v64; // rax __int64 v65; // rdx __int64 v66; // r15 __int64 ii; // r13 unsigned int *v68; // rax void **v69; // rbp void **v70; // rax void **n; // rdx void *v72; // rcx void *v73; // rcx void **v74; // r13 void **v75; // rbx unsigned int *v76; // rax unsigned int *v77; // rdi void **v78; // rbx void **v79; // rbp unsigned __int64 v80; // rbp unsigned int v81; // edx void *v82; // rdi unsigned __int64 v83; // rbx __int16 v84; // dx unsigned int v85; // ebx char *v86; // rax unsigned int *v87; // rax unsigned __int64 *v88; // rbp signed __int64 v89; // rbx unsigned __int64 v90; // rax char *v91; // rsi _BYTE *v92; // r8 _DWORD *v93; // rcx char *v94; // rdx void *tilePatternDataVec; // rdi unsigned __int64 v96; // rbx __int64 qword30; // rax unsigned int v98; // edx unsigned int v99; // ebx __int64 qword28; // rax char *v101; // rax char *v102; // rbp void **v103; // rax void **kk; // rdx void *v105; // rcx void *v106; // rcx unsigned int *v107; // rdx void **v108; // rbx __int64 v109; // rax __int64 v110; // rbp unsigned int *v111; // [rsp+0h] [rbp-108h] unsigned int *v112; // [rsp+0h] [rbp-108h] unsigned int *v113; // [rsp+0h] [rbp-108h] unsigned int *v114; // [rsp+0h] [rbp-108h] unsigned int *v115; // [rsp+8h] [rbp-100h] unsigned int *v116; // [rsp+8h] [rbp-100h] unsigned int *v117; // [rsp+8h] [rbp-100h] unsigned int *v118; // [rsp+8h] [rbp-100h] unsigned int v119; // [rsp+8h] [rbp-100h] unsigned int *v120; // [rsp+8h] [rbp-100h] unsigned int *v121; // [rsp+8h] [rbp-100h] unsigned int v122; // [rsp+10h] [rbp-F8h] void **v123; // [rsp+10h] [rbp-F8h] void **v124; // [rsp+10h] [rbp-F8h] unsigned int jj; // [rsp+10h] [rbp-F8h] unsigned int m; // [rsp+18h] [rbp-F0h] signed __int64 v127; // [rsp+18h] [rbp-F0h] unsigned __int16 *v128; // [rsp+28h] [rbp-E0h] unsigned __int16 v129[2]; // [rsp+30h] [rbp-D8h] BYREF unsigned int nTileIndex; // [rsp+38h] [rbp-D0h] BYREF unsigned int numMaxTileIndex; // [rsp+3Ch] [rbp-CCh] BYREF unsigned int numMaxTilePattern; // [rsp+40h] [rbp-C8h] BYREF unsigned int numMaxNodeTemplateIndexData2D; // [rsp+44h] [rbp-C4h] BYREF unsigned int offsetId; // [rsp+48h] [rbp-C0h] BYREF unsigned int numMaxNodeTemplateIndexCount3D; // [rsp+4Ch] [rbp-BCh] BYREF unsigned int numMaxNodeTemplateIndexDatas3D; // [rsp+50h] [rbp-B8h] BYREF unsigned int offsetSize; // [rsp+54h] [rbp-B4h] BYREF unsigned int numMaxNodeTemplateOffsetCount3D; // [rsp+58h] [rbp-B0h] BYREF unsigned int numMaxNodeTemplateOffsetData3D; // [rsp+5Ch] [rbp-ACh] BYREF unsigned int v140; // [rsp+60h] [rbp-A8h] BYREF unsigned int numMaxTileData; // [rsp+64h] [rbp-A4h] BYREF unsigned int v142; // [rsp+68h] [rbp-A0h] BYREF unsigned int v143; // [rsp+6Ch] [rbp-9Ch] BYREF unsigned int IndexData[2]; // [rsp+70h] [rbp-98h] BYREF unsigned __int64 offsetCount; // [rsp+80h] [rbp-88h] BYREF unsigned int v146; // [rsp+88h] [rbp-80h] void *v147; // [rsp+90h] [rbp-78h] BYREF char *v148; // [rsp+98h] [rbp-70h] char *v149; // [rsp+A0h] [rbp-68h] void *offsetValue; // [rsp+B0h] [rbp-58h] BYREF char *v151; // [rsp+B8h] [rbp-50h] char *v152; // [rsp+C0h] [rbp-48h] HDDMBinFileMgr::fromFile(pFile, &numMaxTileIndex); HDDMBinFileMgr::fromFile(pFile, &numMaxTilePattern); v4 = numMaxTileIndex; tilePatternVec = this->tilePatternVec; LODWORD(offsetValue) = -1; this->qword10 = tilePatternVec; if ( v4 ) std::vector<unsigned int>::_M_fill_insert(&this->tilePatternVec, tilePatternVec, v4, &offsetValue); for ( i = 0; numMaxTilePattern > i; ++i ) { HDDMBinFileMgr::fromFile(pFile, &nTileIndex); HDDMBinFileMgr::fromFile(pFile, (unsigned int *)(this->tilePatternVec + 4LL * nTileIndex)); } IndexData[0] = 0; LOBYTE(IndexData[1]) = 0; HDDMBinFileMgr::fromFile(pFile, &this->numMaxNodeTemplateIndexCount2D); HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateIndexData2D); NodeTemplateIndexData2DVec = (void **)this->NodeTemplateIndexDataVec; qword70 = (void **)this->qword70; if ( NodeTemplateIndexData2DVec == qword70 ) { v12 = numMaxNodeTemplateIndexData2D; this->qword70 = NodeTemplateIndexData2DVec; nMaxNodeTemplateIndexDatas = v12; if ( !v12 ) goto LABEL_20; v11 = 0; goto LABEL_54; } NodeTemplateIndexDataVec = (void **)this->NodeTemplateIndexDataVec; do { if ( *NodeTemplateIndexDataVec ) operator delete(*NodeTemplateIndexDataVec); NodeTemplateIndexDataVec += 3; } while ( qword70 != NodeTemplateIndexDataVec ); v10 = this->NodeTemplateIndexDataVec; this->qword70 = NodeTemplateIndexData2DVec; v11 = 0xAAAAAAAAAAAAAAABLL * (((__int64)NodeTemplateIndexData2DVec - v10) >> 3); v12 = numMaxNodeTemplateIndexData2D; nMaxNodeTemplateIndexDatas = numMaxNodeTemplateIndexData2D; if ( numMaxNodeTemplateIndexData2D > v11 ) { LABEL_54: std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>>::_M_default_append( (__int64)&this->NodeTemplateIndexDataVec, v12 - v11); nMaxNodeTemplateIndexDatas = numMaxNodeTemplateIndexData2D; goto LABEL_20; } if ( numMaxNodeTemplateIndexData2D < v11 ) { v14 = (void **)(v10 + 24LL * numMaxNodeTemplateIndexData2D); if ( v14 != NodeTemplateIndexData2DVec ) { v15 = (void **)(v10 + 24LL * numMaxNodeTemplateIndexData2D); do { if ( *v15 ) operator delete(*v15); v15 += 3; } while ( v15 != NodeTemplateIndexData2DVec ); nMaxNodeTemplateIndexDatas = numMaxNodeTemplateIndexData2D; } this->qword70 = v14; } LABEL_20: if ( nMaxNodeTemplateIndexDatas ) { numMaxNodeTemplateIndexCount2D = this->numMaxNodeTemplateIndexCount2D; for ( j = 0; j < nMaxNodeTemplateIndexDatas; ++j ) { v18 = this->NodeTemplateIndexDataVec + 24LL * j; if ( numMaxNodeTemplateIndexCount2D ) { nIndexCont = 0; do { while ( 1 ) { HDDMBinFileMgr::fromFile(pFile, IndexData); HDDMBinFileMgr::fromFile(pFile, (unsigned __int8 *)&IndexData[1]); v20 = *(_QWORD **)(v18 + 8); if ( v20 != *(_QWORD **)(v18 + 16) ) break; ++nIndexCont; std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>::_M_emplace_back_aux<HDDMTemplateIOFlator::NodeTemplateIndexData const&>( v18, (__int64)IndexData); numMaxNodeTemplateIndexCount2D = this->numMaxNodeTemplateIndexCount2D; if ( this->numMaxNodeTemplateIndexCount2D <= nIndexCont ) goto LABEL_29; } if ( v20 ) { *v20 = *(_QWORD *)IndexData; v20 = *(_QWORD **)(v18 + 8); } ++nIndexCont; *(_QWORD *)(v18 + 8) = v20 + 1; numMaxNodeTemplateIndexCount2D = this->numMaxNodeTemplateIndexCount2D; } while ( this->numMaxNodeTemplateIndexCount2D > nIndexCont ); LABEL_29: nMaxNodeTemplateIndexDatas = numMaxNodeTemplateIndexData2D; } } } HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateIndexCount3D); HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateIndexDatas3D); NodeTemplateIndexData3DVec = this->NodeTemplateIndexData3DVec; qword88 = this->qword88; if ( NodeTemplateIndexData3DVec == qword88 ) { v28 = numMaxNodeTemplateIndexCount3D; this->qword88 = NodeTemplateIndexData3DVec; if ( !v28 ) goto LABEL_56; v27 = 0; goto LABEL_221; } v23 = this->NodeTemplateIndexData3DVec; do { v24 = *(unsigned int **)(v23 + 8); v25 = *(void ***)v23; if ( v24 != *(unsigned int **)v23 ) { do { if ( *v25 ) { v115 = v24; operator delete(*v25); v24 = v115; } v25 += 3; } while ( v24 != (unsigned int *)v25 ); v25 = *(void ***)v23; } if ( v25 ) operator delete(v25); v23 += 24; } while ( qword88 != v23 ); v26 = this->NodeTemplateIndexData3DVec; this->qword88 = NodeTemplateIndexData3DVec; v27 = 0xAAAAAAAAAAAAAAABLL * ((NodeTemplateIndexData3DVec - v26) >> 3); v28 = numMaxNodeTemplateIndexCount3D; if ( numMaxNodeTemplateIndexCount3D > v27 ) { LABEL_221: std::vector<std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>>>::_M_default_append( &this->NodeTemplateIndexData3DVec, v28 - v27); goto LABEL_56; } if ( numMaxNodeTemplateIndexCount3D < v27 ) { v29 = v26 + 24LL * numMaxNodeTemplateIndexCount3D; for ( k = v29; NodeTemplateIndexData3DVec != k; k += 24 ) { v31 = *(unsigned int **)(k + 8); v32 = *(void ***)k; if ( v31 != *(unsigned int **)k ) { do { if ( *v32 ) { v111 = v31; operator delete(*v32); v31 = v111; } v32 += 3; } while ( v31 != (unsigned int *)v32 ); v32 = *(void ***)k; } if ( v32 ) operator delete(v32); } this->qword88 = v29; } LABEL_56: v147 = 0; v148 = 0; v149 = 0; if ( numMaxNodeTemplateIndexDatas3D ) { for ( m = 0; m < numMaxNodeTemplateIndexDatas3D; ++m ) { HDDMBinFileMgr::fromFile(pFile, &offsetId); HDDMBinFileMgr::fromFile(pFile, &offsetSize); v33 = (unsigned int *)(this->NodeTemplateIndexData3DVec + 24LL * offsetId); v34 = *(char **)v33; v35 = (void **)*((_QWORD *)v33 + 1); v116 = v33; if ( *(void ***)v33 != v35 ) { v36 = *(void ***)v33; do { if ( *v36 ) operator delete(*v36); v36 += 3; } while ( v35 != v36 ); v33 = v116; v35 = *(void ***)v116; } *((_QWORD *)v33 + 1) = v34; v37 = offsetSize; v38 = offsetSize; if ( offsetSize > 0xAAAAAAAAAAAAAAABLL * ((__int64)(*((_QWORD *)v33 + 2) - (_QWORD)v35) >> 3) ) { v113 = (unsigned int *)(v34 - (char *)v35); if ( offsetSize ) { v37 = 24LL * offsetSize; v70 = (void **)operator new(v37); } else { v70 = 0; } for ( n = v70; v34 != (char *)v35; n += 3 ) { if ( n ) { n[1] = 0; n[2] = 0; *n = 0; *n = *v35; *v35 = 0; v72 = n[1]; n[1] = v35[1]; v35[1] = v72; v73 = n[2]; n[2] = v35[2]; v35[2] = v73; } v35 += 3; } v74 = (void **)*((_QWORD *)v116 + 1); v75 = *(void ***)v116; if ( v74 != *(void ***)v116 ) { do { if ( *v75 ) { v123 = v70; operator delete(*v75); v70 = v123; } v75 += 3; } while ( v74 != v75 ); v75 = *(void ***)v116; } if ( v75 ) { v124 = v70; operator delete(v75); v70 = v124; } *(_QWORD *)v116 = v70; *((_QWORD *)v116 + 1) = (char *)v113 + (_QWORD)v70; *((_QWORD *)v116 + 2) = (char *)v70 + v37; v38 = offsetSize; } if ( v38 ) { v122 = 0; do { HDDMBinFileMgr::fromFile(pFile, (unsigned __int16 *)&offsetCount); v39 = v147; v40 = (unsigned __int16)offsetCount; v148 = (char *)v147; v41 = (unsigned __int16)offsetCount; if ( (unsigned __int16)offsetCount > (unsigned __int64)((v149 - (_BYTE *)v147) >> 3) ) { if ( (_WORD)offsetCount ) { v40 = 8LL * (unsigned __int16)offsetCount; v48 = (char *)operator new(v40); v39 = v147; v49 = v48; } else { v49 = 0; } if ( v39 ) operator delete(v39); v147 = v49; v148 = v49; v149 = &v49[v40]; v41 = (unsigned __int16)offsetCount; } v42 = 0; while ( v42 < v41 ) { HDDMBinFileMgr::fromFile(pFile, (unsigned int *)&offsetValue); v43 = this->numMaxNodeTemplateIndexCount2D; v44 = (_QWORD *)(this->NodeTemplateIndexDataVec + 24LL * (unsigned int)offsetValue); v41 = (unsigned __int16)offsetCount; if ( this->numMaxNodeTemplateIndexCount2D && v42 != (unsigned __int16)offsetCount ) { v45 = 0; do { v47 = (_QWORD *)(*v44 + 8LL * v45); v46 = v148; if ( v148 == v149 ) { std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>::_M_emplace_back_aux<HDDMTemplateIOFlator::NodeTemplateIndexData const&>( (__int64)&v147, (__int64)v47); v43 = this->numMaxNodeTemplateIndexCount2D; v41 = (unsigned __int16)offsetCount; } else { if ( v148 ) { *(_QWORD *)v148 = *v47; v41 = (unsigned __int16)offsetCount; v46 = v148; v43 = this->numMaxNodeTemplateIndexCount2D; } v148 = v46 + 8; } ++v45; ++v42; } while ( v45 < v43 && v41 != v42 ); } } v50 = v116; v51 = (unsigned __int64 *)*((_QWORD *)v116 + 1); if ( v51 == *((unsigned __int64 **)v116 + 2) ) { std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>>::_M_emplace_back_aux<std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData> const&>( v116, &v147); } else { if ( v51 ) { v52 = v148 - (_BYTE *)v147; v51[1] = 0; *v51 = 0; v51[2] = 0; v53 = v52 >> 3; if ( v52 >> 3 ) { if ( v53 > 0x1FFFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); v53 = operator new(v52); } *v51 = v53; v51[1] = v53; v54 = v148; v55 = (char *)v147; v51[2] = v53 + v52; if ( v54 != v55 ) { v56 = (_QWORD *)v53; v57 = v55; do { if ( v56 ) *v56 = *(_QWORD *)v57; v57 += 8; ++v56; } while ( v54 != v57 ); v53 += 8 * ((unsigned __int64)(v54 - (v55 + 8)) >> 3) + 8; } v51[1] = v53; v50 = v116; v51 = (unsigned __int64 *)*((_QWORD *)v116 + 1); } *((_QWORD *)v50 + 1) = v51 + 3; } ++v122; } while ( offsetSize > v122 ); } } } HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateOffsetCount3D); HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateOffsetData3D); NodeTemplateOffsetData3DVec = this->NodeTemplateOffsetData3DVec; qwordA0 = this->qwordA0; if ( NodeTemplateOffsetData3DVec == qwordA0 ) { v65 = numMaxNodeTemplateOffsetCount3D; this->qwordA0 = NodeTemplateOffsetData3DVec; if ( !v65 ) goto LABEL_141; v64 = 0; goto LABEL_219; } v60 = this->NodeTemplateOffsetData3DVec; do { v61 = *(unsigned int **)(v60 + 8); v62 = *(void ***)v60; if ( v61 != *(unsigned int **)v60 ) { do { if ( *v62 ) { v117 = v61; operator delete(*v62); v61 = v117; } v62 += 3; } while ( v61 != (unsigned int *)v62 ); v62 = *(void ***)v60; } if ( v62 ) operator delete(v62); v60 += 24; } while ( qwordA0 != v60 ); v63 = this->NodeTemplateOffsetData3DVec; this->qwordA0 = NodeTemplateOffsetData3DVec; v64 = 0xAAAAAAAAAAAAAAABLL * ((NodeTemplateOffsetData3DVec - v63) >> 3); v65 = numMaxNodeTemplateOffsetCount3D; if ( numMaxNodeTemplateOffsetCount3D > v64 ) { LABEL_219: std::vector<std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateOffsetData>>>::_M_default_append( &this->NodeTemplateOffsetData3DVec, v65 - v64); goto LABEL_141; } if ( numMaxNodeTemplateOffsetCount3D < v64 ) { v66 = v63 + 24LL * numMaxNodeTemplateOffsetCount3D; for ( ii = v66; NodeTemplateOffsetData3DVec != ii; ii += 24 ) { v68 = *(unsigned int **)(ii + 8); v69 = *(void ***)ii; if ( v68 != *(unsigned int **)ii ) { do { if ( *v69 ) { v112 = v68; operator delete(*v69); v68 = v112; } v69 += 3; } while ( v68 != (unsigned int *)v69 ); v69 = *(void ***)ii; } if ( v69 ) operator delete(v69); } this->qwordA0 = v66; } LABEL_141: LOBYTE(v129[1]) = 0; v129[0] = 0; offsetValue = 0; v151 = 0; v152 = 0; if ( numMaxNodeTemplateOffsetData3D ) { for ( jj = 0; jj < numMaxNodeTemplateOffsetData3D; ++jj ) { HDDMBinFileMgr::fromFile(pFile, &offsetId); HDDMBinFileMgr::fromFile(pFile, &v140); v76 = (unsigned int *)(this->NodeTemplateOffsetData3DVec + 24LL * offsetId); v77 = *(unsigned int **)v76; v78 = (void **)*((_QWORD *)v76 + 1); v114 = v76; v118 = *(unsigned int **)v76; if ( *(void ***)v76 != v78 ) { v79 = *(void ***)v76; do { if ( *v79 ) operator delete(*v79); v79 += 3; } while ( v78 != v79 ); v76 = v114; v77 = v118; v78 = *(void ***)v114; } *((_QWORD *)v76 + 1) = v77; v80 = v140; v81 = v140; if ( v140 > 0xAAAAAAAAAAAAAAABLL * ((__int64)(*((_QWORD *)v76 + 2) - (_QWORD)v78) >> 3) ) { v127 = (char *)v77 - (char *)v78; if ( v140 ) { v80 = 24LL * v140; v103 = (void **)operator new(v80); } else { v103 = 0; } for ( kk = v103; v118 != (unsigned int *)v78; kk += 3 ) { if ( kk ) { kk[1] = 0; kk[2] = 0; *kk = 0; *kk = *v78; *v78 = 0; v105 = kk[1]; kk[1] = v78[1]; v78[1] = v105; v106 = kk[2]; kk[2] = v78[2]; v78[2] = v106; } v78 += 3; } v107 = (unsigned int *)*((_QWORD *)v114 + 1); v108 = *(void ***)v114; if ( v107 != *(unsigned int **)v114 ) { do { if ( *v108 ) { v128 = (unsigned __int16 *)v103; v120 = v107; operator delete(*v108); v103 = (void **)v128; v107 = v120; } v108 += 3; } while ( v107 != (unsigned int *)v108 ); v108 = *(void ***)v114; } if ( v108 ) { v121 = (unsigned int *)v103; operator delete(v108); v103 = (void **)v121; } *(_QWORD *)v114 = v103; *((_QWORD *)v114 + 1) = (char *)v103 + v127; *((_QWORD *)v114 + 2) = (char *)v103 + v80; v81 = v140; } if ( v81 ) { v119 = 0; do { HDDMBinFileMgr::fromFile(pFile, (unsigned __int16 *)&offsetCount); v82 = offsetValue; v83 = (unsigned __int16)offsetCount; v151 = (char *)offsetValue; v84 = offsetCount; if ( (unsigned __int16)offsetCount > (unsigned __int64)((v152 - (_BYTE *)offsetValue) >> 2) ) { if ( (_WORD)offsetCount ) { v83 = 4LL * (unsigned __int16)offsetCount; v101 = (char *)operator new(v83); v82 = offsetValue; v102 = v101; } else { v102 = 0; } if ( v82 ) operator delete(v82); offsetValue = v102; v151 = v102; v152 = &v102[v83]; v84 = offsetCount; } v85 = 0; if ( v84 ) { do { while ( 1 ) { HDDMBinFileMgr::fromFile(pFile, v129); HDDMBinFileMgr::fromFile(pFile, (unsigned __int8 *)&v129[1]); v86 = v151; if ( v151 != v152 ) break; std::vector<HDDMTemplateIOFlator::NodeTemplateOffsetData>::_M_emplace_back_aux<HDDMTemplateIOFlator::NodeTemplateOffsetData const&>( (__int64)&offsetValue, (__int64)v129); if ( (unsigned __int16)offsetCount <= ++v85 ) goto LABEL_160; } if ( v151 ) { *(_DWORD *)v151 = *(_DWORD *)v129; v86 = v151; } ++v85; v151 = v86 + 4; } while ( (unsigned __int16)offsetCount > v85 ); } LABEL_160: v87 = v114; v88 = (unsigned __int64 *)*((_QWORD *)v114 + 1); if ( v88 == *((unsigned __int64 **)v114 + 2) ) { std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateOffsetData>>::_M_emplace_back_aux<std::vector<HDDMTemplateIOFlator::NodeTemplateOffsetData> const&>( v114, &offsetValue); } else { if ( v88 ) { v89 = v151 - (_BYTE *)offsetValue; *v88 = 0; v88[1] = 0; v88[2] = 0; v90 = v89 >> 2; if ( v89 >> 2 ) { if ( v90 > 0x3FFFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); v90 = operator new(v89); } *v88 = v90; v88[1] = v90; v88[2] = v90 + v89; v91 = v151; v92 = offsetValue; if ( v151 != offsetValue ) { v93 = (_DWORD *)v90; v94 = (char *)offsetValue; do { if ( v93 ) *v93 = *(_DWORD *)v94; v94 += 4; ++v93; } while ( v91 != v94 ); v90 += 4 * ((unsigned __int64)(v91 - (v92 + 4)) >> 2) + 4; } v88[1] = v90; v87 = v114; v88 = (unsigned __int64 *)*((_QWORD *)v114 + 1); } *((_QWORD *)v87 + 1) = v88 + 3; } ++v119; } while ( v140 > v119 ); } } } HDDMBinFileMgr::fromFile(pFile, &numMaxTileData); tilePatternDataVec = (void *)this->tilePatternDataVec; v96 = numMaxTileData; qword30 = this->qword30; this->qword28 = tilePatternDataVec; v98 = v96; if ( v96 > 0xAAAAAAAAAAAAAAABLL * ((qword30 - (__int64)tilePatternDataVec) >> 2) ) { if ( v96 ) { v96 *= 12LL; v109 = operator new(v96); tilePatternDataVec = (void *)this->tilePatternDataVec; v110 = v109; } else { v110 = 0; } if ( tilePatternDataVec ) operator delete(tilePatternDataVec); this->tilePatternDataVec = v110; this->qword28 = v110; this->qword30 = v110 + v96; v98 = numMaxTileData; } if ( v98 ) { v99 = 0; do { HDDMBinFileMgr::fromFile(pFile, &nTileIndex); HDDMBinFileMgr::fromFile(pFile, &v142); HDDMBinFileMgr::fromFile(pFile, &v143); offsetCount = __PAIR64__(v142, nTileIndex); v146 = v143; qword28 = this->qword28; if ( qword28 == this->qword30 ) { std::vector<HDDMTemplateIOFlator::TilePatternData>::_M_emplace_back_aux<HDDMTemplateIOFlator::TilePatternData>( (__int64)&this->tilePatternDataVec, (__int64)&offsetCount); } else { if ( qword28 ) { *(_QWORD *)qword28 = offsetCount; *(_DWORD *)(qword28 + 8) = v146; qword28 = this->qword28; } this->qword28 = qword28 + 12; } ++v99; } while ( numMaxTileData > v99 ); } if ( offsetValue ) operator delete(offsetValue); if ( v147 ) operator delete(v147); }
09-18
请仔细阅读分析下面函数,进行深度优化后, 自定义结构体内部元素请采用32位定义,特别注意读取数据的类型,实现可编译、完整的代码 void __fastcall HDDMTemplateIOFlator::loadTilePatterns(HDDMTemplateIOFlator *this, HDDMBinFileMgr *pFile) { __int64 v4; // rdx __int64 tilePatternVec; // rsi unsigned int i; // ebx void **NodeTemplateIndexData2DVec; // rbp void **qword70; // r15 void **NodeTemplateIndexDataVec; // r13 __int64 v10; // rsi unsigned __int64 v11; // rax __int64 v12; // rdx unsigned int nMaxNodeTemplateIndexDatas; // ecx void **v14; // r13 void **v15; // rbx int numMaxNodeTemplateIndexCount2D; // eax unsigned int j; // ebp __int64 v18; // r13 unsigned int nIndexCont; // r15d _QWORD *v20; // rax __int64 NodeTemplateIndexData3DVec; // rbx __int64 qword88; // r15 __int64 v23; // rbp unsigned int *v24; // rax void **v25; // r13 __int64 v26; // rcx unsigned __int64 v27; // rax __int64 v28; // rdx __int64 v29; // r15 __int64 k; // r13 unsigned int *v31; // rax void **v32; // rbp unsigned int *v33; // rax char *v34; // r13 void **v35; // rbx void **v36; // rbp unsigned __int64 v37; // rbp unsigned int v38; // edx void *v39; // rdi unsigned __int64 v40; // rbx unsigned int v41; // edx unsigned int v42; // ebp unsigned int v43; // ecx _QWORD *v44; // r13 unsigned int v45; // ebx char *v46; // rax _QWORD *v47; // rsi char *v48; // rax char *v49; // rbp unsigned int *v50; // rax unsigned __int64 *v51; // rbx signed __int64 v52; // rbp unsigned __int64 v53; // rax char *v54; // rdi char *v55; // r8 _QWORD *v56; // rcx char *v57; // rdx __int64 NodeTemplateOffsetData3DVec; // rbx __int64 qwordA0; // r15 __int64 v60; // rbp unsigned int *v61; // rax void **v62; // r13 __int64 v63; // rcx unsigned __int64 v64; // rax __int64 v65; // rdx __int64 v66; // r15 __int64 ii; // r13 unsigned int *v68; // rax void **v69; // rbp void **v70; // rax void **n; // rdx void *v72; // rcx void *v73; // rcx void **v74; // r13 void **v75; // rbx unsigned int *v76; // rax unsigned int *v77; // rdi void **v78; // rbx void **v79; // rbp unsigned __int64 v80; // rbp unsigned int v81; // edx void *v82; // rdi unsigned __int64 v83; // rbx __int16 v84; // dx unsigned int v85; // ebx char *v86; // rax unsigned int *v87; // rax unsigned __int64 *v88; // rbp signed __int64 v89; // rbx unsigned __int64 v90; // rax char *v91; // rsi _BYTE *v92; // r8 _DWORD *v93; // rcx char *v94; // rdx void *tilePatternDataVec; // rdi unsigned __int64 v96; // rbx __int64 qword30; // rax unsigned int v98; // edx unsigned int v99; // ebx __int64 qword28; // rax char *v101; // rax char *v102; // rbp void **v103; // rax void **kk; // rdx void *v105; // rcx void *v106; // rcx unsigned int *v107; // rdx void **v108; // rbx __int64 v109; // rax __int64 v110; // rbp unsigned int *v111; // [rsp+0h] [rbp-108h] unsigned int *v112; // [rsp+0h] [rbp-108h] unsigned int *v113; // [rsp+0h] [rbp-108h] unsigned int *v114; // [rsp+0h] [rbp-108h] unsigned int *v115; // [rsp+8h] [rbp-100h] unsigned int *v116; // [rsp+8h] [rbp-100h] unsigned int *v117; // [rsp+8h] [rbp-100h] unsigned int *v118; // [rsp+8h] [rbp-100h] unsigned int v119; // [rsp+8h] [rbp-100h] unsigned int *v120; // [rsp+8h] [rbp-100h] unsigned int *v121; // [rsp+8h] [rbp-100h] unsigned int v122; // [rsp+10h] [rbp-F8h] void **v123; // [rsp+10h] [rbp-F8h] void **v124; // [rsp+10h] [rbp-F8h] unsigned int jj; // [rsp+10h] [rbp-F8h] unsigned int m; // [rsp+18h] [rbp-F0h] signed __int64 v127; // [rsp+18h] [rbp-F0h] unsigned __int16 *v128; // [rsp+28h] [rbp-E0h] unsigned __int16 v129[2]; // [rsp+30h] [rbp-D8h] BYREF unsigned int nTileIndex; // [rsp+38h] [rbp-D0h] BYREF unsigned int numMaxTileIndex; // [rsp+3Ch] [rbp-CCh] BYREF unsigned int numMaxTilePattern; // [rsp+40h] [rbp-C8h] BYREF unsigned int numMaxNodeTemplateIndexData2D; // [rsp+44h] [rbp-C4h] BYREF unsigned int offsetId; // [rsp+48h] [rbp-C0h] BYREF unsigned int numMaxNodeTemplateIndexCount3D; // [rsp+4Ch] [rbp-BCh] BYREF unsigned int numMaxNodeTemplateIndexDatas3D; // [rsp+50h] [rbp-B8h] BYREF unsigned int offsetSize; // [rsp+54h] [rbp-B4h] BYREF unsigned int numMaxNodeTemplateOffsetCount3D; // [rsp+58h] [rbp-B0h] BYREF unsigned int numMaxNodeTemplateOffsetData3D; // [rsp+5Ch] [rbp-ACh] BYREF unsigned int v140; // [rsp+60h] [rbp-A8h] BYREF unsigned int numMaxTileData; // [rsp+64h] [rbp-A4h] BYREF unsigned int v142; // [rsp+68h] [rbp-A0h] BYREF unsigned int v143; // [rsp+6Ch] [rbp-9Ch] BYREF unsigned int IndexData[2]; // [rsp+70h] [rbp-98h] BYREF unsigned __int64 offsetCount; // [rsp+80h] [rbp-88h] BYREF unsigned int v146; // [rsp+88h] [rbp-80h] void *v147; // [rsp+90h] [rbp-78h] BYREF char *v148; // [rsp+98h] [rbp-70h] char *v149; // [rsp+A0h] [rbp-68h] void *offsetValue; // [rsp+B0h] [rbp-58h] BYREF char *v151; // [rsp+B8h] [rbp-50h] char *v152; // [rsp+C0h] [rbp-48h] HDDMBinFileMgr::fromFile(pFile, &numMaxTileIndex); HDDMBinFileMgr::fromFile(pFile, &numMaxTilePattern); v4 = numMaxTileIndex; tilePatternVec = this->tilePatternVec; LODWORD(offsetValue) = -1; this->qword10 = tilePatternVec; if ( v4 ) std::vector<unsigned int>::_M_fill_insert(&this->tilePatternVec, tilePatternVec, v4, &offsetValue); for ( i = 0; numMaxTilePattern > i; ++i ) { HDDMBinFileMgr::fromFile(pFile, &nTileIndex); HDDMBinFileMgr::fromFile(pFile, (unsigned int *)(this->tilePatternVec + 4LL * nTileIndex)); } IndexData[0] = 0; LOBYTE(IndexData[1]) = 0; HDDMBinFileMgr::fromFile(pFile, &this->numMaxNodeTemplateIndexCount2D); HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateIndexData2D); NodeTemplateIndexData2DVec = (void **)this->NodeTemplateIndexDataVec; qword70 = (void **)this->qword70; if ( NodeTemplateIndexData2DVec == qword70 ) { v12 = numMaxNodeTemplateIndexData2D; this->qword70 = NodeTemplateIndexData2DVec; nMaxNodeTemplateIndexDatas = v12; if ( !v12 ) goto LABEL_20; v11 = 0; goto LABEL_54; } NodeTemplateIndexDataVec = (void **)this->NodeTemplateIndexDataVec; do { if ( *NodeTemplateIndexDataVec ) operator delete(*NodeTemplateIndexDataVec); NodeTemplateIndexDataVec += 3; } while ( qword70 != NodeTemplateIndexDataVec ); v10 = this->NodeTemplateIndexDataVec; this->qword70 = NodeTemplateIndexData2DVec; v11 = 0xAAAAAAAAAAAAAAABLL * (((__int64)NodeTemplateIndexData2DVec - v10) >> 3); v12 = numMaxNodeTemplateIndexData2D; nMaxNodeTemplateIndexDatas = numMaxNodeTemplateIndexData2D; if ( numMaxNodeTemplateIndexData2D > v11 ) { LABEL_54: std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>>::_M_default_append( (__int64)&this->NodeTemplateIndexDataVec, v12 - v11); nMaxNodeTemplateIndexDatas = numMaxNodeTemplateIndexData2D; goto LABEL_20; } if ( numMaxNodeTemplateIndexData2D < v11 ) { v14 = (void **)(v10 + 24LL * numMaxNodeTemplateIndexData2D); if ( v14 != NodeTemplateIndexData2DVec ) { v15 = (void **)(v10 + 24LL * numMaxNodeTemplateIndexData2D); do { if ( *v15 ) operator delete(*v15); v15 += 3; } while ( v15 != NodeTemplateIndexData2DVec ); nMaxNodeTemplateIndexDatas = numMaxNodeTemplateIndexData2D; } this->qword70 = v14; } LABEL_20: if ( nMaxNodeTemplateIndexDatas ) { numMaxNodeTemplateIndexCount2D = this->numMaxNodeTemplateIndexCount2D; for ( j = 0; j < nMaxNodeTemplateIndexDatas; ++j ) { v18 = this->NodeTemplateIndexDataVec + 24LL * j; if ( numMaxNodeTemplateIndexCount2D ) { nIndexCont = 0; do { while ( 1 ) { HDDMBinFileMgr::fromFile(pFile, IndexData); HDDMBinFileMgr::fromFile(pFile, (unsigned __int8 *)&IndexData[1]); v20 = *(_QWORD **)(v18 + 8); if ( v20 != *(_QWORD **)(v18 + 16) ) break; ++nIndexCont; std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>::_M_emplace_back_aux<HDDMTemplateIOFlator::NodeTemplateIndexData const&>( v18, (__int64)IndexData); numMaxNodeTemplateIndexCount2D = this->numMaxNodeTemplateIndexCount2D; if ( this->numMaxNodeTemplateIndexCount2D <= nIndexCont ) goto LABEL_29; } if ( v20 ) { *v20 = *(_QWORD *)IndexData; v20 = *(_QWORD **)(v18 + 8); } ++nIndexCont; *(_QWORD *)(v18 + 8) = v20 + 1; numMaxNodeTemplateIndexCount2D = this->numMaxNodeTemplateIndexCount2D; } while ( this->numMaxNodeTemplateIndexCount2D > nIndexCont ); LABEL_29: nMaxNodeTemplateIndexDatas = numMaxNodeTemplateIndexData2D; } } } HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateIndexCount3D); HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateIndexDatas3D); NodeTemplateIndexData3DVec = this->NodeTemplateIndexData3DVec; qword88 = this->qword88; if ( NodeTemplateIndexData3DVec == qword88 ) { v28 = numMaxNodeTemplateIndexCount3D; this->qword88 = NodeTemplateIndexData3DVec; if ( !v28 ) goto LABEL_56; v27 = 0; goto LABEL_221; } v23 = this->NodeTemplateIndexData3DVec; do { v24 = *(unsigned int **)(v23 + 8); v25 = *(void ***)v23; if ( v24 != *(unsigned int **)v23 ) { do { if ( *v25 ) { v115 = v24; operator delete(*v25); v24 = v115; } v25 += 3; } while ( v24 != (unsigned int *)v25 ); v25 = *(void ***)v23; } if ( v25 ) operator delete(v25); v23 += 24; } while ( qword88 != v23 ); v26 = this->NodeTemplateIndexData3DVec; this->qword88 = NodeTemplateIndexData3DVec; v27 = 0xAAAAAAAAAAAAAAABLL * ((NodeTemplateIndexData3DVec - v26) >> 3); v28 = numMaxNodeTemplateIndexCount3D; if ( numMaxNodeTemplateIndexCount3D > v27 ) { LABEL_221: std::vector<std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>>>::_M_default_append( &this->NodeTemplateIndexData3DVec, v28 - v27); goto LABEL_56; } if ( numMaxNodeTemplateIndexCount3D < v27 ) { v29 = v26 + 24LL * numMaxNodeTemplateIndexCount3D; for ( k = v29; NodeTemplateIndexData3DVec != k; k += 24 ) { v31 = *(unsigned int **)(k + 8); v32 = *(void ***)k; if ( v31 != *(unsigned int **)k ) { do { if ( *v32 ) { v111 = v31; operator delete(*v32); v31 = v111; } v32 += 3; } while ( v31 != (unsigned int *)v32 ); v32 = *(void ***)k; } if ( v32 ) operator delete(v32); } this->qword88 = v29; } LABEL_56: v147 = 0; v148 = 0; v149 = 0; if ( numMaxNodeTemplateIndexDatas3D ) { for ( m = 0; m < numMaxNodeTemplateIndexDatas3D; ++m ) { HDDMBinFileMgr::fromFile(pFile, &offsetId); HDDMBinFileMgr::fromFile(pFile, &offsetSize); v33 = (unsigned int *)(this->NodeTemplateIndexData3DVec + 24LL * offsetId); v34 = *(char **)v33; v35 = (void **)*((_QWORD *)v33 + 1); v116 = v33; if ( *(void ***)v33 != v35 ) { v36 = *(void ***)v33; do { if ( *v36 ) operator delete(*v36); v36 += 3; } while ( v35 != v36 ); v33 = v116; v35 = *(void ***)v116; } *((_QWORD *)v33 + 1) = v34; v37 = offsetSize; v38 = offsetSize; if ( offsetSize > 0xAAAAAAAAAAAAAAABLL * ((__int64)(*((_QWORD *)v33 + 2) - (_QWORD)v35) >> 3) ) { v113 = (unsigned int *)(v34 - (char *)v35); if ( offsetSize ) { v37 = 24LL * offsetSize; v70 = (void **)operator new(v37); } else { v70 = 0; } for ( n = v70; v34 != (char *)v35; n += 3 ) { if ( n ) { n[1] = 0; n[2] = 0; *n = 0; *n = *v35; *v35 = 0; v72 = n[1]; n[1] = v35[1]; v35[1] = v72; v73 = n[2]; n[2] = v35[2]; v35[2] = v73; } v35 += 3; } v74 = (void **)*((_QWORD *)v116 + 1); v75 = *(void ***)v116; if ( v74 != *(void ***)v116 ) { do { if ( *v75 ) { v123 = v70; operator delete(*v75); v70 = v123; } v75 += 3; } while ( v74 != v75 ); v75 = *(void ***)v116; } if ( v75 ) { v124 = v70; operator delete(v75); v70 = v124; } *(_QWORD *)v116 = v70; *((_QWORD *)v116 + 1) = (char *)v113 + (_QWORD)v70; *((_QWORD *)v116 + 2) = (char *)v70 + v37; v38 = offsetSize; } if ( v38 ) { v122 = 0; do { HDDMBinFileMgr::fromFile(pFile, (unsigned __int16 *)&offsetCount); v39 = v147; v40 = (unsigned __int16)offsetCount; v148 = (char *)v147; v41 = (unsigned __int16)offsetCount; if ( (unsigned __int16)offsetCount > (unsigned __int64)((v149 - (_BYTE *)v147) >> 3) ) { if ( (_WORD)offsetCount ) { v40 = 8LL * (unsigned __int16)offsetCount; v48 = (char *)operator new(v40); v39 = v147; v49 = v48; } else { v49 = 0; } if ( v39 ) operator delete(v39); v147 = v49; v148 = v49; v149 = &v49[v40]; v41 = (unsigned __int16)offsetCount; } v42 = 0; while ( v42 < v41 ) { HDDMBinFileMgr::fromFile(pFile, (unsigned int *)&offsetValue); v43 = this->numMaxNodeTemplateIndexCount2D; v44 = (_QWORD *)(this->NodeTemplateIndexDataVec + 24LL * (unsigned int)offsetValue); v41 = (unsigned __int16)offsetCount; if ( this->numMaxNodeTemplateIndexCount2D && v42 != (unsigned __int16)offsetCount ) { v45 = 0; do { v47 = (_QWORD *)(*v44 + 8LL * v45); v46 = v148; if ( v148 == v149 ) { std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>::_M_emplace_back_aux<HDDMTemplateIOFlator::NodeTemplateIndexData const&>( (__int64)&v147, (__int64)v47); v43 = this->numMaxNodeTemplateIndexCount2D; v41 = (unsigned __int16)offsetCount; } else { if ( v148 ) { *(_QWORD *)v148 = *v47; v41 = (unsigned __int16)offsetCount; v46 = v148; v43 = this->numMaxNodeTemplateIndexCount2D; } v148 = v46 + 8; } ++v45; ++v42; } while ( v45 < v43 && v41 != v42 ); } } v50 = v116; v51 = (unsigned __int64 *)*((_QWORD *)v116 + 1); if ( v51 == *((unsigned __int64 **)v116 + 2) ) { std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData>>::_M_emplace_back_aux<std::vector<HDDMTemplateIOFlator::NodeTemplateIndexData> const&>( v116, &v147); } else { if ( v51 ) { v52 = v148 - (_BYTE *)v147; v51[1] = 0; *v51 = 0; v51[2] = 0; v53 = v52 >> 3; if ( v52 >> 3 ) { if ( v53 > 0x1FFFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); v53 = operator new(v52); } *v51 = v53; v51[1] = v53; v54 = v148; v55 = (char *)v147; v51[2] = v53 + v52; if ( v54 != v55 ) { v56 = (_QWORD *)v53; v57 = v55; do { if ( v56 ) *v56 = *(_QWORD *)v57; v57 += 8; ++v56; } while ( v54 != v57 ); v53 += 8 * ((unsigned __int64)(v54 - (v55 + 8)) >> 3) + 8; } v51[1] = v53; v50 = v116; v51 = (unsigned __int64 *)*((_QWORD *)v116 + 1); } *((_QWORD *)v50 + 1) = v51 + 3; } ++v122; } while ( offsetSize > v122 ); } } } HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateOffsetCount3D); HDDMBinFileMgr::fromFile(pFile, &numMaxNodeTemplateOffsetData3D); NodeTemplateOffsetData3DVec = this->NodeTemplateOffsetData3DVec; qwordA0 = this->qwordA0; if ( NodeTemplateOffsetData3DVec == qwordA0 ) { v65 = numMaxNodeTemplateOffsetCount3D; this->qwordA0 = NodeTemplateOffsetData3DVec; if ( !v65 ) goto LABEL_141; v64 = 0; goto LABEL_219; } v60 = this->NodeTemplateOffsetData3DVec; do { v61 = *(unsigned int **)(v60 + 8); v62 = *(void ***)v60; if ( v61 != *(unsigned int **)v60 ) { do { if ( *v62 ) { v117 = v61; operator delete(*v62); v61 = v117; } v62 += 3; } while ( v61 != (unsigned int *)v62 ); v62 = *(void ***)v60; } if ( v62 ) operator delete(v62); v60 += 24; } while ( qwordA0 != v60 ); v63 = this->NodeTemplateOffsetData3DVec; this->qwordA0 = NodeTemplateOffsetData3DVec; v64 = 0xAAAAAAAAAAAAAAABLL * ((NodeTemplateOffsetData3DVec - v63) >> 3); v65 = numMaxNodeTemplateOffsetCount3D; if ( numMaxNodeTemplateOffsetCount3D > v64 ) { LABEL_219: std::vector<std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateOffsetData>>>::_M_default_append( &this->NodeTemplateOffsetData3DVec, v65 - v64); goto LABEL_141; } if ( numMaxNodeTemplateOffsetCount3D < v64 ) { v66 = v63 + 24LL * numMaxNodeTemplateOffsetCount3D; for ( ii = v66; NodeTemplateOffsetData3DVec != ii; ii += 24 ) { v68 = *(unsigned int **)(ii + 8); v69 = *(void ***)ii; if ( v68 != *(unsigned int **)ii ) { do { if ( *v69 ) { v112 = v68; operator delete(*v69); v68 = v112; } v69 += 3; } while ( v68 != (unsigned int *)v69 ); v69 = *(void ***)ii; } if ( v69 ) operator delete(v69); } this->qwordA0 = v66; } LABEL_141: LOBYTE(v129[1]) = 0; v129[0] = 0; offsetValue = 0; v151 = 0; v152 = 0; if ( numMaxNodeTemplateOffsetData3D ) { for ( jj = 0; jj < numMaxNodeTemplateOffsetData3D; ++jj ) { HDDMBinFileMgr::fromFile(pFile, &offsetId); HDDMBinFileMgr::fromFile(pFile, &v140); v76 = (unsigned int *)(this->NodeTemplateOffsetData3DVec + 24LL * offsetId); v77 = *(unsigned int **)v76; v78 = (void **)*((_QWORD *)v76 + 1); v114 = v76; v118 = *(unsigned int **)v76; if ( *(void ***)v76 != v78 ) { v79 = *(void ***)v76; do { if ( *v79 ) operator delete(*v79); v79 += 3; } while ( v78 != v79 ); v76 = v114; v77 = v118; v78 = *(void ***)v114; } *((_QWORD *)v76 + 1) = v77; v80 = v140; v81 = v140; if ( v140 > 0xAAAAAAAAAAAAAAABLL * ((__int64)(*((_QWORD *)v76 + 2) - (_QWORD)v78) >> 3) ) { v127 = (char *)v77 - (char *)v78; if ( v140 ) { v80 = 24LL * v140; v103 = (void **)operator new(v80); } else { v103 = 0; } for ( kk = v103; v118 != (unsigned int *)v78; kk += 3 ) { if ( kk ) { kk[1] = 0; kk[2] = 0; *kk = 0; *kk = *v78; *v78 = 0; v105 = kk[1]; kk[1] = v78[1]; v78[1] = v105; v106 = kk[2]; kk[2] = v78[2]; v78[2] = v106; } v78 += 3; } v107 = (unsigned int *)*((_QWORD *)v114 + 1); v108 = *(void ***)v114; if ( v107 != *(unsigned int **)v114 ) { do { if ( *v108 ) { v128 = (unsigned __int16 *)v103; v120 = v107; operator delete(*v108); v103 = (void **)v128; v107 = v120; } v108 += 3; } while ( v107 != (unsigned int *)v108 ); v108 = *(void ***)v114; } if ( v108 ) { v121 = (unsigned int *)v103; operator delete(v108); v103 = (void **)v121; } *(_QWORD *)v114 = v103; *((_QWORD *)v114 + 1) = (char *)v103 + v127; *((_QWORD *)v114 + 2) = (char *)v103 + v80; v81 = v140; } if ( v81 ) { v119 = 0; do { HDDMBinFileMgr::fromFile(pFile, (unsigned __int16 *)&offsetCount); v82 = offsetValue; v83 = (unsigned __int16)offsetCount; v151 = (char *)offsetValue; v84 = offsetCount; if ( (unsigned __int16)offsetCount > (unsigned __int64)((v152 - (_BYTE *)offsetValue) >> 2) ) { if ( (_WORD)offsetCount ) { v83 = 4LL * (unsigned __int16)offsetCount; v101 = (char *)operator new(v83); v82 = offsetValue; v102 = v101; } else { v102 = 0; } if ( v82 ) operator delete(v82); offsetValue = v102; v151 = v102; v152 = &v102[v83]; v84 = offsetCount; } v85 = 0; if ( v84 ) { do { while ( 1 ) { HDDMBinFileMgr::fromFile(pFile, v129); HDDMBinFileMgr::fromFile(pFile, (unsigned __int8 *)&v129[1]); v86 = v151; if ( v151 != v152 ) break; std::vector<HDDMTemplateIOFlator::NodeTemplateOffsetData>::_M_emplace_back_aux<HDDMTemplateIOFlator::NodeTemplateOffsetData const&>( (__int64)&offsetValue, (__int64)v129); if ( (unsigned __int16)offsetCount <= ++v85 ) goto LABEL_160; } if ( v151 ) { *(_DWORD *)v151 = *(_DWORD *)v129; v86 = v151; } ++v85; v151 = v86 + 4; } while ( (unsigned __int16)offsetCount > v85 ); } LABEL_160: v87 = v114; v88 = (unsigned __int64 *)*((_QWORD *)v114 + 1); if ( v88 == *((unsigned __int64 **)v114 + 2) ) { std::vector<std::vector<HDDMTemplateIOFlator::NodeTemplateOffsetData>>::_M_emplace_back_aux<std::vector<HDDMTemplateIOFlator::NodeTemplateOffsetData> const&>( v114, &offsetValue); } else { if ( v88 ) { v89 = v151 - (_BYTE *)offsetValue; *v88 = 0; v88[1] = 0; v88[2] = 0; v90 = v89 >> 2; if ( v89 >> 2 ) { if ( v90 > 0x3FFFFFFFFFFFFFFFLL ) std::__throw_bad_alloc(); v90 = operator new(v89); } *v88 = v90; v88[1] = v90; v88[2] = v90 + v89; v91 = v151; v92 = offsetValue; if ( v151 != offsetValue ) { v93 = (_DWORD *)v90; v94 = (char *)offsetValue; do { if ( v93 ) *v93 = *(_DWORD *)v94; v94 += 4; ++v93; } while ( v91 != v94 ); v90 += 4 * ((unsigned __int64)(v91 - (v92 + 4)) >> 2) + 4; } v88[1] = v90; v87 = v114; v88 = (unsigned __int64 *)*((_QWORD *)v114 + 1); } *((_QWORD *)v87 + 1) = v88 + 3; } ++v119; } while ( v140 > v119 ); } } } HDDMBinFileMgr::fromFile(pFile, &numMaxTileData); tilePatternDataVec = (void *)this->tilePatternDataVec; v96 = numMaxTileData; qword30 = this->qword30; this->qword28 = tilePatternDataVec; v98 = v96; if ( v96 > 0xAAAAAAAAAAAAAAABLL * ((qword30 - (__int64)tilePatternDataVec) >> 2) ) { if ( v96 ) { v96 *= 12LL; v109 = operator new(v96); tilePatternDataVec = (void *)this->tilePatternDataVec; v110 = v109; } else { v110 = 0; } if ( tilePatternDataVec ) operator delete(tilePatternDataVec); this->tilePatternDataVec = v110; this->qword28 = v110; this->qword30 = v110 + v96; v98 = numMaxTileData; } if ( v98 ) { v99 = 0; do { HDDMBinFileMgr::fromFile(pFile, &nTileIndex); HDDMBinFileMgr::fromFile(pFile, &v142); HDDMBinFileMgr::fromFile(pFile, &v143); offsetCount = __PAIR64__(v142, nTileIndex); v146 = v143; qword28 = this->qword28; if ( qword28 == this->qword30 ) { std::vector<HDDMTemplateIOFlator::TilePatternData>::_M_emplace_back_aux<HDDMTemplateIOFlator::TilePatternData>( (__int64)&this->tilePatternDataVec, (__int64)&offsetCount); } else { if ( qword28 ) { *(_QWORD *)qword28 = offsetCount; *(_DWORD *)(qword28 + 8) = v146; qword28 = this->qword28; } this->qword28 = qword28 + 12; } ++v99; } while ( numMaxTileData > v99 ); } if ( offsetValue ) operator delete(offsetValue); if ( v147 ) operator delete(v147); }
最新发布
09-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值