diff options
Diffstat (limited to 'src/stable')
| -rw-r--r-- | src/stable/file.cpp | 14 | ||||
| -rw-r--r-- | src/stable/myriad.cpp | 109 | ||||
| -rw-r--r-- | src/stable/myriad.h | 13 |
3 files changed, 83 insertions, 53 deletions
diff --git a/src/stable/file.cpp b/src/stable/file.cpp index 33420f1..14e4f3c 100644 --- a/src/stable/file.cpp +++ b/src/stable/file.cpp | |||
| @@ -91,7 +91,11 @@ Bu::size Bu::File::tell() | |||
| 91 | if( fd < 0 ) | 91 | if( fd < 0 ) |
| 92 | throw FileException("File not open."); | 92 | throw FileException("File not open."); |
| 93 | 93 | ||
| 94 | #ifdef USE_64BIT_IO | ||
| 95 | return lseek64( fd, 0, SEEK_CUR ); | ||
| 96 | #else | ||
| 94 | return lseek( fd, 0, SEEK_CUR ); | 97 | return lseek( fd, 0, SEEK_CUR ); |
| 98 | #endif | ||
| 95 | } | 99 | } |
| 96 | 100 | ||
| 97 | void Bu::File::seek( Bu::size offset ) | 101 | void Bu::File::seek( Bu::size offset ) |
| @@ -99,7 +103,11 @@ void Bu::File::seek( Bu::size offset ) | |||
| 99 | if( fd < 0 ) | 103 | if( fd < 0 ) |
| 100 | throw FileException("File not open."); | 104 | throw FileException("File not open."); |
| 101 | 105 | ||
| 106 | #ifdef USE_64BIT_IO | ||
| 107 | lseek64( fd, offset, SEEK_CUR ); | ||
| 108 | #else | ||
| 102 | lseek( fd, offset, SEEK_CUR ); | 109 | lseek( fd, offset, SEEK_CUR ); |
| 110 | #endif | ||
| 103 | bEos = false; | 111 | bEos = false; |
| 104 | } | 112 | } |
| 105 | 113 | ||
| @@ -108,7 +116,11 @@ void Bu::File::setPos( Bu::size pos ) | |||
| 108 | if( fd < 0 ) | 116 | if( fd < 0 ) |
| 109 | throw FileException("File not open."); | 117 | throw FileException("File not open."); |
| 110 | 118 | ||
| 119 | #ifdef USE_64BIT_IO | ||
| 120 | lseek64( fd, pos, SEEK_SET ); | ||
| 121 | #else | ||
| 111 | lseek( fd, pos, SEEK_SET ); | 122 | lseek( fd, pos, SEEK_SET ); |
| 123 | #endif | ||
| 112 | bEos = false; | 124 | bEos = false; |
| 113 | } | 125 | } |
| 114 | 126 | ||
| @@ -117,7 +129,7 @@ void Bu::File::setPosEnd( Bu::size pos ) | |||
| 117 | if( fd < 0 ) | 129 | if( fd < 0 ) |
| 118 | throw FileException("File not open."); | 130 | throw FileException("File not open."); |
| 119 | 131 | ||
| 120 | lseek( fd, pos, SEEK_END ); | 132 | lseek64( fd, pos, SEEK_END ); |
| 121 | bEos = false; | 133 | bEos = false; |
| 122 | } | 134 | } |
| 123 | 135 | ||
diff --git a/src/stable/myriad.cpp b/src/stable/myriad.cpp index 7246df3..4f65583 100644 --- a/src/stable/myriad.cpp +++ b/src/stable/myriad.cpp | |||
| @@ -84,8 +84,9 @@ void Bu::Myriad::sync() | |||
| 84 | void Bu::Myriad::initialize() | 84 | void Bu::Myriad::initialize() |
| 85 | { | 85 | { |
| 86 | MutexLocker mLock( mHeader ); | 86 | MutexLocker mLock( mHeader ); |
| 87 | lFreeBlocks.clear(); | ||
| 87 | sStore.setPosEnd( 0 ); | 88 | sStore.setPosEnd( 0 ); |
| 88 | int iSize = sStore.tell(); | 89 | Bu::size iSize = sStore.tell(); |
| 89 | sStore.setPos( 0 ); | 90 | sStore.setPos( 0 ); |
| 90 | 91 | ||
| 91 | unsigned char buf[4]; | 92 | unsigned char buf[4]; |
| @@ -131,8 +132,11 @@ void Bu::Myriad::initialize() | |||
| 131 | { | 132 | { |
| 132 | pFakeHdr->aBlocks.append( j ); | 133 | pFakeHdr->aBlocks.append( j ); |
| 133 | } | 134 | } |
| 134 | 135 | ||
| 135 | bsBlockUsed.setSize( iBlocks, true ); | 136 | // sio << "Blocks: " << iBlocks << " (size = " << iSize << "/" << iBlockSize |
| 137 | // << ")" << sio.nl; | ||
| 138 | Bu::BitString bsBlockUsed( iBlocks, false ); | ||
| 139 | bsBlockUsed.clear(); | ||
| 136 | 140 | ||
| 137 | // bool bCanSkip = false; // Can skip around, post initial header stream i/o | 141 | // bool bCanSkip = false; // Can skip around, post initial header stream i/o |
| 138 | MyriadStream *pIn = new MyriadStream( *this, pFakeHdr ); | 142 | MyriadStream *pIn = new MyriadStream( *this, pFakeHdr ); |
| @@ -174,12 +178,21 @@ void Bu::Myriad::initialize() | |||
| 174 | } | 178 | } |
| 175 | delete pIn; | 179 | delete pIn; |
| 176 | 180 | ||
| 177 | //sio << "Myriad: Blocks used: " << bsBlockUsed.toString() << sio.nl; | 181 | for( int j = 0; j < iBlocks; j++ ) |
| 182 | { | ||
| 183 | if( bsBlockUsed.getBit( j ) == false ) | ||
| 184 | { | ||
| 185 | // sio << "Preinitialized block " << j << " is free." << sio.nl; | ||
| 186 | lFreeBlocks.append( j ); | ||
| 187 | } | ||
| 188 | } | ||
| 189 | // sio << "Myriad: Blocks used: " << bsBlockUsed.toString() << sio.nl; | ||
| 178 | } | 190 | } |
| 179 | 191 | ||
| 180 | void Bu::Myriad::initialize( int iBlockSize, int iPreAllocate ) | 192 | void Bu::Myriad::initialize( int iBlockSize, int iPreAllocate ) |
| 181 | { | 193 | { |
| 182 | MutexLocker mLock( mHeader ); | 194 | MutexLocker mLock( mHeader ); |
| 195 | lFreeBlocks.clear(); | ||
| 183 | 196 | ||
| 184 | for( StreamArray::iterator i = aStreams.begin(); i; i++ ) | 197 | for( StreamArray::iterator i = aStreams.begin(); i; i++ ) |
| 185 | { | 198 | { |
| @@ -207,7 +220,7 @@ void Bu::Myriad::initialize( int iBlockSize, int iPreAllocate ) | |||
| 207 | //sio << "Myriad: iHeaderSize=" << iHeaderSize << ", iBlockSize=" | 220 | //sio << "Myriad: iHeaderSize=" << iHeaderSize << ", iBlockSize=" |
| 208 | // << iBlockSize << ", iHeaderBlocks=" << iHeaderBlocks << sio.nl; | 221 | // << iBlockSize << ", iHeaderBlocks=" << iHeaderBlocks << sio.nl; |
| 209 | 222 | ||
| 210 | bsBlockUsed.setSize( iPreAllocate, true ); | 223 | // bsBlockUsed.setSize( iPreAllocate, true ); |
| 211 | iUsed++; | 224 | iUsed++; |
| 212 | 225 | ||
| 213 | char *pBlock = new char[iBlockSize]; | 226 | char *pBlock = new char[iBlockSize]; |
| @@ -255,10 +268,16 @@ void Bu::Myriad::initialize( int iBlockSize, int iPreAllocate ) | |||
| 255 | pStr->iSize = iHeaderSize; | 268 | pStr->iSize = iHeaderSize; |
| 256 | for( int j = 0; j < iHeaderBlocks; j++ ) | 269 | for( int j = 0; j < iHeaderBlocks; j++ ) |
| 257 | { | 270 | { |
| 271 | // sio << "Started block " << j << " is header." << sio.nl; | ||
| 258 | pStr->aBlocks.append( j ); | 272 | pStr->aBlocks.append( j ); |
| 259 | bsBlockUsed.setBit( j ); | 273 | // bsBlockUsed.setBit( j ); |
| 260 | iUsed++; | 274 | iUsed++; |
| 261 | } | 275 | } |
| 276 | for( int j = iHeaderBlocks; j < this->iBlocks; j++ ) | ||
| 277 | { | ||
| 278 | // sio << "Started block " << j << " is free." << sio.nl; | ||
| 279 | lFreeBlocks.append( j ); | ||
| 280 | } | ||
| 262 | 281 | ||
| 263 | aStreams.append( pStr ); | 282 | aStreams.append( pStr ); |
| 264 | 283 | ||
| @@ -302,7 +321,7 @@ void Bu::Myriad::updateHeader() | |||
| 302 | // sio << "Myriad: updateHeader: Appending block " << iBlock | 321 | // sio << "Myriad: updateHeader: Appending block " << iBlock |
| 303 | // << " to header." << sio.nl; | 322 | // << " to header." << sio.nl; |
| 304 | aStreams[0]->aBlocks.append( iBlock ); | 323 | aStreams[0]->aBlocks.append( iBlock ); |
| 305 | bsBlockUsed.setBit( iBlock ); | 324 | // bsBlockUsed.setBit( iBlock ); |
| 306 | iUsed++; | 325 | iUsed++; |
| 307 | iHeaderSize += 4; | 326 | iHeaderSize += 4; |
| 308 | iNewBlocks = blkDiv( iHeaderSize, iBlockSize ); | 327 | iNewBlocks = blkDiv( iHeaderSize, iBlockSize ); |
| @@ -361,7 +380,7 @@ int Bu::Myriad::createStream( int iPreAllocate ) | |||
| 361 | int iFreeBlock = findEmptyBlock(); | 380 | int iFreeBlock = findEmptyBlock(); |
| 362 | // sio << "Myriad: Adding block " << iFreeBlock << sio.nl; | 381 | // sio << "Myriad: Adding block " << iFreeBlock << sio.nl; |
| 363 | pStr->aBlocks.append( iFreeBlock ); | 382 | pStr->aBlocks.append( iFreeBlock ); |
| 364 | bsBlockUsed.setBit( iFreeBlock ); | 383 | // bsBlockUsed.setBit( iFreeBlock ); |
| 365 | iUsed++; | 384 | iUsed++; |
| 366 | } | 385 | } |
| 367 | 386 | ||
| @@ -408,7 +427,7 @@ int Bu::Myriad::createStreamWithId( int iId, int iPreAllocate ) | |||
| 408 | int iFreeBlock = findEmptyBlock(); | 427 | int iFreeBlock = findEmptyBlock(); |
| 409 | // sio << "Myriad: Adding block " << iFreeBlock << sio.nl; | 428 | // sio << "Myriad: Adding block " << iFreeBlock << sio.nl; |
| 410 | pStr->aBlocks.append( iFreeBlock ); | 429 | pStr->aBlocks.append( iFreeBlock ); |
| 411 | bsBlockUsed.setBit( iFreeBlock ); | 430 | // bsBlockUsed.setBit( iFreeBlock ); |
| 412 | iUsed++; | 431 | iUsed++; |
| 413 | } | 432 | } |
| 414 | 433 | ||
| @@ -422,26 +441,15 @@ int Bu::Myriad::findEmptyBlock() | |||
| 422 | { | 441 | { |
| 423 | bHeaderChanged = true; | 442 | bHeaderChanged = true; |
| 424 | 443 | ||
| 425 | for( int j = 0; j < bsBlockUsed.getSize(); j++ ) | 444 | if( lFreeBlocks.isEmpty() ) |
| 426 | { | 445 | { |
| 427 | if( bsBlockUsed.getBit( j ) == false ) | 446 | sStore.setSize( (iBlocks+1)*(Bu::size)iBlockSize ); |
| 428 | return j; | 447 | return iBlocks++; |
| 448 | } | ||
| 449 | else | ||
| 450 | { | ||
| 451 | return lFreeBlocks.dequeue(); | ||
| 429 | } | 452 | } |
| 430 | // sio << "Myriad: findEmptyBlock(): No empty blocks, adding new one." << sio.nl; | ||
| 431 | |||
| 432 | bsBlockUsed.setSize( bsBlockUsed.getSize()+1, false ); | ||
| 433 | /* | ||
| 434 | sStore.setPos( iBlockSize*iBlocks ); | ||
| 435 | |||
| 436 | char *pBlock = new char[iBlockSize]; | ||
| 437 | memset( pBlock, 0, iBlockSize ); | ||
| 438 | sStore.write( pBlock, iBlockSize ); | ||
| 439 | delete[] pBlock; | ||
| 440 | */ | ||
| 441 | |||
| 442 | sStore.setSize( (iBlocks+1)*iBlockSize ); | ||
| 443 | |||
| 444 | return iBlocks++; | ||
| 445 | } | 453 | } |
| 446 | 454 | ||
| 447 | void Bu::Myriad::deleteStream( int iId ) | 455 | void Bu::Myriad::deleteStream( int iId ) |
| @@ -461,7 +469,8 @@ void Bu::Myriad::deleteStream( int iId ) | |||
| 461 | Stream *pStream = *i; | 469 | Stream *pStream = *i; |
| 462 | for( BlockArray::iterator j = pStream->aBlocks.begin(); j; j++ ) | 470 | for( BlockArray::iterator j = pStream->aBlocks.begin(); j; j++ ) |
| 463 | { | 471 | { |
| 464 | bsBlockUsed.setBit( *j, false ); | 472 | lFreeBlocks.append( *j ); |
| 473 | // bsBlockUsed.setBit( *j, false ); | ||
| 465 | iUsed--; | 474 | iUsed--; |
| 466 | } | 475 | } |
| 467 | aStreams.erase( i ); | 476 | aStreams.erase( i ); |
| @@ -536,11 +545,11 @@ int Bu::Myriad::getNumUsedBlocks() | |||
| 536 | return iUsed; | 545 | return iUsed; |
| 537 | } | 546 | } |
| 538 | 547 | ||
| 539 | int Bu::Myriad::getTotalUsedBytes() | 548 | Bu::size Bu::Myriad::getTotalUsedBytes() |
| 540 | { | 549 | { |
| 541 | MutexLocker mLock( mHeader ); | 550 | MutexLocker mLock( mHeader ); |
| 542 | 551 | ||
| 543 | int iTotalSize = 0; | 552 | Bu::size iTotalSize = 0; |
| 544 | for( StreamArray::iterator i = aStreams.begin(); i; i++ ) | 553 | for( StreamArray::iterator i = aStreams.begin(); i; i++ ) |
| 545 | { | 554 | { |
| 546 | iTotalSize += (*i)->iSize; | 555 | iTotalSize += (*i)->iSize; |
| @@ -548,23 +557,23 @@ int Bu::Myriad::getTotalUsedBytes() | |||
| 548 | return iTotalSize; | 557 | return iTotalSize; |
| 549 | } | 558 | } |
| 550 | 559 | ||
| 551 | int Bu::Myriad::getTotalUnusedBytes() | 560 | Bu::size Bu::Myriad::getTotalUnusedBytes() |
| 552 | { | 561 | { |
| 553 | MutexLocker mLock( mHeader ); | 562 | MutexLocker mLock( mHeader ); |
| 554 | 563 | ||
| 555 | int iTotalSize = (iBlocks-iUsed)*iBlockSize; | 564 | Bu::size iTotalSize = (iBlocks-iUsed)*iBlockSize; |
| 556 | for( StreamArray::iterator i = aStreams.begin(); i; i++ ) | 565 | for( StreamArray::iterator i = aStreams.begin(); i; i++ ) |
| 557 | { | 566 | { |
| 558 | iTotalSize += iBlockSize - ((*i)->iSize%iBlockSize); | 567 | iTotalSize += iBlockSize - ((Bu::size)(*i)->iSize%iBlockSize); |
| 559 | } | 568 | } |
| 560 | return iTotalSize; | 569 | return iTotalSize; |
| 561 | } | 570 | } |
| 562 | 571 | ||
| 563 | int Bu::Myriad::getTotalUnusedBytes( int iFakeBlockSize ) | 572 | Bu::size Bu::Myriad::getTotalUnusedBytes( int iFakeBlockSize ) |
| 564 | { | 573 | { |
| 565 | MutexLocker mLock( mHeader ); | 574 | MutexLocker mLock( mHeader ); |
| 566 | 575 | ||
| 567 | int iTotalSize = (iBlocks-iUsed)*iFakeBlockSize; | 576 | Bu::size iTotalSize = (iBlocks-iUsed)*iFakeBlockSize; |
| 568 | for( StreamArray::iterator i = aStreams.begin(); i; i++ ) | 577 | for( StreamArray::iterator i = aStreams.begin(); i; i++ ) |
| 569 | { | 578 | { |
| 570 | iTotalSize += iFakeBlockSize - ((*i)->iSize%iFakeBlockSize); | 579 | iTotalSize += iFakeBlockSize - ((*i)->iSize%iFakeBlockSize); |
| @@ -592,7 +601,7 @@ Bu::Myriad::Block *Bu::Myriad::getBlock( int iBlock ) | |||
| 592 | // << iBlockSize*iBlock << "-" << iBlockSize*(iBlock+1) << sio.nl; | 601 | // << iBlockSize*iBlock << "-" << iBlockSize*(iBlock+1) << sio.nl; |
| 593 | Block *pBlock = new Block; | 602 | Block *pBlock = new Block; |
| 594 | pBlock->pData = new char[iBlockSize]; | 603 | pBlock->pData = new char[iBlockSize]; |
| 595 | sStore.setPos( iBlockSize * iBlock ); | 604 | sStore.setPos( iBlockSize * (Bu::size)iBlock ); |
| 596 | sStore.read( pBlock->pData, iBlockSize ); | 605 | sStore.read( pBlock->pData, iBlockSize ); |
| 597 | pBlock->bChanged = false; | 606 | pBlock->bChanged = false; |
| 598 | pBlock->iBlockIndex = iBlock; | 607 | pBlock->iBlockIndex = iBlock; |
| @@ -623,7 +632,7 @@ void Bu::Myriad::syncBlock( Block *pBlock ) | |||
| 623 | if( pBlock->bChanged ) | 632 | if( pBlock->bChanged ) |
| 624 | { | 633 | { |
| 625 | // sio << "Myriad: - Block changed, writing back to stream." << sio.nl; | 634 | // sio << "Myriad: - Block changed, writing back to stream." << sio.nl; |
| 626 | sStore.setPos( iBlockSize * pBlock->iBlockIndex ); | 635 | sStore.setPos( iBlockSize * (Bu::size)pBlock->iBlockIndex ); |
| 627 | sStore.write( pBlock->pData, iBlockSize ); | 636 | sStore.write( pBlock->pData, iBlockSize ); |
| 628 | pBlock->bChanged = false; | 637 | pBlock->bChanged = false; |
| 629 | } | 638 | } |
| @@ -635,8 +644,8 @@ int Bu::Myriad::streamAddBlock( Stream *pStream ) | |||
| 635 | 644 | ||
| 636 | int iBlock = findEmptyBlock(); | 645 | int iBlock = findEmptyBlock(); |
| 637 | pStream->aBlocks.append( iBlock ); | 646 | pStream->aBlocks.append( iBlock ); |
| 638 | bsBlockUsed.setBit( iBlock ); | 647 | // bsBlockUsed.setBit( iBlock ); |
| 639 | bHeaderChanged = true; | 648 | // bHeaderChanged = true; |
| 640 | iUsed++; | 649 | iUsed++; |
| 641 | return iBlock; | 650 | return iBlock; |
| 642 | } | 651 | } |
| @@ -655,11 +664,12 @@ void Bu::Myriad::setStreamSize( Stream *pStream, long iSize ) | |||
| 655 | for( int iNewSize = pStream->aBlocks.getSize()*iBlockSize; | 664 | for( int iNewSize = pStream->aBlocks.getSize()*iBlockSize; |
| 656 | iNewSize-iBlockSize > iSize; iNewSize -= iBlockSize ) | 665 | iNewSize-iBlockSize > iSize; iNewSize -= iBlockSize ) |
| 657 | { | 666 | { |
| 658 | if( bsBlockUsed.getBit( pStream->aBlocks.last() ) ) | 667 | // if( bsBlockUsed.getBit( pStream->aBlocks.last() ) ) |
| 659 | iUsed--; | 668 | iUsed--; |
| 660 | else | 669 | // else |
| 661 | sio << "Unused block used in stream? " << pStream->aBlocks.last() << sio.nl; | 670 | // sio << "Unused block used in stream? " << pStream->aBlocks.last() << sio.nl; |
| 662 | bsBlockUsed.setBit( pStream->aBlocks.last(), false ); | 671 | lFreeBlocks.enqueue( pStream->aBlocks.last() ); |
| 672 | // bsBlockUsed.setBit( pStream->aBlocks.last(), false ); | ||
| 663 | pStream->aBlocks.eraseLast(); | 673 | pStream->aBlocks.eraseLast(); |
| 664 | } | 674 | } |
| 665 | pStream->iSize = iSize; | 675 | pStream->iSize = iSize; |
| @@ -674,8 +684,8 @@ void Bu::Myriad::setStreamSize( Stream *pStream, long iSize ) | |||
| 674 | //streamAddBlock( pStream ); | 684 | //streamAddBlock( pStream ); |
| 675 | int iBlock = findEmptyBlock(); | 685 | int iBlock = findEmptyBlock(); |
| 676 | pStream->aBlocks.append( iBlock ); | 686 | pStream->aBlocks.append( iBlock ); |
| 677 | bsBlockUsed.setBit( iBlock ); | 687 | // bsBlockUsed.setBit( iBlock ); |
| 678 | bHeaderChanged = true; | 688 | // bHeaderChanged = true; |
| 679 | iUsed++; | 689 | iUsed++; |
| 680 | } | 690 | } |
| 681 | pStream->iSize = iSize; | 691 | pStream->iSize = iSize; |
| @@ -712,8 +722,13 @@ bool Bu::Myriad::isMyriad( Bu::Stream &sStore, uint8_t &uTmp ) | |||
| 712 | return true; | 722 | return true; |
| 713 | } | 723 | } |
| 714 | 724 | ||
| 715 | const Bu::BitString &Bu::Myriad::getBlocksUsed() const | 725 | const Bu::BitString Bu::Myriad::getBlocksUsed() const |
| 716 | { | 726 | { |
| 717 | return bsBlockUsed; | 727 | Bu::BitString bs( iBlocks, false ); |
| 728 | for( int j = 0; j < iBlocks; j++ ) | ||
| 729 | bs.setBit( j ); | ||
| 730 | for( IndexList::const_iterator i = lFreeBlocks.begin(); i; i++ ) | ||
| 731 | bs.setBit( *i, false ); | ||
| 732 | return bs; | ||
| 718 | } | 733 | } |
| 719 | 734 | ||
diff --git a/src/stable/myriad.h b/src/stable/myriad.h index 80b5c2b..6b1db41 100644 --- a/src/stable/myriad.h +++ b/src/stable/myriad.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include "bu/array.h" | 14 | #include "bu/array.h" |
| 15 | #include "bu/hash.h" | 15 | #include "bu/hash.h" |
| 16 | #include "bu/mutex.h" | 16 | #include "bu/mutex.h" |
| 17 | #include "bu/extratypes.h" | ||
| 17 | 18 | ||
| 18 | namespace Bu | 19 | namespace Bu |
| 19 | { | 20 | { |
| @@ -139,9 +140,9 @@ namespace Bu | |||
| 139 | int getBlockSize(); | 140 | int getBlockSize(); |
| 140 | int getNumBlocks(); | 141 | int getNumBlocks(); |
| 141 | int getNumUsedBlocks(); | 142 | int getNumUsedBlocks(); |
| 142 | int getTotalUsedBytes(); | 143 | Bu::size getTotalUsedBytes(); |
| 143 | int getTotalUnusedBytes(); | 144 | Bu::size getTotalUnusedBytes(); |
| 144 | int getTotalUnusedBytes( int iFakeBlockSize ); | 145 | Bu::size getTotalUnusedBytes( int iFakeBlockSize ); |
| 145 | 146 | ||
| 146 | /** | 147 | /** |
| 147 | * Syncronize the header data, etc. with the storage stream. It's not | 148 | * Syncronize the header data, etc. with the storage stream. It's not |
| @@ -163,7 +164,7 @@ namespace Bu | |||
| 163 | */ | 164 | */ |
| 164 | static bool isMyriad( Bu::Stream &sStore ); | 165 | static bool isMyriad( Bu::Stream &sStore ); |
| 165 | 166 | ||
| 166 | const Bu::BitString &getBlocksUsed() const; | 167 | const Bu::BitString getBlocksUsed() const; |
| 167 | 168 | ||
| 168 | private: | 169 | private: |
| 169 | /** | 170 | /** |
| @@ -219,7 +220,9 @@ namespace Bu | |||
| 219 | int iBlockSize; | 220 | int iBlockSize; |
| 220 | int iBlocks; | 221 | int iBlocks; |
| 221 | int iUsed; | 222 | int iUsed; |
| 222 | Bu::BitString bsBlockUsed; | 223 | typedef Bu::List<int> IndexList; |
| 224 | IndexList lFreeBlocks; | ||
| 225 | // Bu::BitString bsBlockUsed; | ||
| 223 | StreamArray aStreams; | 226 | StreamArray aStreams; |
| 224 | typedef Bu::Hash<int, Block *> BlockHash; | 227 | typedef Bu::Hash<int, Block *> BlockHash; |
| 225 | BlockHash hActiveBlocks; | 228 | BlockHash hActiveBlocks; |
