请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码
特别注意:
1.保持所有原始功能不变
2.提高执行效率,降低计算复杂度
3.已经给定的结构体名字和元素不要更改,详细的中文注释
4.自动添加中文注释说明功能逻辑
5.不使用 auto,使用显式 for 循环
6.结构体采用32位定义
7.不要使用小函数,保持原始的函数定义
__int64 __fastcall hddp::Driver::parse_file(hddp::Driver *this, const std::string *a2)
{
std::ostream *v3; // rbx
__int64 v4; // rax
_BYTE *v5; // rbp
char v6; // al
std::ostream *v7; // rax
__int64 v8; // r15
char *v9; // rbp
char *v10; // rax
__int64 v11; // rax
_BYTE *v12; // r12
char v13; // al
std::ostream *v14; // rax
__int64 v15; // r12
__int64 v16; // r12
std::ostream *v17; // r12
__int64 v18; // rax
_BYTE *v19; // r14
char v20; // al
std::ostream *v21; // rax
char *v22; // r13
unsigned int v23; // r12d
__int64 v24; // rdi
__int64 v26; // rax
_BYTE *v27; // r12
char v28; // al
std::ostream *v29; // rax
__int64 v30; // rax
_BYTE *v31; // r12
char v32; // al
std::ostream *v33; // rax
__int64 v34; // rax
_BYTE *v35; // r12
char v36; // al
std::ostream *v37; // rax
__int64 v38; // r12
std::ostream *v39; // r12
_BYTE *v40; // r14
char v41; // al
__int64 v42; // rax
_BYTE *v43; // r12
char v44; // al
std::ostream *v45; // rax
unsigned __int16 v46; // r12
std::ostream *v47; // r15
__int64 v48; // rax
_BYTE *v49; // r12
char v50; // al
std::ostream *v51; // rax
__int64 v52; // rsi
size_t n; // rdx
__int64 v54; // rax
_BYTE *v55; // rbp
char v56; // al
std::ostream *v57; // rax
__int64 v58; // rbp
std::ostream *v59; // rbp
_BYTE *v60; // r12
char v61; // al
std::ostream *v62; // rax
char *v63; // rdi
char *v64; // rdi
__int64 v65; // rax
_BYTE *v66; // r12
char v67; // al
std::ostream *v68; // rax
__int64 v69; // r12
unsigned int v70; // r12d
__int64 v71; // rax
_BYTE *v72; // rbp
char v73; // al
std::ostream *v74; // rax
__int64 v75; // rbp
__int64 v76; // rbp
__int64 v77; // rax
_BYTE *v78; // r12
char v79; // al
std::ostream *v80; // rax
__int64 *v81; // rax
__int64 v82; // rdi
char **v83; // rax
char **v84; // rax
unsigned __int64 v85; // rsi
__int64 *v86; // rax
char *v87; // rdi
char *v88; // rdi
__int64 v89; // rdi
__int64 v90; // rdi
__int64 v91; // rbp
__int64 v92; // rax
__int64 v93; // rbp
__int64 v94; // rax
_BYTE *v95; // rbp
char v96; // al
std::ostream *v97; // rax
std::ostream *v98; // r14
__int64 v99; // rax
_BYTE *v100; // rbp
char v101; // al
std::ostream *v102; // rax
std::ostream *v103; // r14
__int64 v104; // rax
_BYTE *v105; // rbp
char v106; // al
std::ostream *v107; // rax
__int64 v108; // rax
_BYTE *v109; // rbp
char v110; // al
std::ostream *v111; // rax
HDDMDevice *Device; // rax
__int64 v113; // rdx
__int64 v114; // rdx
__int64 v115; // rdi
__int64 v116; // rdi
__int64 v117; // rax
_BYTE *v118; // r12
char v119; // al
std::ostream *v120; // rax
__int64 v121; // r12
int v122; // eax
int v123; // eax
int v124; // eax
int v125; // edx
int v126; // edx
int v127; // ecx
int v128; // esi
int v129; // eax
int v130; // eax
int v131; // ecx
int v132; // ecx
int v133; // ecx
int v134; // esi
int v135; // eax
int v136; // edx
int v137; // eax
int v138; // eax
int v139; // ecx
int v140; // ecx
int v141; // edx
int v142; // eax
int v143; // eax
int v144; // edx
int v145; // edx
char *v146; // [rsp+8h] [rbp-AC0h]
char *v148; // [rsp+18h] [rbp-AB0h]
__int64 v149; // [rsp+20h] [rbp-AA8h]
std::string *Device_1; // [rsp+28h] [rbp-AA0h]
std::string *Device_2; // [rsp+28h] [rbp-AA0h]
_QWORD v152[2]; // [rsp+60h] [rbp-A68h] BYREF
char *v153; // [rsp+70h] [rbp-A58h] BYREF
void *s1[2]; // [rsp+80h] [rbp-A48h] BYREF
__int64 v155; // [rsp+90h] [rbp-A38h] BYREF
_QWORD v156[2]; // [rsp+A0h] [rbp-A28h] BYREF
__int64 v157; // [rsp+B0h] [rbp-A18h] BYREF
_QWORD v158[2]; // [rsp+C0h] [rbp-A08h] BYREF
_QWORD v159[2]; // [rsp+D0h] [rbp-9F8h] BYREF
_QWORD v160[2]; // [rsp+E0h] [rbp-9E8h] BYREF
_QWORD v161[2]; // [rsp+F0h] [rbp-9D8h] BYREF
_BYTE v162[272]; // [rsp+100h] [rbp-9C8h] BYREF
char *v163; // [rsp+210h] [rbp-8B8h] BYREF
_QWORD v164[7]; // [rsp+218h] [rbp-8B0h] BYREF
__int64 v165; // [rsp+250h] [rbp-878h] BYREF
__int64 v166; // [rsp+280h] [rbp-848h] BYREF
_QWORD v167[28]; // [rsp+308h] [rbp-7C0h] BYREF
char v168; // [rsp+3E8h] [rbp-6E0h]
char v169; // [rsp+3E9h] [rbp-6DFh]
__int64 v170; // [rsp+3F0h] [rbp-6D8h]
__int64 v171; // [rsp+3F8h] [rbp-6D0h]
__int64 v172; // [rsp+400h] [rbp-6C8h]
__int64 v173; // [rsp+408h] [rbp-6C0h]
char *v174; // [rsp+410h] [rbp-6B8h] BYREF
_QWORD v175[7]; // [rsp+418h] [rbp-6B0h] BYREF
__int64 v176; // [rsp+450h] [rbp-678h] BYREF
__int64 v177; // [rsp+480h] [rbp-648h] BYREF
_QWORD v178[28]; // [rsp+508h] [rbp-5C0h] BYREF
char v179; // [rsp+5E8h] [rbp-4E0h]
char v180; // [rsp+5E9h] [rbp-4DFh]
__int64 v181; // [rsp+5F0h] [rbp-4D8h]
__int64 v182; // [rsp+5F8h] [rbp-4D0h]
__int64 v183; // [rsp+600h] [rbp-4C8h]
__int64 v184; // [rsp+608h] [rbp-4C0h]
char *v185; // [rsp+610h] [rbp-4B8h] BYREF
__int64 v186; // [rsp+618h] [rbp-4B0h]
_QWORD v187[7]; // [rsp+620h] [rbp-4A8h] BYREF
__int64 v188; // [rsp+658h] [rbp-470h] BYREF
__int64 v189; // [rsp+688h] [rbp-440h] BYREF
_QWORD v190[4]; // [rsp+710h] [rbp-3B8h] BYREF
int v191; // [rsp+730h] [rbp-398h]
__int64 v192; // [rsp+7E8h] [rbp-2E0h]
char v193; // [rsp+7F0h] [rbp-2D8h]
char v194; // [rsp+7F1h] [rbp-2D7h]
__int64 v195; // [rsp+7F8h] [rbp-2D0h]
__int64 v196; // [rsp+800h] [rbp-2C8h]
__int64 v197; // [rsp+808h] [rbp-2C0h]
__int64 v198; // [rsp+810h] [rbp-2B8h]
_BYTE v199[680]; // [rsp+820h] [rbp-2A8h] BYREF
std::string::string((std::string *)v152, a2);
std::string::append((std::string *)v152, ".grid", 5u);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Parsing ", 8);
v3 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>(
&std::cout,
v152[0],
*(_QWORD *)(v152[0] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v3, " to generate the XNG device files.", 34);
v4 = *(_QWORD *)(*(_QWORD *)v3 - 24LL);
v5 = *(_BYTE **)((char *)v3 + v4 + 240);
if ( !v5 )
std::__throw_bad_cast();
if ( v5[56] )
{
v6 = v5[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v3 + v4 + 240));
v6 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v5 + 48LL))(v5, 10);
}
v7 = (std::ostream *)std::ostream::put(v3, v6);
std::ostream::flush(v7);
v8 = v152[0];
std::ios_base::ios_base((std::ios_base *)v190);
v192 = 0;
v193 = 0;
v194 = 0;
v195 = 0;
v196 = 0;
v197 = 0;
v198 = 0;
v190[0] = (char *)&`vtable for'std::ios + 16;
v9 = (char *)`VTT for'std::ifstream[1];
v10 = (char *)`VTT for'std::ifstream[2];
v185 = v9;
v146 = v10;
*(char **)((char *)&v185 + *((_QWORD *)v9 - 3)) = v10;
v186 = 0;
std::ios::init((char *)&v185 + *((_QWORD *)v185 - 3), 0);
v185 = (char *)&`vtable for'std::ifstream + 24;
v190[0] = (char *)&`vtable for'std::ifstream + 64;
std::filebuf::basic_filebuf(v187);
std::ios::init(v190, v187);
if ( std::filebuf::open(v187, v8, 8) )
std::ios::clear((char *)&v185 + *((_QWORD *)v185 - 3), 0);
else
std::ios::clear((char *)&v185 + *((_QWORD *)v185 - 3), *(_DWORD *)((char *)&v185 + *((_QWORD *)v185 - 3) + 32) | 4u);
if ( !v191 )
{
std::string::assign((hddp::Driver *)((char *)this + 8), (const std::string *)v152);
hddp::Scanner::Scanner(v199, &v185, (char *)this + 8, 0);
hddp::Scanner::set_debug((hddp::Scanner *)v199, *(_BYTE *)this);
if ( getenv("TRACE_HDDPSCANNER") )
hddp::Scanner::set_debug((hddp::Scanner *)v199, 1);
*((_QWORD *)this + 2) = v199;
hddp::Parser::Parser((hddp::Parser *)v162, this);
hddp::Parser::set_debug_level((hddp::Parser *)v162, *((unsigned __int8 *)this + 1));
if ( getenv("TRACE_HDDPPARSER") )
hddp::Parser::set_debug_level((hddp::Parser *)v162, 1);
if ( (unsigned int)hddp::Parser::parse((hddp::Parser *)v162) )
{
v34 = *(_QWORD *)(std::cerr - 24LL);
v35 = *(_BYTE **)((char *)&std::cerr + v34 + 240);
if ( !v35 )
std::__throw_bad_cast();
if ( v35[56] )
{
v36 = v35[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v34 + 240));
v36 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v35 + 48LL))(v35, 10);
}
v37 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v36);
v38 = std::ostream::flush(v37);
std::__ostream_insert<char,std::char_traits<char>>(v38, "ERROR:", 6);
std::__ostream_insert<char,std::char_traits<char>>(
v38,
"/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx",
83);
std::__ostream_insert<char,std::char_traits<char>>(v38, ":", 1);
v39 = (std::ostream *)std::ostream::operator<<(v38, 547);
std::__ostream_insert<char,std::char_traits<char>>(v39, ": ", 2);
std::__ostream_insert<char,std::char_traits<char>>(v39, "Parsing failed", 14);
v40 = *(_BYTE **)((char *)v39 + *(_QWORD *)(*(_QWORD *)v39 - 24LL) + 240);
if ( !v40 )
std::__throw_bad_cast();
}
else if ( *((_QWORD *)this + 3) )
{
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Checking ...", 12);
v26 = *(_QWORD *)(std::cout - 24LL);
v27 = *(_BYTE **)((char *)&std::cout + v26 + 240);
if ( !v27 )
std::__throw_bad_cast();
if ( v27[56] )
{
v28 = v27[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v26 + 240));
v28 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v27 + 48LL))(v27, 10);
}
v29 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v28);
std::ostream::flush(v29);
(*(void (__fastcall **)(_QWORD, _QWORD))(**((_QWORD **)this + 3) + 24LL))(*((_QWORD *)this + 3), 0);
if ( hddp::HDDP_Error::numErrors > 0 )
{
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Semantic errors found ... exiting ... ", 38);
v30 = *(_QWORD *)(std::cout - 24LL);
v31 = *(_BYTE **)((char *)&std::cout + v30 + 240);
if ( !v31 )
std::__throw_bad_cast();
if ( v31[56] )
{
v32 = v31[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v30 + 240));
v32 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v31 + 48LL))(v31, 10);
}
v33 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v32);
goto LABEL_30;
}
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Elaborating ...", 15);
v42 = *(_QWORD *)(std::cout - 24LL);
v43 = *(_BYTE **)((char *)&std::cout + v42 + 240);
if ( !v43 )
std::__throw_bad_cast();
if ( v43[56] )
{
v44 = v43[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v42 + 240));
v44 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v43 + 48LL))(v43, 10);
}
v45 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v44);
std::ostream::flush(v45);
(*(void (__fastcall **)(_QWORD))(**((_QWORD **)this + 3) + 32LL))(*((_QWORD *)this + 3));
v46 = *(_WORD *)(*((_QWORD *)this + 3) + 240LL);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Parsing completed successfully, version ", 40);
v47 = (std::ostream *)std::ostream::_M_insert<unsigned long>(&std::cout, v46);
v48 = *(_QWORD *)(*(_QWORD *)v47 - 24LL);
v49 = *(_BYTE **)((char *)v47 + v48 + 240);
if ( !v49 )
std::__throw_bad_cast();
if ( v49[56] )
{
v50 = v49[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v47 + v48 + 240));
v50 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v49 + 48LL))(v49, 10);
}
v51 = (std::ostream *)std::ostream::put(v47, v50);
std::ostream::flush(v51);
v52 = *(_QWORD *)(*((_QWORD *)this + 3) + 48LL);
*((_QWORD *)this + 4) = v52;
if ( v52 )
{
std::string::string((std::string *)&v153, (const std::string *)(v52 + 48));
std::string::string((std::string *)s1, (const std::string *)(*((_QWORD *)this + 4) + 56LL));
n = *((_QWORD *)s1[0] - 3);
if ( n == *(_QWORD *)(*(_QWORD *)a2 - 24LL) && !memcmp(s1[0], *(const void **)a2, n) )
{
if ( !std::filebuf::close(v187) )
std::ios::clear(
(char *)&v185 + *((_QWORD *)v185 - 3),
*(_DWORD *)((char *)&v185 + *((_QWORD *)v185 - 3) + 32) | 4u);
hddp::Driver::annotate_tilenames(this, a2);
hddp::Driver::annotate_sites(this, a2);
v70 = dword_99305D0;
if ( !dword_99305D0 )
{
HDDMDevice::setrecursivedeviceid(*((HDDMDevice **)this + 4), **((_BYTE **)this + 4) & 0xF);
HDDMDevice::printXdlrc(*((HDDMDevice **)this + 4));
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Generating XNG file names... ", 29);
v77 = *(_QWORD *)(std::cout - 24LL);
v78 = *(_BYTE **)((char *)&std::cout + v77 + 240);
if ( !v78 )
std::__throw_bad_cast();
if ( v78[56] )
{
v79 = v78[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v77 + 240));
v79 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v78 + 48LL))(v78, 10);
}
v80 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v79);
std::ostream::flush(v80);
std::string::string(v156, ".xng", &v163);
v81 = (__int64 *)std::string::insert((std::string *)v156, 0, (const char *)s1[0], *((_QWORD *)s1[0] - 3));
v155 = *v81;
*v81 = (__int64)&std::string::_Rep::_S_empty_rep_storage + 24;
v82 = v156[0] - 24LL;
if ( (_UNKNOWN *)(v156[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v135 = _InterlockedExchangeAdd((volatile signed __int32 *)(v156[0] - 8LL), 0xFFFFFFFF);
}
else
{
v136 = *(_DWORD *)(v156[0] - 8LL);
*(_DWORD *)(v156[0] - 8LL) = v136 - 1;
v135 = v136;
}
if ( v135 <= 0 )
std::string::_Rep::_M_destroy(v82, &v174);
}
std::string::string(v159, ".xng", v160);
std::string::string(v158, "_", v156);
v83 = (char **)std::string::insert((std::string *)v158, 0, v153, *((_QWORD *)v153 - 3));
v163 = *v83;
*v83 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
v84 = (char **)std::string::append((std::string *)&v163, (const std::string *)s1);
v174 = *v84;
*v84 = (char *)&std::string::_Rep::_S_empty_rep_storage + 24;
v85 = *(_QWORD *)(v159[0] - 24LL) + *((_QWORD *)v174 - 3);
if ( v85 <= *((_QWORD *)v174 - 2) || v85 > *(_QWORD *)(v159[0] - 16LL) )
v86 = (__int64 *)std::string::append((std::string *)&v174, (const std::string *)v159);
else
v86 = (__int64 *)std::string::insert((std::string *)v159, 0, v174, *((_QWORD *)v174 - 3));
v157 = *v86;
*v86 = (__int64)&std::string::_Rep::_S_empty_rep_storage + 24;
v87 = v174 - 24;
if ( v174 - 24 != (char *)&std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v124 = _InterlockedExchangeAdd((volatile signed __int32 *)v174 - 2, 0xFFFFFFFF);
}
else
{
v126 = *((_DWORD *)v174 - 2);
*((_DWORD *)v174 - 2) = v126 - 1;
v124 = v126;
}
if ( v124 <= 0 )
std::string::_Rep::_M_destroy(v87, v161);
}
v88 = v163 - 24;
if ( v163 - 24 != (char *)&std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v123 = _InterlockedExchangeAdd((volatile signed __int32 *)v163 - 2, 0xFFFFFFFF);
}
else
{
v125 = *((_DWORD *)v163 - 2);
*((_DWORD *)v163 - 2) = v125 - 1;
v123 = v125;
}
if ( v123 <= 0 )
std::string::_Rep::_M_destroy(v88, &v174);
}
v89 = v158[0] - 24LL;
if ( (_UNKNOWN *)(v158[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v143 = _InterlockedExchangeAdd((volatile signed __int32 *)(v158[0] - 8LL), 0xFFFFFFFF);
}
else
{
v145 = *(_DWORD *)(v158[0] - 8LL);
*(_DWORD *)(v158[0] - 8LL) = v145 - 1;
v143 = v145;
}
if ( v143 <= 0 )
std::string::_Rep::_M_destroy(v89, &v174);
}
v90 = v159[0] - 24LL;
if ( (_UNKNOWN *)(v159[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v142 = _InterlockedExchangeAdd((volatile signed __int32 *)(v159[0] - 8LL), 0xFFFFFFFF);
}
else
{
v144 = *(_DWORD *)(v159[0] - 8LL);
*(_DWORD *)(v159[0] - 8LL) = v144 - 1;
v142 = v144;
}
if ( v142 <= 0 )
std::string::_Rep::_M_destroy(v90, &v174);
}
v91 = v155;
std::ios_base::ios_base((std::ios_base *)v167);
v167[27] = 0;
v168 = 0;
v169 = 0;
v170 = 0;
v171 = 0;
v172 = 0;
v173 = 0;
v167[0] = (char *)&`vtable for'std::ios + 16;
v92 = `VTT for'std::ofstream[2];
v163 = (char *)`VTT for'std::ofstream[1];
v149 = v92;
v148 = v163;
*(_QWORD *)((char *)&v164[-1] + *((_QWORD *)v163 - 3)) = v92;
std::ios::init((char *)&v164[-1] + *((_QWORD *)v163 - 3), 0);
v163 = (char *)&`vtable for'std::ofstream + 24;
v167[0] = (char *)&`vtable for'std::ofstream + 64;
std::filebuf::basic_filebuf(v164);
std::ios::init(v167, v164);
if ( std::filebuf::open(v164, v91, 20) )
std::ios::clear((char *)&v164[-1] + *((_QWORD *)v163 - 3), 0);
else
std::ios::clear(
(char *)&v164[-1] + *((_QWORD *)v163 - 3),
*(_DWORD *)((char *)&v164[3] + *((_QWORD *)v163 - 3)) | 4u);
v93 = v157;
std::ios_base::ios_base((std::ios_base *)v178);
v178[27] = 0;
v179 = 0;
v180 = 0;
v181 = 0;
v182 = 0;
v183 = 0;
v184 = 0;
v178[0] = (char *)&`vtable for'std::ios + 16;
v174 = v148;
*(_QWORD *)((char *)&v175[-1] + *((_QWORD *)v148 - 3)) = v149;
std::ios::init((char *)&v175[-1] + *((_QWORD *)v174 - 3), 0);
v174 = (char *)&`vtable for'std::ofstream + 24;
v178[0] = (char *)&`vtable for'std::ofstream + 64;
std::filebuf::basic_filebuf(v175);
std::ios::init(v178, v175);
if ( std::filebuf::open(v175, v93, 20) )
std::ios::clear((char *)&v175[-1] + *((_QWORD *)v174 - 3), 0);
else
std::ios::clear(
(char *)&v175[-1] + *((_QWORD *)v174 - 3),
*(_DWORD *)((char *)&v175[3] + *((_QWORD *)v174 - 3)) | 4u);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Writing new-style XNG", 21);
v94 = *(_QWORD *)(std::cout - 24LL);
v95 = *(_BYTE **)((char *)&std::cout + v94 + 240);
if ( !v95 )
std::__throw_bad_cast();
if ( v95[56] )
{
v96 = v95[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v94 + 240));
v96 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v95 + 48LL))(v95, 10);
}
v97 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v96);
std::ostream::flush(v97);
HDDMDevice::writeme_pb(
*((_QWORD *)this + 4),
(__int64)&v163,
(__int64)&v174,
*(_WORD *)(*((_QWORD *)this + 3) + 240LL));
if ( !std::filebuf::close(v164) )
std::ios::clear(
(char *)&v164[-1] + *((_QWORD *)v163 - 3),
*(_DWORD *)((char *)&v164[3] + *((_QWORD *)v163 - 3)) | 4u);
if ( !std::filebuf::close(v175) )
std::ios::clear(
(char *)&v175[-1] + *((_QWORD *)v174 - 3),
*(_DWORD *)((char *)&v175[3] + *((_QWORD *)v174 - 3)) | 4u);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Wrote part file ", 16);
v98 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>(
&std::cout,
v155,
*(_QWORD *)(v155 - 24));
v99 = *(_QWORD *)(*(_QWORD *)v98 - 24LL);
v100 = *(_BYTE **)((char *)v98 + v99 + 240);
if ( !v100 )
std::__throw_bad_cast();
if ( v100[56] )
{
v101 = v100[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v98 + v99 + 240));
v101 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v100 + 48LL))(v100, 10);
}
v102 = (std::ostream *)std::ostream::put(v98, v101);
std::ostream::flush(v102);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Wrote arch file ", 16);
v103 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>(
&std::cout,
v157,
*(_QWORD *)(v157 - 24));
v104 = *(_QWORD *)(*(_QWORD *)v103 - 24LL);
v105 = *(_BYTE **)((char *)v103 + v104 + 240);
if ( !v105 )
std::__throw_bad_cast();
if ( v105[56] )
{
v106 = v105[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v103 + v104 + 240));
v106 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v105 + 48LL))(v105, 10);
}
v107 = (std::ostream *)std::ostream::put(v103, v106);
std::ostream::flush(v107);
std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Writing xdlrc ...", 17);
v108 = *(_QWORD *)(std::cout - 24LL);
v109 = *(_BYTE **)((char *)&std::cout + v108 + 240);
if ( !v109 )
std::__throw_bad_cast();
if ( v109[56] )
{
v110 = v109[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cout + v108 + 240));
v110 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v109 + 48LL))(v109, 10);
}
v111 = (std::ostream *)std::ostream::put((std::ostream *)&std::cout, v110);
std::ostream::flush(v111);
std::string::string(v161, "", v158);
std::string::string(v160, "", v156);
Device = HDDMDeviceCache::loadDevice(
(HDDMDeviceCache *)HDDMDeviceCache::m_devcache,
(const std::string *)&v155,
(const std::string *)&v157,
(const std::string *)v160,
(const std::string *)v161);
v113 = v160[0] - 24LL;
if ( (_UNKNOWN *)(v160[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v127 = _InterlockedExchangeAdd((volatile signed __int32 *)(v160[0] - 8LL), 0xFFFFFFFF);
}
else
{
v128 = *(_DWORD *)(v160[0] - 8LL);
*(_DWORD *)(v160[0] - 8LL) = v128 - 1;
v127 = v128;
}
if ( v127 <= 0 )
{
Device_1 = (std::string *)Device;
std::string::_Rep::_M_destroy(v113, v159);
Device = (HDDMDevice *)Device_1;
}
}
v114 = v161[0] - 24LL;
if ( (_UNKNOWN *)(v161[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v131 = _InterlockedExchangeAdd((volatile signed __int32 *)(v161[0] - 8LL), 0xFFFFFFFF);
}
else
{
v134 = *(_DWORD *)(v161[0] - 8LL);
*(_DWORD *)(v161[0] - 8LL) = v134 - 1;
v131 = v134;
}
if ( v131 <= 0 )
{
Device_2 = (std::string *)Device;
std::string::_Rep::_M_destroy(v114, v160);
Device = (HDDMDevice *)Device_2;
}
}
HDDMDevice::printXdlrc(Device);
v175[0] = (char *)&`vtable for'std::filebuf + 16;
v174 = (char *)&`vtable for'std::ofstream + 24;
v178[0] = (char *)&`vtable for'std::ofstream + 64;
std::filebuf::close(v175);
std::__basic_file<char>::~__basic_file(&v177);
v175[0] = (char *)&`vtable for'std::streambuf + 16;
std::locale::~locale((std::locale *)&v176);
v174 = v148;
*(_QWORD *)((char *)&v175[-1] + *((_QWORD *)v148 - 3)) = v149;
v178[0] = (char *)&`vtable for'std::ios + 16;
std::ios_base::~ios_base((std::ios_base *)v178);
v163 = (char *)&`vtable for'std::ofstream + 24;
v167[0] = (char *)&`vtable for'std::ofstream + 64;
v164[0] = (char *)&`vtable for'std::filebuf + 16;
std::filebuf::close(v164);
std::__basic_file<char>::~__basic_file(&v166);
v164[0] = (char *)&`vtable for'std::streambuf + 16;
std::locale::~locale((std::locale *)&v165);
v163 = v148;
*(_QWORD *)((char *)&v164[-1] + *((_QWORD *)v148 - 3)) = v149;
v167[0] = (char *)&`vtable for'std::ios + 16;
std::ios_base::~ios_base((std::ios_base *)v167);
v115 = v157 - 24;
if ( (_UNKNOWN *)(v157 - 24) != &std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v130 = _InterlockedExchangeAdd((volatile signed __int32 *)(v157 - 8), 0xFFFFFFFF);
}
else
{
v133 = *(_DWORD *)(v157 - 8);
*(_DWORD *)(v157 - 8) = v133 - 1;
v130 = v133;
}
if ( v130 <= 0 )
std::string::_Rep::_M_destroy(v115, v161);
}
v116 = v155 - 24;
if ( (_UNKNOWN *)(v155 - 24) != &std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v129 = _InterlockedExchangeAdd((volatile signed __int32 *)(v155 - 8), 0xFFFFFFFF);
}
else
{
v132 = *(_DWORD *)(v155 - 8);
*(_DWORD *)(v155 - 8) = v132 - 1;
v129 = v132;
}
if ( v129 <= 0 )
std::string::_Rep::_M_destroy(v116, v161);
}
v23 = 1;
goto LABEL_61;
}
v71 = *(_QWORD *)(std::cerr - 24LL);
v72 = *(_BYTE **)((char *)&std::cerr + v71 + 240);
if ( !v72 )
std::__throw_bad_cast();
if ( v72[56] )
{
v73 = v72[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v71 + 240));
v73 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v72 + 48LL))(v72, 10);
}
v74 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v73);
v75 = std::ostream::flush(v74);
std::__ostream_insert<char,std::char_traits<char>>(v75, "ERROR:", 6);
std::__ostream_insert<char,std::char_traits<char>>(
v75,
"/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx",
83);
std::__ostream_insert<char,std::char_traits<char>>(v75, ":", 1);
v76 = std::ostream::operator<<(v75, 608);
std::__ostream_insert<char,std::char_traits<char>>(v76, ": ", 2);
v59 = (std::ostream *)std::ostream::_M_insert<unsigned long>(v76, v70);
std::__ostream_insert<char,std::char_traits<char>>(
v59,
" parsing errors occurred during annotation, cannot continue.",
60);
v60 = *(_BYTE **)((char *)v59 + *(_QWORD *)(*(_QWORD *)v59 - 24LL) + 240);
if ( !v60 )
std::__throw_bad_cast();
}
else
{
v54 = *(_QWORD *)(std::cerr - 24LL);
v55 = *(_BYTE **)((char *)&std::cerr + v54 + 240);
if ( !v55 )
std::__throw_bad_cast();
if ( v55[56] )
{
v56 = v55[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v54 + 240));
v56 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v55 + 48LL))(v55, 10);
}
v57 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v56);
v58 = std::ostream::flush(v57);
std::__ostream_insert<char,std::char_traits<char>>(v58, "ERROR:", 6);
std::__ostream_insert<char,std::char_traits<char>>(
v58,
"/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx",
83);
std::__ostream_insert<char,std::char_traits<char>>(v58, ":", 1);
v59 = (std::ostream *)std::ostream::operator<<(v58, 591);
std::__ostream_insert<char,std::char_traits<char>>(v59, ": ", 2);
std::__ostream_insert<char,std::char_traits<char>>(
v59,
"PICNAME in grid file should match the name if ${picname}.grid file",
66);
v60 = *(_BYTE **)((char *)v59 + *(_QWORD *)(*(_QWORD *)v59 - 24LL) + 240);
if ( !v60 )
std::__throw_bad_cast();
}
if ( v60[56] )
{
v61 = v60[67];
}
else
{
std::ctype<char>::_M_widen_init(v60);
v61 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v60 + 48LL))(v60, 10);
}
v62 = (std::ostream *)std::ostream::put(v59, v61);
std::ostream::flush(v62);
v23 = 0;
LABEL_61:
v63 = (char *)s1[0] - 24;
if ( (char *)s1[0] - 24 != (char *)&std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v138 = _InterlockedExchangeAdd((volatile signed __int32 *)s1[0] - 2, 0xFFFFFFFF);
}
else
{
v140 = *((_DWORD *)s1[0] - 2);
*((_DWORD *)s1[0] - 2) = v140 - 1;
v138 = v140;
}
if ( v138 <= 0 )
std::string::_Rep::_M_destroy(v63, v161);
}
v64 = v153 - 24;
if ( v153 - 24 != (char *)&std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v137 = _InterlockedExchangeAdd((volatile signed __int32 *)v153 - 2, 0xFFFFFFFF);
}
else
{
v139 = *((_DWORD *)v153 - 2);
*((_DWORD *)v153 - 2) = v139 - 1;
v137 = v139;
}
if ( v137 <= 0 )
std::string::_Rep::_M_destroy(v64, v161);
}
v9 = (char *)`VTT for'std::ifstream[1];
v22 = (char *)`VTT for'std::ifstream[2];
goto LABEL_31;
}
v117 = *(_QWORD *)(std::cerr - 24LL);
v118 = *(_BYTE **)((char *)&std::cerr + v117 + 240);
if ( !v118 )
std::__throw_bad_cast();
if ( v118[56] )
{
v119 = v118[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v117 + 240));
v119 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v118 + 48LL))(v118, 10);
}
v120 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v119);
v121 = std::ostream::flush(v120);
std::__ostream_insert<char,std::char_traits<char>>(v121, "ERROR:", 6);
std::__ostream_insert<char,std::char_traits<char>>(
v121,
"/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx",
83);
std::__ostream_insert<char,std::char_traits<char>>(v121, ":", 1);
v39 = (std::ostream *)std::ostream::operator<<(v121, 580);
std::__ostream_insert<char,std::char_traits<char>>(v39, ": ", 2);
std::__ostream_insert<char,std::char_traits<char>>(v39, "GetFinalDevice operation failed", 31);
v40 = *(_BYTE **)((char *)v39 + *(_QWORD *)(*(_QWORD *)v39 - 24LL) + 240);
if ( !v40 )
std::__throw_bad_cast();
}
else
{
v65 = *(_QWORD *)(std::cerr - 24LL);
v66 = *(_BYTE **)((char *)&std::cerr + v65 + 240);
if ( !v66 )
std::__throw_bad_cast();
if ( v66[56] )
{
v67 = v66[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v65 + 240));
v67 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v66 + 48LL))(v66, 10);
}
v68 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v67);
v69 = std::ostream::flush(v68);
std::__ostream_insert<char,std::char_traits<char>>(v69, "ERROR:", 6);
std::__ostream_insert<char,std::char_traits<char>>(
v69,
"/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx",
83);
std::__ostream_insert<char,std::char_traits<char>>(v69, ":", 1);
v39 = (std::ostream *)std::ostream::operator<<(v69, 556);
std::__ostream_insert<char,std::char_traits<char>>(v39, ": ", 2);
std::__ostream_insert<char,std::char_traits<char>>(v39, "XNG Device could not be created successfully", 44);
v40 = *(_BYTE **)((char *)v39 + *(_QWORD *)(*(_QWORD *)v39 - 24LL) + 240);
if ( !v40 )
std::__throw_bad_cast();
}
if ( v40[56] )
{
v41 = v40[67];
}
else
{
std::ctype<char>::_M_widen_init(v40);
v41 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v40 + 48LL))(v40, 10);
}
v33 = (std::ostream *)std::ostream::put(v39, v41);
LABEL_30:
std::ostream::flush(v33);
v22 = v146;
v23 = 0;
LABEL_31:
hddp::Parser::~Parser((hddp::Parser *)v162);
hddp::Scanner::~Scanner((hddp::Scanner *)v199);
goto LABEL_14;
}
v11 = *(_QWORD *)(std::cerr - 24LL);
v12 = *(_BYTE **)((char *)&std::cerr + v11 + 240);
if ( !v12 )
std::__throw_bad_cast();
if ( v12[56] )
{
v13 = v12[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)&std::cerr + v11 + 240));
v13 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v12 + 48LL))(v12, 10);
}
v14 = (std::ostream *)std::ostream::put((std::ostream *)&std::cerr, v13);
v15 = std::ostream::flush(v14);
std::__ostream_insert<char,std::char_traits<char>>(v15, "ERROR:", 6);
std::__ostream_insert<char,std::char_traits<char>>(
v15,
"/wrk/2016.3/continuous/2016_09_26_1671147/src/shared/device/devparse/HDDPDriver.cxx",
83);
std::__ostream_insert<char,std::char_traits<char>>(v15, ":", 1);
v16 = std::ostream::operator<<(v15, 526);
std::__ostream_insert<char,std::char_traits<char>>(v16, ": ", 2);
std::__ostream_insert<char,std::char_traits<char>>(v16, "File ", 5);
v17 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>(v16, v152[0], *(_QWORD *)(v152[0] - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v17, " could not be opened for parsing", 32);
v18 = *(_QWORD *)(*(_QWORD *)v17 - 24LL);
v19 = *(_BYTE **)((char *)v17 + v18 + 240);
if ( !v19 )
std::__throw_bad_cast();
if ( v19[56] )
{
v20 = v19[67];
}
else
{
std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v17 + v18 + 240));
v20 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v19 + 48LL))(v19, 10);
}
v21 = (std::ostream *)std::ostream::put(v17, v20);
std::ostream::flush(v21);
v22 = v146;
v23 = 0;
LABEL_14:
v185 = (char *)&`vtable for'std::ifstream + 24;
v190[0] = (char *)&`vtable for'std::ifstream + 64;
v187[0] = (char *)&`vtable for'std::filebuf + 16;
std::filebuf::close(v187);
std::__basic_file<char>::~__basic_file(&v189);
v187[0] = (char *)&`vtable for'std::streambuf + 16;
std::locale::~locale((std::locale *)&v188);
v185 = v9;
*(char **)((char *)&v185 + *((_QWORD *)v9 - 3)) = v22;
v186 = 0;
v190[0] = (char *)&`vtable for'std::ios + 16;
std::ios_base::~ios_base((std::ios_base *)v190);
v24 = v152[0] - 24LL;
if ( (_UNKNOWN *)(v152[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage )
{
if ( &_pthread_key_create )
{
v122 = _InterlockedExchangeAdd((volatile signed __int32 *)(v152[0] - 8LL), 0xFFFFFFFF);
}
else
{
v141 = *(_DWORD *)(v152[0] - 8LL);
*(_DWORD *)(v152[0] - 8LL) = v141 - 1;
v122 = v141;
}
if ( v122 <= 0 )
std::string::_Rep::_M_destroy(v24, v161);
}
return v23;
}