本文整理汇总了C++中MemoryMap::insert方法的典型用法代码示例。如果您正苦于以下问题:C++ MemoryMap::insert方法的具体用法?C++ MemoryMap::insert怎么用?C++ MemoryMap::insert使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MemoryMap
的用法示例。
在下文中一共展示了MemoryMap::insert方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: NotMapped
// class method
rose_addr_t
SRecord::load(const std::vector<SRecord> &srecs, MemoryMap &map, bool createSegments, unsigned accessPerms)
{
if (createSegments) {
// We want to minimize the number of buffers in the map, so the first step is to discover what addresses are covered by
// the data S-records
Sawyer::Container::IntervalSet<AddressInterval> addressesUsed;
BOOST_FOREACH (const SRecord &srec, srecs) {
switch (srec.type()) {
case SREC_DATA16:
case SREC_DATA24:
case SREC_DATA32:
addressesUsed.insert(AddressInterval::baseSize(srec.address(), srec.data().size()));
break;
default:
break;
}
}
// Create buffers for the data and insert them into the memory map
BOOST_FOREACH (const AddressInterval &interval, addressesUsed.intervals()) {
ASSERT_forbid(interval.isWhole()); // not practically possible since S-Record file would be >2^65 bytes
map.insert(interval, MemoryMap::Segment::anonymousInstance(interval.size(), accessPerms, "S-Records"));
}
}
// Populate the map by writing the S-Record data into it.
rose_addr_t startingAddr = 0;
BOOST_FOREACH (const SRecord &srec, srecs) {
switch (srec.type()) {
case SREC_DATA16:
case SREC_DATA24:
case SREC_DATA32: {
if (!srec.data().empty()) {
size_t nwritten = map.at(srec.address()).write(srec.data()).size();
if (nwritten != srec.data().size())
throw MemoryMap::NotMapped("S-Record destination is not mapped for " +
StringUtility::plural(srec.data().size(), "bytes"),
&map, srec.address());
}
break;
}
case SREC_START16:
case SREC_START24:
case SREC_START32:
startingAddr = srec.address();
break;
default:
break;
}
}
return startingAddr;
}