2020-11-23 <typeinfo> 类型提升

本文探讨了C++中类型提升的规则,特别是涉及无符号整数与负数运算时可能出现的问题。类型提升遵循(char, short)→int→unsigned int→long→double的顺序,其中double级别最高。当负数与无符号整数相加时,结果将是一个无符号整数,可能导致数值溢出。在使用如vector的容器时,需注意size_t(通常为unsigned int)参与的运算,防止因负数引起的不预期行为。文章通过示例代码展示了类型提升和溢出情况,并提到了typeinfo头文件在类型检查中的应用。

继上篇模运算出现的错误,发现自己对类型提升有些误解。 似乎类型提升并没有想象中那么“人性化”或者说intuitive。

真正的顺序是(char,short)→int→unsigned int →long → double ←float,也就是说最高级的是double,其中需要注意的是int反而没有unsigned int高级。

也就是说当把一个负数与某无符号整数相加的时候,其结果是一个无符号整数。

所以当碰到一个负数加上无符号,值本身就大于0到没什么(也可能直接overflow了),但是值若小于0就会变成某巨大整数了(也算overflow吧,毕竟underflow特指float)。

出问题的地方不知道会是哪里,一般不是用int就是用longlong,关键是在vector等类似容器中,数组下标返回的是个size_t,这玩意儿是个unsigned int,就比较坑,需要注意其参与所有可能含有负值的运算。

类似旋转数组的时候下标取余可能会碰到,另外设置哨兵时也要注意不能让他越界,要不然编译器可能会报错。

另外发现了非常好用的typeinfo头文件,不过输出有点奇怪
可见
https://blog.youkuaiyun.com/chenyiming_1990/article/details/8979260

测试用代码
输出j代表是 unsigned int

#include <iostream>
#include <typeinfo>
using namespace std;

int main() {
    int a = -200;
    unsigned b = 130;
    cout << typeid(a%b).name() << endl;
    cout << a%b << endl;
    cout << typeid(b + a).name() << endl;
    cout << b + a << endl;
    return 0;
}

import org.apache.flink.api.common.functions.RichMapFunction; import org.apache.flink.api.common.typeinfo.BasicTypeInfo; import org.apache.flink.api.common.typeinfo.TypeInformation; import org.apache.flink.api.java.io.jdbc.JDBCAppendTableSink; import org.apache.flink.api.java.io.jdbc.JDBCInputFormat; import org.apache.flink.api.java.typeutils.RowTypeInfo; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.types.Row; import java.util.Arrays; public class FlinkDemo { private static String driverClass = "com.mysql.cj.jdbc.Driver"; private static String dbUrl = "jdbc:mysql://localhost:3396/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8&serverTimezone=Asia/Shanghai"; private static String userName = "root"; private static String passWord = "123456"; public static void main(String[] args) { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStreamSource<Student> input = env.fromCollection(Arrays.asList(new Student("Tom", 25), new Student("Jack", 24))); DataStream<Row> ds = input.map(new RichMapFunction<Student, Row>() { @Override public Row map(Student student) throws Exception { return Row.of(student.getName(), student.getAge()); } }); TypeInformation<?>[] fieldTypes = new TypeInformation<?>[]{ BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO }; RowTypeInfo rowTypeInfo = new RowTypeInfo(fieldTypes); //写入mysql(追加模式) JDBCAppendTableSink sink = JDBCAppendTableSink.builder() .setDrivername(driverClass) .setDBUrl(dbUrl) .setUsername(userName) .setPassword(passWord) .setParameterTypes(fieldTypes) .setQuery("insert into student values(?,?)") .build(); sink.emitDataStream(ds); //查询mysql JDBCInputFormat jdbcInputFormat = JDBCInputFormat.buildJDBCInputFormat() .setDrivername(driverClass) .setDBUrl(dbUrl) .setUsername(userName) .setPassword(passWord) .setQuery("select * from student") .setRowTypeInfo(rowTypeInfo) .finish(); DataStreamSource<Row> input1 = env.createInput(jdbcInputFormat); input1.print(); try { env.execute(); } catch (Exception e) { e.printStackTrace(); } } }
03-28
请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码 特别注意: 1.保留所有原始功能 2.提高执行效率,降低计算复杂度 3.已经给定的结构体名字和元素不要更改,详细的中文注释 4.自动添加中文注释说明功能逻辑 5.不使用 auto,使用显式 for 循环 6.结构体采用32位定义 7.不要使用小函数,保持原始的函数定义 HDDMDevice *__cdecl HDDMDeviceCache::loadDevice( HDDMDeviceCache *this, const HSTString *deviceFilePath, const HSTString *archFilePath) { int v3; // ebp _DWORD *v4; // edi int i; // esi HDDMDevice *v6; // ebp _DWORD *v7; // eax int v8; // eax void **v9; // eax HDDMTilePort **v10; // eax volatile signed __int32 *v11; // edi bool v12; // al HDDMDevice *v13; // eax int Env; // edi unsigned __int16 v15; // bp unsigned __int16 v16; // di unsigned int v17; // eax int v18; // esi int v19; // eax int v20; // edx int v21; // ebp int v22; // ecx int v23; // edi int v24; // edx unsigned int v25; // eax int v26; // ecx unsigned int v27; // eax int v28; // ebp int v29; // edx int v30; // eax int v31; // ecx __int16 v32; // ax _WORD **v33; // edi int v34; // esi int v35; // esi int v36; // esi const HDDMTilePort *v37; // edi _DWORD *v38; // ebp int v39; // esi int v40; // eax int v41; // esi int v42; // eax _WORD **v43; // ebp int v44; // esi int v45; // esi int v46; // eax int *v47; // eax unsigned int v48; // edx int *v49; // ecx unsigned int v50; // esi int *v51; // eax int *v52; // ebp _DWORD *v53; // eax int *v54; // esi _BOOL4 v55; // edx int *v56; // eax HDDMTile *v57; // edx int *v58; // ecx unsigned int v59; // esi int *v60; // eax int *v61; // ebp _DWORD *v62; // eax int *v63; // esi _BOOL4 v64; // edx _WORD **v65; // edi int v66; // esi int v67; // esi int v68; // edi int v69; // edi int v70; // edi int v71; // edi int v72; // edi int v73; // eax int v74; // eax unsigned int v75; // esi unsigned int v76; // eax HDDMTile *v77; // ecx int *v78; // eax int *v79; // edx int v80; // edi int v81; // eax int v82; // eax int v83; // eax int v84; // edx int v85; // ebp unsigned int v86; // edi int *v87; // eax int *v88; // esi int *v89; // eax _BOOL4 v90; // ecx int v91; // esi int v92; // eax int v93; // eax int v94; // eax int TileType; // esi int v96; // ecx int v97; // edx int v98; // edi int v99; // eax int v100; // esi int v101; // ecx int v102; // edx int v103; // edi int v104; // eax HDDMOracle *v106; // esi void *v107; // esi void *exception; // edi int (__cdecl ***v109)(int); // eax HDDMTile **v110; // eax _DWORD *v111; // eax HPAParamMgr *s1; // [esp+0h] [ebp-6DCh] const char *s2; // [esp+4h] [ebp-6D8h] google::protobuf::Message *n; // [esp+8h] [ebp-6D4h] HDDMTilePort **v115; // [esp+Ch] [ebp-6D0h] HDDMTilePort **v116; // [esp+Ch] [ebp-6D0h] HDDMTilePort **v117; // [esp+10h] [ebp-6CCh] void *v118; // [esp+14h] [ebp-6C8h] const char *v119; // [esp+18h] [ebp-6C4h] int v120; // [esp+1Ch] [ebp-6C0h] char v121; // [esp+30h] [ebp-6ACh] unsigned int j; // [esp+30h] [ebp-6ACh] int v123; // [esp+38h] [ebp-6A4h] int *v124; // [esp+38h] [ebp-6A4h] unsigned int v125; // [esp+40h] [ebp-69Ch] _DWORD *v126; // [esp+40h] [ebp-69Ch] HPAParamMgr *ParamMgr; // [esp+4Ch] [ebp-690h] HPAParamMgr *v128; // [esp+4Ch] [ebp-690h] HPAParamMgr *v129; // [esp+4Ch] [ebp-690h] unsigned __int16 v130; // [esp+50h] [ebp-68Ch] int v131; // [esp+50h] [ebp-68Ch] _DWORD *v132; // [esp+60h] [ebp-67Ch] int v133; // [esp+64h] [ebp-678h] _WORD **v134; // [esp+68h] [ebp-674h] int v135; // [esp+7Ch] [ebp-660h] HDDMDevice *Device; // [esp+80h] [ebp-65Ch] int v137; // [esp+84h] [ebp-658h] char ValueAsBool; // [esp+8Fh] [ebp-64Dh] unsigned int v139; // [esp+90h] [ebp-64Ch] int *v140; // [esp+94h] [ebp-648h] BYREF int *v141; // [esp+98h] [ebp-644h] BYREF int *v142; // [esp+9Ch] [ebp-640h] char v143; // [esp+ADh] [ebp-62Fh] BYREF char v144; // [esp+AEh] [ebp-62Eh] BYREF char v145; // [esp+AFh] [ebp-62Dh] BYREF char v146; // [esp+B0h] [ebp-62Ch] BYREF char v147; // [esp+B8h] [ebp-624h] BYREF char v148; // [esp+B9h] [ebp-623h] BYREF char v149; // [esp+BAh] [ebp-622h] BYREF unsigned __int16 xng_device_FileType[8]; // [esp+C0h] [ebp-61Ch] BYREF unsigned __int16 v151[6]; // [esp+D0h] [ebp-60Ch] BYREF char xng_device_FileVersion[4]; // [esp+DCh] [ebp-600h] BYREF _DWORD v153[4]; // [esp+E0h] [ebp-5FCh] BYREF int v154[4]; // [esp+F0h] [ebp-5ECh] BYREF _DWORD v155[4]; // [esp+100h] [ebp-5DCh] BYREF _DWORD v156[4]; // [esp+110h] [ebp-5CCh] BYREF int v157[4]; // [esp+120h] [ebp-5BCh] BYREF _DWORD v158[4]; // [esp+130h] [ebp-5ACh] BYREF _DWORD v159[4]; // [esp+140h] [ebp-59Ch] BYREF _DWORD v160[4]; // [esp+150h] [ebp-58Ch] BYREF _DWORD v161[4]; // [esp+160h] [ebp-57Ch] BYREF _DWORD v162[4]; // [esp+170h] [ebp-56Ch] BYREF _DWORD v163[4]; // [esp+190h] [ebp-54Ch] BYREF _DWORD v164[4]; // [esp+1A0h] [ebp-53Ch] BYREF _DWORD v165[4]; // [esp+1B0h] [ebp-52Ch] BYREF _DWORD v166[4]; // [esp+1C0h] [ebp-51Ch] BYREF int v167[4]; // [esp+1D0h] [ebp-50Ch] BYREF _DWORD v168[4]; // [esp+1E0h] [ebp-4FCh] BYREF _DWORD v169[4]; // [esp+1F0h] [ebp-4ECh] BYREF _DWORD v170[4]; // [esp+200h] [ebp-4DCh] BYREF _DWORD v171[4]; // [esp+210h] [ebp-4CCh] BYREF _DWORD v172[4]; // [esp+220h] [ebp-4BCh] BYREF _DWORD v173[4]; // [esp+230h] [ebp-4ACh] BYREF char *v174[4]; // [esp+240h] [ebp-49Ch] BYREF _DWORD v175[4]; // [esp+250h] [ebp-48Ch] BYREF _DWORD v176[4]; // [esp+260h] [ebp-47Ch] BYREF _DWORD v177[4]; // [esp+270h] [ebp-46Ch] BYREF int v178[4]; // [esp+280h] [ebp-45Ch] BYREF int v179[4]; // [esp+290h] [ebp-44Ch] BYREF int v180[4]; // [esp+2A0h] [ebp-43Ch] BYREF int v181[4]; // [esp+2B0h] [ebp-42Ch] BYREF _DWORD v182[4]; // [esp+2C0h] [ebp-41Ch] BYREF _DWORD v183[4]; // [esp+2D0h] [ebp-40Ch] BYREF int v184[4]; // [esp+2E0h] [ebp-3FCh] BYREF int v185[4]; // [esp+2F0h] [ebp-3ECh] BYREF unsigned int *v186; // [esp+300h] [ebp-3DCh] BYREF _DWORD v187[8]; // [esp+310h] [ebp-3CCh] BYREF _DWORD v188[3]; // [esp+330h] [ebp-3ACh] BYREF int v189; // [esp+33Ch] [ebp-3A0h] BYREF unsigned int v190; // [esp+340h] [ebp-39Ch] BYREF HDDMTile *v191[4]; // [esp+350h] [ebp-38Ch] BYREF HDDMTilePort *v192[4]; // [esp+360h] [ebp-37Ch] BYREF HDDMTile *v193[4]; // [esp+370h] [ebp-36Ch] BYREF char v194[4]; // [esp+380h] [ebp-35Ch] BYREF int v195; // [esp+384h] [ebp-358h] BYREF void *v196; // [esp+388h] [ebp-354h] int *v197; // [esp+38Ch] [ebp-350h] int *v198; // [esp+390h] [ebp-34Ch] int v199; // [esp+394h] [ebp-348h] _BYTE v200[28]; // [esp+3A4h] [ebp-338h] BYREF int (__cdecl **v201)(int); // [esp+3C0h] [ebp-31Ch] BYREF int v202; // [esp+3C4h] [ebp-318h] BYREF void *v203; // [esp+3C8h] [ebp-314h] int *v204; // [esp+3CCh] [ebp-310h] int *v205; // [esp+3D0h] [ebp-30Ch] volatile signed __int32 *v206; // [esp+3D4h] [ebp-308h] _DWORD v207[5]; // [esp+3D8h] [ebp-304h] BYREF std::string *v208; // [esp+3ECh] [ebp-2F0h] int v209; // [esp+450h] [ebp-28Ch] void *hddmChipDesc; // [esp+460h] [ebp-27Ch] BYREF char *v211; // [esp+464h] [ebp-278h] BYREF __int16 v212; // [esp+468h] [ebp-274h] BYREF __int16 v213; // [esp+46Ah] [ebp-272h] __int16 v214; // [esp+46Ch] [ebp-270h] __int16 v215; // [esp+46Eh] [ebp-26Eh] __int16 v216; // [esp+470h] [ebp-26Ch] __int16 v217; // [esp+472h] [ebp-26Ah] _DWORD v218[5]; // [esp+474h] [ebp-268h] BYREF int v219; // [esp+488h] [ebp-254h] char v220; // [esp+48Ch] [ebp-250h] HUTRuntime::HUTRuntime((HUTRuntime *)v200, 1); ParamMgr = (HPAParamMgr *)HPAParamMgr::getParamMgr(s1); std::string::string(v153); ValueAsBool = HPAParamMgr::getValueAsBool(ParamMgr, (const std::string *)v153); std::string::_Rep::_M_dispose(v153[0] - 12, &hddmChipDesc); if ( ValueAsBool ) { v3 = *(_DWORD *)deviceFilePath; std::string::string(v192); std::string::string(v171); v120 = v3; v119 = "DEBUG: Request device load: %s, %s\n"; v118 = &loc_1000002; v117 = v192; ComMsgMgr::sendScopedMsg::eval( 2, "/proj/buildscratch/builds/2014.1/continuous/20140404125757/src/shared/device/devmodel/HDDMDevice.cxx", 738, v171); std::string::_Rep::_M_dispose(v171[0] - 12, &v201); std::string::_Rep::_M_dispose((char *)v192[0] - 12, &hddmChipDesc); } std::string::string((std::string *)v154, deviceFilePath); sub_92304C(); std::string::_Rep::_M_dispose(v154[0] - 12, &v201); v4 = hddmChipDesc; for ( i = 0; i != 16; ++i ) { v6 = (HDDMDevice *)*((_DWORD *)this + i); if ( v6 ) { v7 = (_DWORD *)v6->dword9C; if ( *(v4 - 3) == *(v7 - 3) && !memcmp(v4, v7, *(v4 - 3)) ) { ++v6->dword98; if ( ValueAsBool ) { std::string::string(v193); std::string::string(v172); ComMsgMgr::sendScopedMsg::eval( 2, "/proj/buildscratch/builds/2014.1/continuous/20140404125757/src/shared/device/devmodel/HDDMDevice.cxx", 757, v172); std::string::_Rep::_M_dispose(v172[0] - 12, v194); std::string::_Rep::_M_dispose((char *)v193[0] - 12, &v201); v4 = hddmChipDesc; } std::string::_Rep::_M_dispose(v4 - 3, &v201); goto LABEL_177; } } } std::string::_Rep::_M_dispose(v4 - 3, &v201); std::string::string(v156, "", &v143); std::string::string(v155, "", &v144); Device = (HDDMDevice *)HDDMDeviceCache::createDevice(this, (const HSTString *)v155, (const HSTString *)v156); std::string::_Rep::_M_dispose(v155[0] - 12, &hddmChipDesc); std::string::_Rep::_M_dispose(v156[0] - 12, &hddmChipDesc); ++Device->dword98; xng_device_FileType[0] = 0; *(_WORD *)xng_device_FileVersion = 0; HDDMDeviceCache::getFileTypeAndVersion(this, deviceFilePath, xng_device_FileType, xng_device_FileVersion); if ( (unsigned __int16)(xng_device_FileType[0] - 2) > 1u ) { exception = __cxa_allocate_exception(0xCu); std::string::string((std::string *)&v189, deviceFilePath); std::string::string(v157); sub_6A63B6( (std::string *)&v189, (int)"File is not a chip or device XNG:", (int)&v201, (int)v115, (int)v117, (int)v118, (int)v119, v120); std::string::_Rep::_M_dispose(v157[0] - 12, &hddmChipDesc); std::string::_Rep::_M_dispose(v189 - 12, &hddmChipDesc); __cxa_throw( exception, (struct type_info *)&`typeinfo for'HEXDataException, (void (*)(void *))HEXDataException::~HEXDataException); } v158[0] = (char *)&std::string::_Rep::_S_empty_rep_storage + 12; v159[0] = (char *)&std::string::_Rep::_S_empty_rep_storage + 12; if ( xng_device_FileType[0] == 2 ) { isl::iostreams::filtering_stream<boost::iostreams::input,char,std::char_traits<char>,std::allocator<char>,boost::iostreams::public_>::filtering_stream( (int)&hddmChipDesc, *(_DWORD *)deviceFilePath, 4, 0); std::istream::read((std::istream *)&v212, v194, (int)&byte_8); HDDMXng::Chip::Chip((HDDMXng::Chip *)&v201); HDDMDevice::readMessage((HDDMDevice *)&v212, (std::istream *)&v201, n); std::string::assign((std::string *)v158, v208); std::string::assign((std::string *)v159, (const std::string *)v207[4]); HDDMXng::Chip::~Chip((HDDMXng::Chip *)&v201); isl::iostreams::filtering_stream<boost::iostreams::input,char,std::char_traits<char>,std::allocator<char>,boost::iostreams::public_>::~filtering_stream((int)&hddmChipDesc); } else { std::string::string((std::string *)v160, deviceFilePath); HUBSimpleScanner::HUBSimpleScanner(&hddmChipDesc, v160); std::string::_Rep::_M_dispose(v160[0] - 12, &v201); HUBSimpleScanner::scanTargetWord((HUBSimpleScanner *)&hddmChipDesc, "xngd", 1); HUBSimpleScanner::scanInt((HUBSimpleScanner *)&hddmChipDesc, 1, "version number"); HUBSimpleScanner::scanWord((HUBSimpleScanner *)v161, (bool)&hddmChipDesc, (const char *)&dword_0 + 1); std::string::swap((std::string *)v158, (std::string *)v161); std::string::_Rep::_M_dispose(v161[0] - 12, &v201); HUBSimpleScanner::scanWord((HUBSimpleScanner *)v162, (bool)&hddmChipDesc, (const char *)&dword_0 + 1); std::string::swap((std::string *)v159, (std::string *)v162); std::string::_Rep::_M_dispose(v162[0] - 12, &v201); HUBSimpleScanner::~HUBSimpleScanner((HUBSimpleScanner *)&hddmChipDesc); } std::string::string((std::string *)v163, archFilePath); if ( !*(_DWORD *)(v163[0] - 12) ) { std::string::string((std::string *)v173, deviceFilePath); std::string::string((std::string *)v174, (const std::string *)v158); std::string::append((std::string *)v174, ".xng", 4u); v8 = std::string::rfind((std::string *)v173, "/", 0xFFFFFFFF, 1u); if ( v8 == -1 ) { std::string::assign((std::string *)v173, (const std::string *)v174); isl::iostreams::filtering_stream<boost::iostreams::input,char,std::char_traits<char>,std::allocator<char>,boost::iostreams::public_>::filtering_stream( (int)&hddmChipDesc, v173[0], 4, 0); if ( (v220 & 5) != 0 ) { std::string::string((std::string *)v177, (const std::string *)v158); std::string::append((std::string *)v177, "_", 1u); v109 = (int (__cdecl ***)(int))std::string::append((std::string *)v177, deviceFilePath); v201 = *v109; *v109 = (int (__cdecl **)(int))((char *)&std::string::_Rep::_S_empty_rep_storage + 12); std::string::swap((std::string *)v173, (std::string *)&v201); std::string::_Rep::_M_dispose(v201 - 3, v194); std::string::_Rep::_M_dispose(v177[0] - 12, &v201); } isl::iostreams::filtering_stream<boost::iostreams::input,char,std::char_traits<char>,std::allocator<char>,boost::iostreams::public_>::~filtering_stream((int)&hddmChipDesc); } else { v125 = v8 + 1; std::string::replace((std::string *)v173, v8 + 1, 0xFFFFFFFF, v174[0], *((_DWORD *)v174[0] - 3)); isl::iostreams::filtering_stream<boost::iostreams::input,char,std::char_traits<char>,std::allocator<char>,boost::iostreams::public_>::filtering_stream( (int)&v201, v173[0], 4, 0); if ( ((unsigned __int8)v208 & 5) != 0 ) { std::operator+<char>((std::string *)v176); v9 = (void **)std::string::append((std::string *)v176, "/", 1u); hddmChipDesc = *v9; *v9 = (char *)&std::string::_Rep::_S_empty_rep_storage + 12; v10 = (HDDMTilePort **)std::string::append((std::string *)&hddmChipDesc, (const std::string *)v174); v192[0] = *v10; *v10 = (HDDMTilePort *)((char *)&std::string::_Rep::_S_empty_rep_storage + 12); std::string::_Rep::_M_dispose((char *)hddmChipDesc - 12, v194); std::string::_Rep::_M_dispose(v176[0] - 12, &hddmChipDesc); std::string::replace((std::string *)v173, v125, 0xFFFFFFFF, (const char *)v192[0], *((_DWORD *)v192[0] - 3)); isl::iostreams::filtering_stream<boost::iostreams::input,char,std::char_traits<char>,std::allocator<char>,boost::iostreams::public_>::filtering_stream( (int)&hddmChipDesc, v173[0], 4, 0); if ( (v220 & 5) != 0 ) { std::operator+<char>((std::string *)v175); v110 = (HDDMTile **)std::string::append((std::string *)v175, "/", 1u); v193[0] = *v110; *v110 = (HDDMTile *)((char *)&std::string::_Rep::_S_empty_rep_storage + 12); v111 = (_DWORD *)std::string::append((std::string *)v193, (const std::string *)v174); *(_DWORD *)v194 = *v111; *v111 = (char *)&std::string::_Rep::_S_empty_rep_storage + 12; std::string::swap((std::string *)v192, (std::string *)v194); std::string::_Rep::_M_dispose(*(_DWORD *)v194 - 12, v191); std::string::_Rep::_M_dispose((char *)v193[0] - 12, v194); std::string::_Rep::_M_dispose(v175[0] - 12, v194); std::string::replace((std::string *)v173, v125, 0xFFFFFFFF, (const char *)v192[0], *((_DWORD *)v192[0] - 3)); } isl::iostreams::filtering_stream<boost::iostreams::input,char,std::char_traits<char>,std::allocator<char>,boost::iostreams::public_>::~filtering_stream((int)&hddmChipDesc); std::string::_Rep::_M_dispose((char *)v192[0] - 12, v194); } v201 = &off_212594C; v203 = &off_212594C + 6; v207[0] = &off_212594C + 11; if ( (*(_BYTE *)(*(_DWORD *)v202 + 24) & 1) != 0 ) (*(void (__cdecl **)(int))(*(_DWORD *)v209 + 24))(v209); v201 = &off_212590C; v203 = &off_212590C + 6; v207[0] = &off_212590C + 11; v11 = v206; if ( v206 ) { if ( _InterlockedExchangeAdd(v206 + 1, 0xFFFFFFFF) == 1 ) { (*(void (__cdecl **)(volatile signed __int32 *))(*v11 + 8))(v11); if ( _InterlockedExchangeAdd(v11 + 2, 0xFFFFFFFF) == 1 ) (*(void (__cdecl **)(volatile signed __int32 *))(*v11 + 12))(v11); } } v203 = off_21258CC; v204 = 0; v201 = (int (__cdecl **)(int))(&`vtable for'boost::iostreams::detail::chain_client<boost::iostreams::chain<boost::iostreams::input,char,std::char_traits<char>,std::allocator<char>>> + 2); v207[0] = (char *)&`vtable for'std::ios + 8; std::ios_base::~ios_base((std::ios_base *)v207); } std::string::string((std::string *)v164, (const std::string *)v173); std::string::_Rep::_M_dispose(v174[0] - 12, &hddmChipDesc); std::string::_Rep::_M_dispose(v173[0] - 12, &hddmChipDesc); std::string::swap((std::string *)v163, (std::string *)v164); std::string::_Rep::_M_dispose(v164[0] - 12, &hddmChipDesc); } std::string::string((std::string *)v165, (const std::string *)v163); HDDMDevice::setloadpaths(Device, deviceFilePath, (const HSTString *)v165); std::string::_Rep::_M_dispose(v165[0] - 12, &hddmChipDesc); *(_WORD *)&xng_device_FileVersion[2] = 0; v151[0] = 0; std::string::string((std::string *)v166, (const std::string *)v163); HDDMDeviceCache::getFileTypeAndVersion( this, (const HSTString *)v166, (unsigned __int16 *)&xng_device_FileVersion[2], (char *)v151); std::string::_Rep::_M_dispose(v166[0] - 12, &hddmChipDesc); if ( *(_WORD *)&xng_device_FileVersion[2] != 1 ) { v107 = __cxa_allocate_exception(0xCu); std::string::string((std::string *)v191, (const std::string *)v163); std::string::string(v167); sub_6A63B6( (std::string *)v191, (int)"File is not an architecture XNG:", (int)&v201, (int)v116, (int)v117, (int)v118, (int)v119, v120); std::string::_Rep::_M_dispose(v167[0] - 12, &hddmChipDesc); std::string::_Rep::_M_dispose((char *)v191[0] - 12, &hddmChipDesc); __cxa_throw( v107, (struct type_info *)&`typeinfo for'HEXDataException, (void (*)(void *))HEXDataException::~HEXDataException); } HDDMDevice::readarch_pb(Device, (const std::string *)v163, v151[0]); v12 = xng_device_FileType[0] == 3; Device->byteE1 = xng_device_FileType[0] == 3; if ( v12 ) { HDDMDevice::readdevice(Device, deviceFilePath); } else { hddmChipDesc = (char *)&std::string::_Rep::_S_empty_rep_storage + 12; v211 = (char *)&std::string::_Rep::_S_empty_rep_storage + 12; v212 = -1; v213 = -1; v214 = -1; v215 = -1; v216 = -1; v217 = -1; v218[0] = (char *)&std::string::_Rep::_S_empty_rep_storage + 12; memset(&v218[1], 0, 16); v219 = 0; std::string::assign((std::string *)&v211, "chip", 4u); std::string::assign((std::string *)&hddmChipDesc, (const std::string *)v159); std::string::assign((std::string *)v218, deviceFilePath); v212 = 0; v213 = 0; v214 = 0; v215 = 0; v216 = 0; v217 = 0; v219 = 0; v201 = 0; std::vector<HDDMChip *>::_M_fill_assign((int)&Device->dword1A4, 1, (int)&v201); HDDMDevice::readchip_pb(Device, (HDDMChipDesc *)&hddmChipDesc); std::string::_Rep::_M_dispose(v218[0] - 12, &v201); std::string::_Rep::_M_dispose(v211 - 12, &v201); std::string::_Rep::_M_dispose((char *)hddmChipDesc - 12, &v201); } v13 = Device; if ( !Device->dword2C ) { HDDMDevice::createRPMGrid(Device); v13 = Device; } HDDMDevice::createRoutingDS(v13); HDDMDevice::setrecursivedeviceid(Device, Device->byte0 & 0xF); HDDMDevice::postprocess(Device); std::string::string(v168); v121 = HPAParamMgr::getValueAsBool(ParamMgr, (const std::string *)v168); std::string::_Rep::_M_dispose(v168[0] - 12, &hddmChipDesc); if ( !v121 ) { HDDMTemplateIO::HDDMTemplateIO((HDDMTemplateIO *)&hddmChipDesc); HDDMTemplateIO::loadTemplateData((HDDMTemplateIO *)&hddmChipDesc, Device); HDDMTemplateIO::~HDDMTemplateIO((HDDMTemplateIO *)&hddmChipDesc); } HDDMNodeAdjuster::HDDMNodeAdjuster((HDDMNodeAdjuster *)&hddmChipDesc, Device); HDDMNodeAdjuster::performAdjustments((HDDMNodeAdjuster *)&hddmChipDesc, (const std::string *)&Device->dword9C); HDDMNodeAdjuster::~HDDMNodeAdjuster((HDDMNodeAdjuster *)&hddmChipDesc); HDDMDevice::suppressCostcodes(Device); HUTEnv::HUTEnv((HUTEnv *)&v149); Env = HUTEnv::getEnv((HUTEnv *)"DEVMODEL_CHECKTILEPORTS", s2); HUTEnv::~HUTEnv((HUTEnv *)&v149); if ( Env ) { v195 = 0; v196 = 0; v199 = 0; v197 = &v195; v198 = &v195; v202 = 0; v203 = 0; v206 = 0; v204 = &v202; v205 = &v202; std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Begin checking tile ports {\n", 28); if ( !((unsigned __int16)Device->word6 * (unsigned __int16)Device->word4) ) goto LABEL_130; v15 = Device->word6; v16 = Device->word4; v139 = 0; v17 = 0; while ( 1 ) { v18 = Device->dword74 + 28 * v17; v190 = v18; v19 = *(_DWORD *)(*(_DWORD *)(HDDMDeviceCache::m_devcache[*(_BYTE *)(v18 + 3) >> 4] + 96) + 4 * (*(_WORD *)(v18 + 6) >> 6)); v20 = *(_DWORD *)(v19 + 292); if ( !(unsigned __int16)((*(_DWORD *)(v19 + 296) - v20) >> 2) ) goto LABEL_129; v21 = *(_DWORD *)(v19 + 296); v137 = 0; do { v132 = *(_DWORD **)(v20 + 4 * v137); v22 = v132[3]; v23 = v132[4]; if ( !(unsigned __int16)((v23 - v22) >> 2) ) goto LABEL_127; v135 = 0; do { v126 = *(_DWORD **)(v22 + 4 * v135); v24 = v126[3]; v25 = (v126[4] - v24) >> 2; if ( !v25 ) goto LABEL_125; for ( j = 0; j < v25; ++j ) { v37 = 0; if ( (unsigned __int16)j < v25 ) v37 = *(const HDDMTilePort **)(v24 + 4 * (unsigned __int16)j); v191[0] = 0; v192[0] = 0; if ( (unsigned __int8)HDDMTile::getMatchingPort((HDDMTile *)v18, v37, v191, v192) ) { if ( !std::string::compare((std::string *)(v132 + 1), "Z") ) hut::detail::assertion_failed( (hut::detail *)"edge1->getName() != \"Z\"", "void {anonymous}::_checkTilePorts(const HDDMDevice*)", "/proj/buildscratch/builds/2014.1/continuous/20140404125757/src/shared/device/devmodel/HDDMDevice.cxx", (const char *)&elf_hash_bucket[109] + 2, (int)v117); v129 = *(HPAParamMgr **)v192[0]; v193[0] = 0; hddmChipDesc = 0; HDDMTile::getMatchingPort(v191[0], v192[0], v193, (const HDDMTilePort **)&hddmChipDesc); if ( hddmChipDesc ) v38 = *(_DWORD **)hddmChipDesc; else v38 = 0; if ( v193[0] != (HDDMTile *)v190 ) { HDDMTile::getName((HDDMTile *)v184); if ( v193[0] ) HDDMTile::getName((HDDMTile *)v183); else std::string::string(v183, "NULL", &v148); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Tile3 = ", 8); v39 = std::__ostream_insert<char,std::char_traits<char>>(&std::cout, v183[0], *(_DWORD *)(v183[0] - 12)); std::__ostream_insert<char,std::char_traits<char>>(v39, " should be ", 11); v40 = std::__ostream_insert<char,std::char_traits<char>>(v39, v184[0], *(_DWORD *)(v184[0] - 12)); std::__ostream_insert<char,std::char_traits<char>>(v40, "\n", 1); std::string::_Rep::_M_dispose(v183[0] - 12, &v189); std::string::_Rep::_M_dispose(v184[0] - 12, &v189); if ( v193[0] != (HDDMTile *)v190 ) hut::detail::assertion_failed( (hut::detail *)"tile3 == tile1", "void {anonymous}::_checkTilePorts(const HDDMDevice*)", "/proj/buildscratch/builds/2014.1/continuous/20140404125757/src/shared/device/devmodel/HDDMDevice.cxx", (const char *)&elf_hash_bucket[112] + 2, (int)v117); } if ( v126 != v38 ) { if ( v38 ) std::string::string((std::string *)v182, (const std::string *)(v38 + 2)); else std::string::string(v182, "NULL", &v147); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Face3 = ", 8); v41 = std::__ostream_insert<char,std::char_traits<char>>(&std::cout, v182[0], *(_DWORD *)(v182[0] - 12)); std::__ostream_insert<char,std::char_traits<char>>(v41, " should be ", 11); v42 = std::__ostream_insert<char,std::char_traits<char>>(v41, v126[2], *(_DWORD *)(v126[2] - 12)); std::__ostream_insert<char,std::char_traits<char>>(v42, "\n", 1); std::string::_Rep::_M_dispose(v182[0] - 12, &v189); } if ( v37 != hddmChipDesc ) { v43 = (_WORD **)*((_DWORD *)v37 + 1); v44 = hddmChipDesc ? *((_DWORD *)hddmChipDesc + 1) : -1; std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Port3 = ", 8); v45 = std::ostream::_M_insert<unsigned long>(&std::cout, v44); std::__ostream_insert<char,std::char_traits<char>>(v45, " should be ", 11); v46 = std::ostream::_M_insert<unsigned long>(v45, v43); std::__ostream_insert<char,std::char_traits<char>>(v46, "\n", 1); if ( v37 != hddmChipDesc ) hut::detail::assertion_failed( (hut::detail *)"port3 == port1", "void {anonymous}::_checkTilePorts(const HDDMDevice*)", "/proj/buildscratch/builds/2014.1/continuous/20140404125757/src/shared/device/devmodel/HDDMDevice.cxx", (const char *)&elf_hash_bucket[115] + 1, (int)v117); } if ( *((_DWORD *)v37 + 2) != *((_DWORD *)v192[0] + 2) ) { v47 = (int *)v196; if ( !v196 ) goto LABEL_76; v48 = v190; v49 = &v195; do { while ( v47[4] >= v190 ) { v49 = v47; v47 = (int *)v47[2]; if ( !v47 ) goto LABEL_74; } v47 = (int *)v47[3]; } while ( v47 ); LABEL_74: if ( v49 == &v195 || v49[4] > v190 ) { LABEL_76: v186 = &v190; v117 = (HDDMTilePort **)&v186; v116 = (HDDMTilePort **)&unk_1BA93B5; std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_emplace_hint_unique<std::piecewise_construct_t const&,std::tuple<HDDMTile const* const&>,std::tuple<>>((int)&v140); v48 = v190; v49 = v140; } ++v49[5]; v50 = *(_DWORD *)(*(_DWORD *)(HDDMDeviceCache::m_devcache[*(_BYTE *)(v48 + 3) >> 4] + 96) + 4 * (*(_WORD *)(v48 + 6) >> 6)); v51 = (int *)v203; v52 = &v202; if ( !v203 ) goto LABEL_84; do { while ( v50 <= v51[4] ) { v52 = v51; v51 = (int *)v51[2]; if ( !v51 ) goto LABEL_82; } v51 = (int *)v51[3]; } while ( v51 ); LABEL_82: if ( v52 == &v202 || v50 < v52[4] ) { LABEL_84: v53 = (_DWORD *)operator new(0x18u); v52 = v53; if ( v53 ) { *v53 = 0; v53[1] = 0; v53[2] = 0; v53[3] = 0; v53[4] = v50; v53[5] = 0; } v116 = (HDDMTilePort **)(v53 + 4); std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_get_insert_hint_unique_pos((int)&v141); v54 = v141; if ( v142 ) { v55 = 1; if ( !v141 && v142 != &v202 ) v55 = v52[4] < (unsigned int)v142[4]; std::_Rb_tree_insert_and_rebalance(v55, v52, v142, &v202); v206 = (volatile signed __int32 *)((char *)v206 + 1); } else { operator delete(v52); v52 = v54; } } ++v52[5]; v56 = (int *)v196; if ( !v196 ) goto LABEL_96; v57 = v191[0]; v58 = &v195; do { while ( (HDDMTile *)v56[4] >= v191[0] ) { v58 = v56; v56 = (int *)v56[2]; if ( !v56 ) goto LABEL_94; } v56 = (int *)v56[3]; } while ( v56 ); LABEL_94: if ( v58 == &v195 || (HDDMTile *)v58[4] > v191[0] ) { LABEL_96: v187[0] = v191; v117 = (HDDMTilePort **)v187; v116 = (HDDMTilePort **)&unk_1BA93B5; std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_emplace_hint_unique<std::piecewise_construct_t const&,std::tuple<HDDMTile const* const&>,std::tuple<>>((int)&v140); v57 = v191[0]; v58 = v140; } ++v58[5]; v59 = *(_DWORD *)(*(_DWORD *)(HDDMDeviceCache::m_devcache[*((_BYTE *)v57 + 3) >> 4] + 96) + 4 * (*((_WORD *)v57 + 3) >> 6)); v60 = (int *)v203; v61 = &v202; if ( !v203 ) goto LABEL_104; do { while ( v59 <= v60[4] ) { v61 = v60; v60 = (int *)v60[2]; if ( !v60 ) goto LABEL_102; } v60 = (int *)v60[3]; } while ( v60 ); LABEL_102: if ( v61 == &v202 || v59 < v61[4] ) { LABEL_104: v62 = (_DWORD *)operator new(0x18u); v61 = v62; if ( v62 ) { *v62 = 0; v62[1] = 0; v62[2] = 0; v62[3] = 0; v62[4] = v59; v62[5] = 0; } v116 = (HDDMTilePort **)(v62 + 4); std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_get_insert_hint_unique_pos((int)&v141); v63 = v141; if ( v142 ) { v64 = 1; if ( !v141 && v142 != &v202 ) v64 = v61[4] < (unsigned int)v142[4]; std::_Rb_tree_insert_and_rebalance(v64, v61, v142, &v202); v206 = (volatile signed __int32 *)((char *)v206 + 1); } else { operator delete(v61); v61 = v63; } } ++v61[5]; v131 = *((_DWORD *)v192[0] + 2); v133 = *((_DWORD *)v192[0] + 1); HDDMTile::getName((HDDMTile *)v181); v134 = (_WORD **)*((_DWORD *)v37 + 2); v65 = (_WORD **)*((_DWORD *)v37 + 1); HDDMTile::getName((HDDMTile *)v180); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Global mismatch: ", 17); v66 = std::__ostream_insert<char,std::char_traits<char>>(&std::cout, v180[0], *(_DWORD *)(v180[0] - 12)); std::__ostream_insert<char,std::char_traits<char>>(v66, ".", 1); v67 = std::__ostream_insert<char,std::char_traits<char>>(v66, v126[2], *(_DWORD *)(v126[2] - 12)); std::__ostream_insert<char,std::char_traits<char>>(v67, "[", 1); v68 = std::ostream::_M_insert<unsigned long>(v67, v65); std::__ostream_insert<char,std::char_traits<char>>(v68, "] = ", 4); v69 = std::ostream::_M_insert<unsigned long>(v68, v134); std::__ostream_insert<char,std::char_traits<char>>(v69, " ", 1); v70 = std::__ostream_insert<char,std::char_traits<char>>(v69, v181[0], *(_DWORD *)(v181[0] - 12)); std::__ostream_insert<char,std::char_traits<char>>(v70, ".", 1); v71 = std::__ostream_insert<char,std::char_traits<char>>( v70, *((_DWORD *)v129 + 2), *(_DWORD *)(*((_DWORD *)v129 + 2) - 12)); std::__ostream_insert<char,std::char_traits<char>>(v71, "[", 1); v72 = std::ostream::_M_insert<unsigned long>(v71, v133); std::__ostream_insert<char,std::char_traits<char>>(v72, "] = ", 4); v73 = std::ostream::_M_insert<unsigned long>(v72, v131); std::__ostream_insert<char,std::char_traits<char>>(v73, "\n", 1); std::string::_Rep::_M_dispose(v180[0] - 12, &v189); std::string::_Rep::_M_dispose(v181[0] - 12, &v189); } goto LABEL_45; } v18 = v190; if ( !v191[0] ) goto LABEL_46; v26 = HDDMDeviceCache::m_devcache[*(_BYTE *)(v190 + 3) >> 4]; v27 = -1227133513 * ((int)(v190 - *(_DWORD *)(v26 + 116)) >> 2); v128 = (HPAParamMgr *)*(unsigned __int16 *)(v26 + 6); v123 = v27 % (unsigned int)v128; v28 = *(unsigned __int16 *)(v26 + 4); v29 = v28 - 1 - v27 / (unsigned int)v128; v30 = *(_DWORD *)(*(_DWORD *)(v26 + 96) + 4 * (*(_WORD *)(v190 + 6) >> 6)); v31 = *(unsigned __int16 *)(v30 + 24); v130 = *(_WORD *)(v30 + 26); v32 = ***(_WORD ***)v37; if ( v32 == 1 ) { if ( (HPAParamMgr *)(v123 + v31) != v128 ) goto LABEL_44; } else if ( v32 ) { if ( v32 == 2 ) { if ( (_WORD)v29 ) goto LABEL_44; } else if ( v32 == 3 && (_WORD)v123 ) { LABEL_44: v33 = (_WORD **)*((_DWORD *)v37 + 1); HDDMTile::getName((HDDMTile *)v185); std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "Missing matching port for ", 26); v34 = std::__ostream_insert<char,std::char_traits<char>>(&std::cout, v185[0], *(_DWORD *)(v185[0] - 12)); std::__ostream_insert<char,std::char_traits<char>>(v34, ".", 1); v35 = std::__ostream_insert<char,std::char_traits<char>>(v34, v126[2], *(_DWORD *)(v126[2] - 12)); std::__ostream_insert<char,std::char_traits<char>>(v35, "[", 1); v36 = std::ostream::_M_insert<unsigned long>(v35, v33); std::__ostream_insert<char,std::char_traits<char>>(v36, "]", 1); std::__ostream_insert<char,std::char_traits<char>>(v36, "\n", 1); std::string::_Rep::_M_dispose(v185[0] - 12, &hddmChipDesc); hut::detail::assertion_failed( (hut::detail *)"false", "void {anonymous}::_checkTilePorts(const HDDMDevice*)", "/proj/buildscratch/builds/2014.1/continuous/20140404125757/src/shared/device/devmodel/HDDMDevice.cxx", (const char *)&elf_hash_bucket[107] + 3, (int)v117); LABEL_45: v18 = v190; } } else if ( v130 + (unsigned __int16)v29 != (unsigned __int16)v28 ) { goto LABEL_44; } LABEL_46: v24 = v126[3]; v25 = (v126[4] - v24) >> 2; } v22 = v132[3]; v23 = v132[4]; LABEL_125: ++v135; } while ( v135 < (unsigned __int16)((v23 - v22) >> 2) ); v74 = *(_DWORD *)(*(_DWORD *)(HDDMDeviceCache::m_devcache[*(_BYTE *)(v18 + 3) >> 4] + 96) + 4 * (*(_WORD *)(v18 + 6) >> 6)); v21 = *(_DWORD *)(v74 + 296); v20 = *(_DWORD *)(v74 + 292); LABEL_127: ++v137; } while ( v137 < (unsigned __int16)((v21 - v20) >> 2) ); v16 = Device->word4; v15 = Device->word6; LABEL_129: v17 = ++v139; if ( v139 >= v15 * (unsigned int)v16 ) { LABEL_130: if ( v199 ) { std::ofstream::basic_ofstream(&hddmChipDesc, "badGlobals.txt", 48, v116); if ( (unsigned __int16)Device->word6 * (unsigned __int16)Device->word4 ) { v75 = 0; v76 = 0; do { v77 = (HDDMTile *)(Device->dword74 + 28 * v76); v193[0] = v77; v78 = (int *)v196; v79 = &v195; if ( !v196 ) goto LABEL_187; do { if ( (unsigned int)v77 > v78[4] ) { v78 = (int *)v78[3]; } else { v79 = v78; v78 = (int *)v78[2]; } } while ( v78 ); if ( v79 == &v195 || (unsigned int)v77 < v79[4] ) { LABEL_187: v187[4] = v193; std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_emplace_hint_unique<std::piecewise_construct_t const&,std::tuple<HDDMTile const* const&>,std::tuple<>>((int)&v140); v79 = v140; } v80 = v79[5]; if ( v80 > 0 ) { HDDMTile::getName((HDDMTile *)v179); v81 = std::__ostream_insert<char,std::char_traits<char>>( &hddmChipDesc, v179[0], *(_DWORD *)(v179[0] - 12)); v82 = std::operator<<<std::char_traits<char>>(v81, " "); v83 = std::ostream::operator<<(v82, v80); std::operator<<<std::char_traits<char>>(v83, "\n"); std::string::_Rep::_M_dispose(v179[0] - 12, v192); } v76 = ++v75; } while ( v75 < (unsigned __int16)Device->word6 * (unsigned int)(unsigned __int16)Device->word4 ); } v84 = Device->dword60; if ( (unsigned __int16)((Device->dword64 - v84) >> 2) ) { v85 = 0; do { v86 = *(_DWORD *)(v84 + 4 * v85); v87 = (int *)v203; v88 = &v202; if ( !v203 ) goto LABEL_150; do { if ( v86 > v87[4] ) { v87 = (int *)v87[3]; } else { v88 = v87; v87 = (int *)v87[2]; } } while ( v87 ); if ( v88 == &v202 || v86 < v88[4] ) { LABEL_150: v89 = (int *)operator new(0x18u); if ( v89 ) { *v89 = 0; v89[1] = 0; v89[2] = 0; v89[3] = 0; v89[4] = v86; v89[5] = 0; } v124 = v89; std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_get_insert_hint_unique_pos((int)&v141); v88 = v141; if ( v142 ) { v90 = 1; if ( !v141 && v142 != &v202 ) v90 = v124[4] < (unsigned int)v142[4]; std::_Rb_tree_insert_and_rebalance(v90, v124, v142, &v202); v206 = (volatile signed __int32 *)((char *)v206 + 1); v88 = v124; } else { operator delete(v124); } } v91 = v88[5]; if ( v91 > 0 ) { HDDMTileType::getName((HDDMTileType *)v178); v92 = std::__ostream_insert<char,std::char_traits<char>>( &hddmChipDesc, v178[0], *(_DWORD *)(v178[0] - 12)); v93 = std::operator<<<std::char_traits<char>>(v92, " "); v94 = std::ostream::operator<<(v93, v91); std::operator<<<std::char_traits<char>>(v94, "\n"); std::string::_Rep::_M_dispose(v178[0] - 12, v193); } ++v85; v84 = Device->dword60; } while ( v85 < (unsigned __int16)((Device->dword64 - v84) >> 2) ); } std::__ostream_insert<char,std::char_traits<char>>(&std::cout, "}\n", 2); std::ofstream::~ofstream(&hddmChipDesc); } std::_Rb_tree<HDDMTileType const*,std::pair<HDDMTileType const* const,int>,std::_Select1st<std::pair<HDDMTileType const* const,int>>,std::less<HDDMTileType const*>,std::allocator<std::pair<HDDMTileType const* const,int>>>::_M_erase( (int)&v201, v203); std::_Rb_tree<HDDMTile const*,std::pair<HDDMTile const* const,int>,std::_Select1st<std::pair<HDDMTile const* const,int>>,std::less<HDDMTile const*>,std::allocator<std::pair<HDDMTile const* const,int>>>::_M_erase( (int)v194, v196); break; } } } if ( !Device->dword17C ) { v106 = (HDDMOracle *)operator new(0x8Cu); HDDMOracle::HDDMOracle(v106, Device); Device->dword17C = v106; } std::string::string(v169, "RCLK_INT_L", &v145); TileType = HDDMDevice::getTileType(Device, (const HSTString *)v169); std::string::_Rep::_M_dispose(v169[0] - 12, &hddmChipDesc); if ( TileType ) { v96 = *(unsigned __int16 *)(TileType + 2); if ( *(_WORD *)(TileType + 2) ) { v97 = 0; v98 = 0; do { v99 = v97 + *(_DWORD *)(TileType + 124); if ( (*(_BYTE *)(v99 + 3) & 8) != 0 ) *(_BYTE *)(v99 + 1) |= 0x10u; ++v98; v97 += 24; } while ( v96 > v98 ); } } std::string::string(v170, "RCLK_INT_R", &v146); v100 = HDDMDevice::getTileType(Device, (const HSTString *)v170); std::string::_Rep::_M_dispose(v170[0] - 12, &hddmChipDesc); if ( v100 ) { v101 = *(unsigned __int16 *)(v100 + 2); if ( *(_WORD *)(v100 + 2) ) { v102 = 0; v103 = 0; do { v104 = v102 + *(_DWORD *)(v100 + 124); if ( (*(_BYTE *)(v104 + 3) & 8) != 0 ) *(_BYTE *)(v104 + 1) |= 0x10u; ++v103; v102 += 24; } while ( v101 > v103 ); } } if ( ValueAsBool ) { HUTRuntime::getWallSecs((HUTRuntime *)v200); HUTRuntime::getUserSecs((HUTRuntime *)v200); std::string::string(&hddmChipDesc); std::string::string(v188); ComMsgMgr::sendScopedMsg::eval( 3, "/proj/buildscratch/builds/2014.1/continuous/20140404125757/src/shared/device/devmodel/HDDMDevice.cxx", 896, v188); std::string::_Rep::_M_dispose(v188[0] - 12, v194); std::string::_Rep::_M_dispose((char *)hddmChipDesc - 12, &v201); } HDDMProto::freeMemory((HDDMProto *)&dword_21701EC); std::string::_Rep::_M_dispose(v163[0] - 12, &hddmChipDesc); std::string::_Rep::_M_dispose(v159[0] - 12, &hddmChipDesc); std::string::_Rep::_M_dispose(v158[0] - 12, &hddmChipDesc); v6 = Device; LABEL_177: HUTRuntime::~HUTRuntime((HUTRuntime *)v200); return v6; }
最新发布
10-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值