void AddressRangeListTest::testAddJoinableRanges() { AddressRangeList addressRangeList; AddressRange addressRange1( Start1, End1 ); AddressRange addressRange2( Start2, End2 ); // in front AddressRange otherAddressRange( 0, Start1-1 ); addressRangeList.addAddressRange( addressRange1 ); addressRangeList.addAddressRange( addressRange2 ); addressRangeList.addAddressRange( otherAddressRange ); QCOMPARE( addressRangeList.size(), 2 ); QCOMPARE( addressRangeList.first(), AddressRange(otherAddressRange.start(),addressRange1.end()) ); QCOMPARE( addressRangeList.last(), addressRange2 ); // in the middle, with first addressRangeList.clear(); otherAddressRange.set( End1+1, Start2-2 ); addressRangeList.addAddressRange( addressRange1 ); addressRangeList.addAddressRange( addressRange2 ); addressRangeList.addAddressRange( otherAddressRange ); QCOMPARE( addressRangeList.size(), 2 ); QCOMPARE( addressRangeList.first(), AddressRange(addressRange1.start(),otherAddressRange.end()) ); QCOMPARE( addressRangeList.last(), addressRange2 ); // in the middle, with both addressRangeList.clear(); otherAddressRange.set( End1+1, Start2-1 ); addressRangeList.addAddressRange( addressRange1 ); addressRangeList.addAddressRange( addressRange2 ); addressRangeList.addAddressRange( otherAddressRange ); QCOMPARE( addressRangeList.size(), 1 ); QCOMPARE( addressRangeList.first(), AddressRange(addressRange1.start(),addressRange2.end()) ); // in the middle, with last addressRangeList.clear(); otherAddressRange.set( End1+2, Start2-1 ); addressRangeList.addAddressRange( addressRange1 ); addressRangeList.addAddressRange( addressRange2 ); addressRangeList.addAddressRange( otherAddressRange ); QCOMPARE( addressRangeList.size(), 2 ); QCOMPARE( addressRangeList.first(), addressRange1 ); QCOMPARE( addressRangeList.last(), AddressRange(otherAddressRange.start(),addressRange2.end()) ); // behind addressRangeList.clear(); otherAddressRange.setByWidth( End2+1, Width ); addressRangeList.addAddressRange( addressRange1 ); addressRangeList.addAddressRange( addressRange2 ); addressRangeList.addAddressRange( otherAddressRange ); QCOMPARE( addressRangeList.size(), 2 ); QCOMPARE( addressRangeList.first(), addressRange1 ); QCOMPARE( addressRangeList.last(), AddressRange(addressRange2.start(),otherAddressRange.end()) ); }
AddressRange RemovePieceTableChange::apply( PieceTable* pieceTable ) const { const Address oldLast = pieceTable->size() - 1; pieceTable->remove( mRemoveRange ); return AddressRange( mRemoveRange.start(), oldLast ); }
AbstractPieceTableChange* ReplacePieceTableChangeAbstractPieceTableChangeIfTest::createPieceTableChange() { const Piece replacedPiece( AddressRange::fromWidth(Start+ChangeStorageOffset,Width), Piece::ChangeStorage ); ReplacePieceTableChange* pieceTableChange = new ReplacePieceTableChange( AddressRange(Start,End), InsertLength, InsertStorageOffset, PieceList(replacedPiece) ); return pieceTableChange; }
AddressRange JSONConfig::getAddressRangeForFunc(const std::string &func) const { const auto &f = impl->getConfigFunctionByNameOrEmptyFunction(func); auto startAddress = f.getStart(); auto endAddress = f.getEnd(); if (startAddress.isUndefined() || endAddress.isUndefined()) { return NO_ADDRESS_RANGE; } return AddressRange(startAddress.getValue(), endAddress.getValue()); }
void AddressRangeTest::testSubRange() { AddressRange addressRange( Start, End ); AddressRange subRange = addressRange.subRange( AddressRange::fromWidth(Width) ); QCOMPARE( subRange.start(), Start ); QCOMPARE( subRange.end(), End ); subRange = addressRange.subRange( AddressRange(1,Width-1) ); QCOMPARE( subRange.start(), Start+1 ); QCOMPARE( subRange.end(), End ); subRange = addressRange.subRange( AddressRange(0,Width-2) ); QCOMPARE( subRange.start(), Start ); QCOMPARE( subRange.end(), End-1 ); subRange = addressRange.subRange( AddressRange(1,Width-2) ); QCOMPARE( subRange.start(), Start+1 ); QCOMPARE( subRange.end(), End-1 ); }
void AddressRangeTest::testLocalRange() { AddressRange addressRange( Start, End ); AddressRange localRange = addressRange.localRange( AddressRange(Start,End) ); QCOMPARE( localRange.start(), 0 ); QCOMPARE( localRange.end(), Width-1 ); localRange = addressRange.localRange( AddressRange(Start+1,End) ); QCOMPARE( localRange.start(), 1 ); QCOMPARE( localRange.end(), Width-1 ); localRange = addressRange.localRange( AddressRange(Start,End-1) ); QCOMPARE( localRange.start(), 0 ); QCOMPARE( localRange.end(), Width-2 ); localRange = addressRange.localRange( AddressRange(Start+1,End-1) ); QCOMPARE( localRange.start(), 1 ); QCOMPARE( localRange.end(), Width-2 ); }
void IRQs::Write(const IO::common_busses_t& busses) { if(AddressRange() == busses.physical_address) switch(busses.address & 1) { case 0: active.timer = 0; // disable timer break; case 1: to_u8(enabled) = (busses.data & 0x07) ^ 0x07; // set which IRQs are enabled (input is which IRQs are disabled) } }
void IRQs::Read (IO::common_busses_t& busses) { if(AddressRange() == busses.physical_address) switch(busses.address & 1) { case 0: // disable timer on read active.timer = 0; break; case 1: // return which IRQs are disabled (inverse of which are enabled) busses.data = to_u8(enabled) ^ 0x07; } }
std::vector<AddressRange> IdaFrontend::functionAddresses(ByteAddr address) { std::vector<AddressRange> result; ea_t func_ea = checked_cast<ea_t>(address); func_t *function = ::get_func(func_ea); if (!function) { return result; } auto startAddr = checked_cast<ByteAddr>(function->startEA); auto endAddr = checked_cast<ByteAddr>(function->endEA); result.push_back(AddressRange(startAddr, endAddr)); for (int i = 0; i < function->tailqty; ++i) { auto chunkStartAddr = checked_cast<ByteAddr>(function->tails[i].startEA); auto chunkEndAddr = checked_cast<ByteAddr>(function->tails[i].endEA); result.push_back(AddressRange(chunkStartAddr, chunkEndAddr)); } return result; }
void Timer::Write(const IO::common_busses_t& busses) { if(AddressRange() == busses.physical_address) { if(!m_enabled && (busses.data & 0x01)) // if enabling { m_cycle_counter = 0; m_cycle_counter -= 1; // set max value m_timer_counter = m_timer_latch; } m_enabled = busses.data & 0x01; } }
void ReplacePieceTableChangeAbstractPieceTableChangeIfTest::changePieceTable( PieceTable *pieceTable ) { pieceTable->replace( AddressRange(Start,End), InsertLength, InsertStorageOffset ); }
void RevertablePieceTableTest::testRemove() { RevertablePieceTable pieceTable; int changeStarts[6]; int storageId; int storageOffset; bool result; // removing at begin pieceTable.init( BaseSize ); pieceTable.remove( AddressRange(0, Start-1) ); QCOMPARE( pieceTable.size(), BaseSize-Start ); QCOMPARE( pieceTable.changesCount(), 1 ); QCOMPARE( pieceTable.appliedChangesCount(), 1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, 0 ); QVERIFY( result ); QCOMPARE( storageOffset, Start ); QCOMPARE( storageId, (int)Piece::OriginalStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, BaseSize-Start-1 ); QVERIFY( result ); QCOMPARE( storageOffset, BaseSize-1 ); QCOMPARE( storageId, (int)Piece::OriginalStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, BaseSize-Start ); QVERIFY( !result ); // removing at middle pieceTable.init( BaseSize ); pieceTable.remove( AddressRange(Start, End) ); QCOMPARE( pieceTable.size(), BaseSize-Width ); QCOMPARE( pieceTable.changesCount(), 1 ); QCOMPARE( pieceTable.appliedChangesCount(), 1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, Start-1 ); QVERIFY( result ); QCOMPARE( storageOffset, Start-1 ); QCOMPARE( storageId, (int)Piece::OriginalStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, Start ); QVERIFY( result ); QCOMPARE( storageOffset, End+1 ); QCOMPARE( storageId, (int)Piece::OriginalStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, BaseSize-Width-1 ); QVERIFY( result ); QCOMPARE( storageOffset, BaseSize-1 ); QCOMPARE( storageId, (int)Piece::OriginalStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, BaseSize-Width ); QVERIFY( !result ); // removing at end pieceTable.init( BaseSize ); pieceTable.remove( AddressRange(End+1, BaseSize-1) ); QCOMPARE( pieceTable.size(), End+1 ); QCOMPARE( pieceTable.changesCount(), 1 ); QCOMPARE( pieceTable.appliedChangesCount(), 1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, End ); QVERIFY( result ); QCOMPARE( storageOffset, End ); QCOMPARE( storageId, (int)Piece::OriginalStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, End+1 ); QVERIFY( !result ); // removing all pieceTable.init( BaseSize ); pieceTable.remove( AddressRange::fromWidth(BaseSize) ); QCOMPARE( pieceTable.size(), 0 ); QCOMPARE( pieceTable.changesCount(), 1 ); QCOMPARE( pieceTable.appliedChangesCount(), 1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, 0 ); QVERIFY( !result ); // removing a lot: const int pieceCount = 5; const int mid = (pieceCount+1)/2; const int midPieceOffset = BaseSize * (mid-1); const int fullSize = pieceCount * BaseSize; // for this five equally sized pieces are inserted, reverse to offset in ChangeStore for( int i=0; i<pieceCount; ++i ) changeStarts[pieceCount-i] = BaseSize*i; // removing inside a piece in the middle fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(midPieceOffset+Start, Width) ); QCOMPARE( pieceTable.size(), fullSize-Width ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset+Start-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid]+Start-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset+Start ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid]+End+1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-Width-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-Width ); QVERIFY( !result ); // removing start of a piece in the middle fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(midPieceOffset, Start) ); QCOMPARE( pieceTable.size(), fullSize-Start ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid-1]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid]+Start ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-Start-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-Start ); QVERIFY( !result ); // removing end of a piece in the middle fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(midPieceOffset+End+1, BaseSize-(End+1)) ); QCOMPARE( pieceTable.size(), fullSize-(BaseSize-End-1) ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset+End ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid]+End ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset+End+1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid+1] ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-(BaseSize-End-1)-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-(BaseSize-End-1) ); QVERIFY( !result ); // removing whole piece in the middle fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(midPieceOffset, BaseSize) ); QCOMPARE( pieceTable.size(), fullSize-BaseSize ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid-1]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid+1] ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize ); QVERIFY( !result ); // removing whole piece and start of next in the middke fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(midPieceOffset, BaseSize+Start) ); QCOMPARE( pieceTable.size(), fullSize-BaseSize-Start ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid-1]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid+1]+Start ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-Start-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-Start ); QVERIFY( !result ); // removing whole piece and end of previous in the middle fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(midPieceOffset-(BaseSize-End-1), BaseSize+BaseSize-(End+1)) ); QCOMPARE( pieceTable.size(), fullSize-BaseSize-(BaseSize-End-1) ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset-(BaseSize-End-1)-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid-1]+End ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset-(BaseSize-End-1) ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid+1] ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-(BaseSize-End-1)-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-(BaseSize-End-1) ); QVERIFY( !result ); // removing end of previous, whole and start of next in the middle fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(midPieceOffset-(BaseSize-End-1), Start+BaseSize+BaseSize-(End+1)) ); QCOMPARE( pieceTable.size(), fullSize-BaseSize-(BaseSize-End-1)-Start ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset-(BaseSize-End-1)-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid-1]+BaseSize-(BaseSize-End-1)-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, midPieceOffset-(BaseSize-End-1) ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[mid+1]+Start ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-(BaseSize-End-1)-Start-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-(BaseSize-End-1)-Start ); QVERIFY( !result ); // removing start of piece at start fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(Start) ); QCOMPARE( pieceTable.size(), fullSize-Start ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, 0 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[1]+Start ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-Start-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-Start ); QVERIFY( !result ); // removing whole piece at start fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(BaseSize) ); QCOMPARE( pieceTable.size(), fullSize-BaseSize ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, 0 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[2] ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize ); QVERIFY( !result ); // removing whole piece and start of next at start fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(BaseSize+Start) ); QCOMPARE( pieceTable.size(), fullSize-BaseSize-Start ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, 0 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[2]+Start ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-Start-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-Start ); QVERIFY( !result ); // removing end of piece at end fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(fullSize-BaseSize+End+1, BaseSize-(End+1)) ); QCOMPARE( pieceTable.size(), fullSize-(BaseSize-End-1) ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize+End ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount]+End ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-(BaseSize-End-1) ); QVERIFY( !result ); // removing whole piece at end fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(fullSize-BaseSize, BaseSize) ); QCOMPARE( pieceTable.size(), fullSize-BaseSize ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount-1]+BaseSize-1 ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize ); QVERIFY( !result ); // removing whole piece and end of previous at end fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(fullSize-BaseSize-(BaseSize-End-1), BaseSize+BaseSize-(End+1)) ); QCOMPARE( pieceTable.size(), fullSize-BaseSize-(BaseSize-End-1) ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-(BaseSize-End-1)-1 ); QVERIFY( result ); QCOMPARE( storageOffset, changeStarts[pieceCount-1]+End ); QCOMPARE( storageId, (int)Piece::ChangeStorage ); result = pieceTable.getStorageData( &storageId, &storageOffset, fullSize-BaseSize-(BaseSize-End-1) ); QVERIFY( !result ); // removing all fillWithSize( &pieceTable, pieceCount ); pieceTable.remove( AddressRange::fromWidth(fullSize) ); QCOMPARE( pieceTable.size(), 0 ); QCOMPARE( pieceTable.changesCount(), pieceCount+1 ); QCOMPARE( pieceTable.appliedChangesCount(), pieceCount+1 ); result = pieceTable.getStorageData( &storageId, &storageOffset, 0 ); QVERIFY( !result ); }
void Timer::Read (IO::common_busses_t& busses) { if(AddressRange() == busses.physical_address) busses.data = m_timer_counter; }
AddressRange RemovePieceTableChange::revert( PieceTable* pieceTable ) const { pieceTable->insert( mRemoveRange.start(), mRemovedPieces ); return AddressRange( mRemoveRange.start(), pieceTable->size()-1 ); }