From 0befcc026be9e4f6c40f8771c7f26f767ebddbf7 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Mon, 30 Sep 2024 11:50:17 -0700 Subject: Erasing streams works, stream map building works. --- src/stable/myriad.cpp | 66 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 21 deletions(-) (limited to 'src/stable/myriad.cpp') diff --git a/src/stable/myriad.cpp b/src/stable/myriad.cpp index eba1ebf..85daa0d 100644 --- a/src/stable/myriad.cpp +++ b/src/stable/myriad.cpp @@ -252,6 +252,41 @@ int32_t Bu::Myriad::getTotalUnusedBytes(int32_t iAssumeBlockSize ) const return iTotal; } +Bu::BitString Bu::Myriad::buildBlockUseMap() const +{ + Bu::MutexLocker l( mAccess ); + Bu::BitString bsMap( iBlockCount ); + bsMap.fill(); + for( IndexList::const_iterator i = lFreeBlocks.begin(); i; i++ ) + { + bsMap.setBit( *i, false ); + } + return bsMap; +} + +Bu::Array Bu::Myriad::buildBlockMap() const +{ + Bu::MutexLocker l( mAccess ); + Bu::Array bm( iBlockCount ); + for( int j = 0; j < iBlockCount; j++ ) + { + bm.append( -1 ); + } + Bu::MutexLocker l2( mhStream ); + for( StreamHash::const_iterator iStream = hStream.begin(); + iStream; iStream++ ) + { + int32_t iId = iStream.getKey(); + Stream *pStream = iStream.getValue(); + for( Bu::Array::const_iterator iBlock = + pStream->aBlocks.begin(); iBlock; iBlock++ ) + { + bm[*iBlock] = iId; + } + } + return bm; +} + void Bu::Myriad::sync() { writeHeader(); @@ -259,7 +294,7 @@ void Bu::Myriad::sync() bool Bu::Myriad::loadMyriad() { - Bu::println("Load myriad!"); + //Bu::println("Load myriad!"); char sMagicCode[4]; rBacking.setPos( 0 ); MyriadRead( sMagicCode, 4 ); @@ -362,7 +397,7 @@ bool Bu::Myriad::loadMyriad() } lFreeBlocks = hUnusedBlocks.getKeys(); - Bu::println("Free blocks: %1").arg( lFreeBlocks.getSize() ); + //Bu::println("Free blocks: %1").arg( lFreeBlocks.getSize() ); return true; } @@ -389,22 +424,14 @@ void Bu::Myriad::createMyriad( int32_t iBlockSize, int32_t iPreallocateBlocks ) // plus one block index. int iHeaderStreamBlocks = blkDiv(iHeaderStreamBytes+4, iBlockSize ); - Bu::println("Initial estimate: %1 bytes / %2 cur blocks, %3 computed blocks (%4 target bytes).") - .arg( iHeaderStreamBytes+(iHeaderStreamBlocks*4) ) - .arg( iHeaderStreamBlocks ) - .arg( blkDiv((iHeaderStreamBytes+(iHeaderStreamBlocks*4)), iBlockSize) ) - .arg( iHeaderStreamBlocks*iBlockSize ); + //Bu::println("Initial estimate: %1 bytes / %2 cur blocks, %3 computed blocks (%4 target bytes).").arg( iHeaderStreamBytes+(iHeaderStreamBlocks*4) ).arg( iHeaderStreamBlocks ).arg( blkDiv((iHeaderStreamBytes+(iHeaderStreamBlocks*4)), iBlockSize) ).arg( iHeaderStreamBlocks*iBlockSize ); while( iHeaderStreamBytes+(iHeaderStreamBlocks*4) > iHeaderStreamBlocks*iBlockSize ) { iHeaderStreamBlocks = blkDiv((iHeaderStreamBytes+((iHeaderStreamBlocks+1)*4)), iBlockSize); if( iHeaderStreamBlocks > 100 ) break; - Bu::println(" Adjustment: %1 bytes / %2 cur blocks, %3 computed blocks (%4 target bytes).") - .arg( iHeaderStreamBytes+(iHeaderStreamBlocks*4) ) - .arg( iHeaderStreamBlocks ) - .arg( blkDiv((iHeaderStreamBytes+(iHeaderStreamBlocks*4)), iBlockSize) ) - .arg( iHeaderStreamBlocks*iBlockSize ); + //Bu::println(" Adjustment: %1 bytes / %2 cur blocks, %3 computed blocks (%4 target bytes).").arg( iHeaderStreamBytes+(iHeaderStreamBlocks*4) ).arg( iHeaderStreamBlocks ).arg( blkDiv((iHeaderStreamBytes+(iHeaderStreamBlocks*4)), iBlockSize) ).arg( iHeaderStreamBlocks*iBlockSize ); } if( iPreallocateBlocks > iHeaderStreamBlocks ) @@ -459,7 +486,7 @@ void Bu::Myriad::writeHeader() Bu::MutexLocker l( mAccess ); if( !rBacking.isWritable() ) return; - Bu::println("Writing stream breakdown:"); + //Bu::println("Writing stream breakdown:"); Bu::MemBuf mbHeader; { Bu::MutexLocker l2( mhStream ); @@ -488,7 +515,7 @@ void Bu::Myriad::writeHeader() psHeader->iSize = iHdrStreamSize; } - Bu::println("Computed header size: %1 bytes. Ver=%2, Bpi=%3, BlockSize=%4").arg( iHdrStreamSize ).arg( 1 ).arg( 32 ).arg( iBlockSize ); + //Bu::println("Computed header size: %1 bytes. Ver=%2, Bpi=%3, BlockSize=%4").arg( iHdrStreamSize ).arg( 1 ).arg( 32 ).arg( iBlockSize ); uint8_t uVer = 1; uint8_t uBpi = 32; @@ -515,10 +542,7 @@ void Bu::Myriad::writeHeader() mbHeader.write( &uStreamSize, 4 ); Bu::Array aBlocks = pStream->getBlockList(); - Bu::println(" Stream %1 is %2 bytes %3 blocks (%4 blocks computed)") - .arg( *i ).arg( uStreamSize ) - .arg( aBlocks.getSize() ) - .arg( Bu::blkDiv( (int)uStreamSize, (int)iBlockSize ) ); + //Bu::println(" Stream %1 is %2 bytes %3 blocks (%4 blocks computed)").arg( *i ).arg( uStreamSize ).arg( aBlocks.getSize() ).arg( Bu::blkDiv( (int)uStreamSize, (int)iBlockSize ) ); for( Bu::Array::iterator i = aBlocks.begin(); i; i++ ) { @@ -556,15 +580,15 @@ int32_t Bu::Myriad::__calcHeaderSize() } } - Bu::println("HeaderCalc:"); - Bu::println(" Base (no header stream): %1").arg( iHdrSize ); + //Bu::println("HeaderCalc:"); + //Bu::println(" Base (no header stream): %1").arg( iHdrSize ); int32_t iNewSize = iHdrSize; int32_t iOldSize; do { iOldSize = iNewSize; iNewSize = iHdrSize + Bu::blkDiv(iNewSize, iBlockSize)*4; - Bu::println(" Recomp: %1").arg( iNewSize ); + //Bu::println(" Recomp: %1").arg( iNewSize ); } while( iOldSize != iNewSize ); return iNewSize; -- cgit v1.2.3