请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码
特别注意:
1.保持原始函数定义不变,不要拆分函数
2.保持所有原始逻辑功能不变
3.结构体采用32位定义
4.严格保持protobuf字段映射关系
5.提高执行效率,降低计算复杂度
6.已经给定的结构体名字和元素不要更改,详细的中文注释
7.自动添加中文注释说明功能逻辑
8.不使用 auto,使用显式 for 循环
函数中的 HDDMXng::Primitive::Primitive 映射为
message Primitive
{
optional uint32 primtype = 1;
optional uint32 specialpin = 2;
repeated uint32 addresspins = 3 [packed = true];
repeated uint32 selectpins = 4 [packed = true];
repeated uint32 selectedinputs = 5 [packed = true];
}
将函数中 _DWORD primitive_msg[46] 映射为 HDDMXng::Primitive primitive_msg
void HDDMPrimitive::HDDMPrimitive(HDDMPrimitive *this, int nPrimType)
{
this->numPrimType = nPrimType;
this->hddmBelDef = 0;
this->vtable = &off_96B72D0;
}
void HDDMPrimitive::~HDDMPrimitive(HDDMPrimitive *this)
{
this->hddmBelDef = 0;
this->vtable = &off_96B72D0;
}
off_96B72D0 dq offset _ZN13HDDMPrimitive9readme_pbERSiP10HDDMDevice ; HDDMPrimitive::readme_pb(std::istream &,HDDMDevice *)
dq offset _ZNK13HDDMPrimitive10writeme_pbERSo ; HDDMPrimitive::writeme_pb(std::ostream &)
dq offset _ZN13HDDMPrimitiveD2Ev ; HDDMPrimitive::~HDDMPrimitive()
dq offset _ZN13HDDMPrimitiveD0Ev ; HDDMPrimitive::~HDDMPrimitive()
dq offset nullsub_28
void HDDMPrimitive::~HDDMPrimitive(HDDMPrimitive *this)
{
HDDMPrimitive::~HDDMPrimitive(this);
operator delete(this);
}
void HDDMPrimitive::readme_pb(HDDMPrimitive *this, std::istream *stream, HDDMDevice *hddmDevice)
{
google::protobuf::Message *v3; // rdx
_DWORD primitive_msg[46]; // [rsp+0h] [rbp-B8h] BYREF
if ( HDDMDeviceDump::useXngMarks )
std::istream::read(stream, HDDMDeviceDump::markBuffer, 4);
HDDMXng::Primitive::Primitive((HDDMXng::Primitive *)primitive_msg);
HDDMDevice::readMessage((HDDMDevice *)stream, (std::istream *)primitive_msg, v3);
this->numPrimType = primitive_msg[4];
HDDMXng::Primitive::~Primitive((HDDMXng::Primitive *)primitive_msg);
}
void HDDMPrimitive::writeme_pb(HDDMPrimitive *this, std::ostream *stream)
{
int numHddmPrimType; // eax
const google::protobuf::Message *v3; // rdx
_DWORD primitive_msg[36]; // [rsp+0h] [rbp-B8h] BYREF
int v5; // [rsp+90h] [rbp-28h]
if ( HDDMDeviceDump::useXngMarks )
std::ostream::write(stream, "PRIM", 4);
HDDMXng::Primitive::Primitive((HDDMXng::Primitive *)primitive_msg);
numHddmPrimType = this->numPrimType;
v5 |= 1u;
primitive_msg[4] = numHddmPrimType;
HDDMDevice::writeMessage((HDDMDevice *)stream, (std::ostream *)primitive_msg, v3);
HDDMXng::Primitive::~Primitive((HDDMXng::Primitive *)primitive_msg);
}
void __fastcall HDDMPrimitiveFlop::HDDMPrimitiveFlop(HDDMPrimitiveFlop *this)
{
HDDMPrimitive::HDDMPrimitive(this, 10);
*(_QWORD *)this = &off_96B7210;
}
dq offset _ZTI17HDDMPrimitiveFlop ; `typeinfo for'HDDMPrimitiveFlop
off_96B7210 dq offset _ZN13HDDMPrimitive9readme_pbERSiP10HDDMDevice ; HDDMPrimitive::readme_pb(std::istream &,HDDMDevice *)
dq offset _ZNK13HDDMPrimitive10writeme_pbERSo ; HDDMPrimitive::writeme_pb(std::ostream &)
dq offset sub_21CEAC0
dq offset sub_21CEC40
dq offset _ZNK17HDDMPrimitiveFlop5printERSoRKSs ; HDDMPrimitiveFlop::print(std::ostream &,std::string const&)
void __fastcall HDDMPrimitiveFlop::print(HDDMPrimitiveFlop *this, std::ostream *stream, const std::string *filename)
{
__int64 v3; // rax
v3 = std::__ostream_insert<char,std::char_traits<char>>(
stream,
*(_QWORD *)filename,
*(_QWORD *)(*(_QWORD *)filename - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v3, "PRIMITIVE: PRIMITIVE_FLOP", 25);
}
void __fastcall HDDMPrimitiveLatchFlop::HDDMPrimitiveLatchFlop(HDDMPrimitiveLatchFlop *this)
{
HDDMPrimitive::HDDMPrimitive(this, 11);
*(_QWORD *)this = &off_96B7250;
}
off_96B7250 dq offset _ZN13HDDMPrimitive9readme_pbERSiP10HDDMDevice ; HDDMPrimitive::readme_pb(std::istream &,HDDMDevice *)
dq offset _ZNK13HDDMPrimitive10writeme_pbERSo ; HDDMPrimitive::writeme_pb(std::ostream &)
dq offset sub_21CEAE0
dq offset sub_21CEC60
dq offset _ZNK22HDDMPrimitiveLatchFlop5printERSoRKSs ; HDDMPrimitiveLatchFlop::print(std::ostream &,std::string const&)
void __fastcall HDDMPrimitiveLatchFlop::print(
HDDMPrimitiveLatchFlop *this,
std::ostream *stream,
const std::string *filename)
{
__int64 v3; // rax
v3 = std::__ostream_insert<char,std::char_traits<char>>(
stream,
*(_QWORD *)filename,
*(_QWORD *)(*(_QWORD *)filename - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v3, "PRIMITIVE: PRIMITIVE_LATCHFLOP", 30);
}
void __fastcall HDDMPrimitivePad::HDDMPrimitivePad(HDDMPrimitivePad *this)
{
HDDMPrimitive::HDDMPrimitive(this, 6);
*(_QWORD *)this = &off_96B7290;
}
off_96B7290 dq offset _ZN13HDDMPrimitive9readme_pbERSiP10HDDMDevice ; HDDMPrimitive::readme_pb(std::istream &,HDDMDevice *)
dq offset _ZNK13HDDMPrimitive10writeme_pbERSo ; HDDMPrimitive::writeme_pb(std::ostream &)
dq offset sub_21CEAA0
dq offset sub_21CEC20
dq offset _ZNK16HDDMPrimitivePad5printERSoRKSs ; HDDMPrimitivePad::print(std::ostream &,std::string const&)
void __fastcall HDDMPrimitivePad::print(HDDMPrimitivePad *this, std::ostream *stream, const std::string *filename)
{
__int64 v3; // rax
v3 = std::__ostream_insert<char,std::char_traits<char>>(
stream,
*(_QWORD *)filename,
*(_QWORD *)(*(_QWORD *)filename - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v3, "PRIMITIVE: PRIMITIVE_PAD", 24);
}
void __fastcall HDDMPrimitiveRoutingImux::HDDMPrimitiveRoutingImux(HDDMPrimitiveRoutingImux *this)
{
HDDMPrimitive::HDDMPrimitive(this, 15);
*(_QWORD *)this = &off_96B7150;
}
off_96B7150 dq offset _ZN13HDDMPrimitive9readme_pbERSiP10HDDMDevice ; HDDMPrimitive::readme_pb(std::istream &,HDDMDevice *)
dq offset _ZNK13HDDMPrimitive10writeme_pbERSo ; HDDMPrimitive::writeme_pb(std::ostream &)
dq offset sub_21CEB20
dq offset sub_21CECA0
dq offset _ZNK24HDDMPrimitiveRoutingImux5printERSoRKSs ; HDDMPrimitiveRoutingImux::print(std::ostream &,std::string const&)
void __fastcall HDDMPrimitiveRoutingImux::print(
HDDMPrimitiveRoutingImux *this,
std::ostream *stream,
const std::string *filename)
{
__int64 v3; // rax
v3 = std::__ostream_insert<char,std::char_traits<char>>(
stream,
*(_QWORD *)filename,
*(_QWORD *)(*(_QWORD *)filename - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v3, "PRIMITIVE: PRIMITIVE_IMUX", 25);
}
void __fastcall HDDMPrimitiveRoutingOmux::HDDMPrimitiveRoutingOmux(HDDMPrimitiveRoutingOmux *this)
{
HDDMPrimitive::HDDMPrimitive(this, 14);
*(_QWORD *)this = &off_96B7190;
}
off_96B7190 dq offset _ZN13HDDMPrimitive9readme_pbERSiP10HDDMDevice ; HDDMPrimitive::readme_pb(std::istream &,HDDMDevice *)
dq offset _ZNK13HDDMPrimitive10writeme_pbERSo ; HDDMPrimitive::writeme_pb(std::ostream &)
dq offset sub_21CEB40
dq offset sub_21CECC0
dq offset _ZNK24HDDMPrimitiveRoutingOmux5printERSoRKSs ; HDDMPrimitiveRoutingOmux::print(std::ostream &,std::string const&)
void __fastcall HDDMPrimitiveRoutingOmux::print(
HDDMPrimitiveRoutingOmux *this,
std::ostream *stream,
const std::string *filename)
{
__int64 v3; // rax
v3 = std::__ostream_insert<char,std::char_traits<char>>(
stream,
*(_QWORD *)filename,
*(_QWORD *)(*(_QWORD *)filename - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v3, "PRIMITIVE: PRIMITIVE_OMUX", 25);
}
void __fastcall HDDMPrimitiveRoutingSbox::HDDMPrimitiveRoutingSbox(HDDMPrimitiveRoutingSbox *this)
{
HDDMPrimitive::HDDMPrimitive(this, 13);
*(_QWORD *)this = &off_96B71D0;
}
off_96B71D0 dq offset _ZN13HDDMPrimitive9readme_pbERSiP10HDDMDevice ; HDDMPrimitive::readme_pb(std::istream &,HDDMDevice *)
dq offset _ZNK13HDDMPrimitive10writeme_pbERSo ; HDDMPrimitive::writeme_pb(std::ostream &)
dq offset sub_21CEB00
dq offset sub_21CEC80
dq offset _ZNK24HDDMPrimitiveRoutingSbox5printERSoRKSs ; HDDMPrimitiveRoutingSbox::print(std::ostream &,std::string const&)
void __fastcall HDDMPrimitiveRoutingSbox::print(
HDDMPrimitiveRoutingSbox *this,
std::ostream *stream,
const std::string *filename)
{
__int64 v3; // rax
v3 = std::__ostream_insert<char,std::char_traits<char>>(
stream,
*(_QWORD *)filename,
*(_QWORD *)(*(_QWORD *)filename - 24LL));
std::__ostream_insert<char,std::char_traits<char>>(v3, "PRIMITIVE: PRIMITIVE_ROUTING_SBOX", 33);
}