本文整理汇总了C++中Prog::newProc方法的典型用法代码示例。如果您正苦于以下问题:C++ Prog::newProc方法的具体用法?C++ Prog::newProc怎么用?C++ Prog::newProc使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Prog
的用法示例。
在下文中一共展示了Prog::newProc方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: testDataIntervalOverlaps
/*==============================================================================
* FUNCTION: TypeTest::testDataIntervalOverlaps
* OVERVIEW: Test the DataIntervalMap class with overlapping addItems
*============================================================================*/
void TypeTest::testDataIntervalOverlaps() {
DataIntervalMap dim;
Prog* prog = new Prog;
UserProc* proc = (UserProc*) prog->newProc("test", 0x123);
std::string name("test");
proc->setSignature(Signature::instantiate(PLAT_PENTIUM, CONV_C, name.c_str()));
dim.setProc(proc);
dim.addItem(0x1000, "firstInt", new IntegerType(32, 1));
dim.addItem(0x1004, "firstFloat", new FloatType(32));
dim.addItem(0x1008, "secondInt", new IntegerType(32, 1));
dim.addItem(0x100C, "secondFloat", new FloatType(32));
CompoundType ct;
ct.addType(new IntegerType(32, 1), "int3");
ct.addType(new FloatType(32), "float3");
dim.addItem(0x1010, "existingStruct", &ct);
// First insert a new struct over the top of the existing middle pair
CompoundType ctu;
ctu.addType(new IntegerType(32, 0), "newInt"); // This int has UNKNOWN sign
ctu.addType(new FloatType(32), "newFloat");
dim.addItem(0x1008, "replacementStruct", &ctu);
DataIntervalEntry* pdie = dim.find(0x1008);
std::string expected = "struct { int newInt; float newFloat; }";
std::string actual = pdie->second.type->getCtype();
CPPUNIT_ASSERT_EQUAL(expected, actual);
// Attempt a weave; should fail
CompoundType ct3;
ct3.addType(new FloatType(32), "newFloat3");
ct3.addType(new IntegerType(32, 0), "newInt3");
dim.addItem(0x1004, "weaveStruct1", &ct3);
pdie = dim.find(0x1004);
expected = "firstFloat";
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
// Totally unaligned
dim.addItem(0x1001, "weaveStruct2", &ct3);
pdie = dim.find(0x1001);
expected = "firstInt";
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
dim.addItem(0x1004, "firstInt", new IntegerType(32, 1)); // Should fail
pdie = dim.find(0x1004);
expected = "firstFloat";
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
// Set up three ints
dim.deleteItem(0x1004);
dim.addItem(0x1004, "firstInt", new IntegerType(32, 1)); // Definately signed
dim.deleteItem(0x1008);
dim.addItem(0x1008, "firstInt", new IntegerType(32, 0)); // Unknown signedess
// then, add an array over the three integers
ArrayType at(new IntegerType(32, 0), 3);
dim.addItem(0x1000, "newArray", &at);
pdie = dim.find(0x1005); // Check middle element
expected = "newArray";
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
pdie = dim.find(0x1000); // Check first
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
pdie = dim.find(0x100B); // Check last
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
// Already have an array of 3 ints at 0x1000. Put a new array completely before, then with only one word overlap
dim.addItem(0xF00, "newArray2", &at);
pdie = dim.find(0x1000); // Shouyld still be newArray at 0x1000
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
pdie = dim.find(0xF00);
expected = "newArray2";
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
dim.addItem(0xFF8, "newArray3", &at); // Should fail
pdie = dim.find(0xFF8);
unsigned ue = 0; // Expect NULL
unsigned ua = (unsigned)pdie;
CPPUNIT_ASSERT_EQUAL(ue, ua);
}
示例2: testDataInterval
/*==============================================================================
* FUNCTION: TypeTest::testDataInterval
* OVERVIEW: Test the DataIntervalMap class
*============================================================================*/
void TypeTest::testDataInterval() {
DataIntervalMap dim;
Prog* prog = new Prog;
UserProc* proc = (UserProc*) prog->newProc("test", 0x123);
std::string name("test");
proc->setSignature(Signature::instantiate(PLAT_PENTIUM, CONV_C, name.c_str()));
dim.setProc(proc);
dim.addItem(0x1000, "first", new IntegerType(32, 1));
dim.addItem(0x1004, "second", new FloatType(64));
std::string actual(dim.prints());
std::string expected("0x1000 first int\n"
"0x1004 second double\n");
CPPUNIT_ASSERT_EQUAL(expected, actual);
DataIntervalEntry* pdie = dim.find(0x1000);
expected = "first";
CPPUNIT_ASSERT(pdie);
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
pdie = dim.find(0x1003);
CPPUNIT_ASSERT(pdie);
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
pdie = dim.find(0x1004);
CPPUNIT_ASSERT(pdie);
expected = "second";
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
pdie = dim.find(0x1007);
CPPUNIT_ASSERT(pdie);
actual = pdie->second.name;
CPPUNIT_ASSERT_EQUAL(expected, actual);
CompoundType ct;
ct.addType(new IntegerType(16, 1), "short1");
ct.addType(new IntegerType(16, 1), "short2");
ct.addType(new IntegerType(32, 1), "int1");
ct.addType(new FloatType(32), "float1");
dim.addItem(0x1010, "struct1", &ct);
ComplexTypeCompList& ctcl = ct.compForAddress(0x1012, dim);
unsigned ua = ctcl.size();
unsigned ue = 1;
CPPUNIT_ASSERT_EQUAL(ue, ua);
ComplexTypeComp& ctc = ctcl.front();
ue = 0;
ua = ctc.isArray;
CPPUNIT_ASSERT_EQUAL(ue, ua);
expected = "short2";
actual = ctc.u.memberName;
CPPUNIT_ASSERT_EQUAL(expected, actual);
// An array of 10 struct1's
ArrayType at(&ct, 10);
dim.addItem(0x1020, "array1", &at);
ComplexTypeCompList& ctcl2 = at.compForAddress(0x1020+0x3C+8, dim);
// Should be 2 components: [5] and .float1
ue = 2;
ua = ctcl2.size();
CPPUNIT_ASSERT_EQUAL(ue, ua);
ComplexTypeComp& ctc0 = ctcl2.front();
ComplexTypeComp& ctc1 = ctcl2.back();
ue = 1;
ua = ctc0.isArray;
CPPUNIT_ASSERT_EQUAL(ue, ua);
ue = 5;
ua = ctc0.u.index;
CPPUNIT_ASSERT_EQUAL(ue, ua);
ue = 0;
ua = ctc1.isArray;
CPPUNIT_ASSERT_EQUAL(ue, ua);
expected = "float1";
actual = ctc1.u.memberName;
CPPUNIT_ASSERT_EQUAL(expected, actual);
}