mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-27 19:24:08 +00:00
Merge branch 'staged' into dev
This commit is contained in:
commit
7995d4806d
|
@ -595,12 +595,10 @@ MdictParser::HeadWordIndex MdictParser::splitHeadWordBlock( QByteArray const & b
|
|||
}
|
||||
|
||||
bool MdictParser::readRecordBlock( MdictParser::HeadWordIndex & headWordIndex,
|
||||
MdictParser::RecordHandler & recordHandler,
|
||||
bool cross_block_read )
|
||||
MdictParser::RecordHandler & recordHandler )
|
||||
{
|
||||
// cache the index, the headWordIndex is already sorted
|
||||
size_t idx = 0;
|
||||
bool readNextBlock = false;
|
||||
|
||||
for ( HeadWordIndex::const_iterator i = headWordIndex.begin(); i != headWordIndex.end(); ++i )
|
||||
{
|
||||
|
@ -613,41 +611,21 @@ bool MdictParser::readRecordBlock( MdictParser::HeadWordIndex & headWordIndex,
|
|||
RecordIndex const & recordIndex = recordBlockInfos_[idx];
|
||||
HeadWordIndex::const_iterator iNext = i + 1;
|
||||
qint64 recordSize;
|
||||
auto current = *i;
|
||||
|
||||
if( iNext == headWordIndex.end() )
|
||||
{
|
||||
qint64 lastWordSize = recordIndex.shadowEndPos - current.first;
|
||||
|
||||
readNextBlock = cross_block_read && readNextHeadWordIndex( headWordIndex );
|
||||
if(readNextBlock)
|
||||
{
|
||||
recordSize = qMin(lastWordSize, headWordIndex.begin()->first - current.first);
|
||||
}
|
||||
if ( iNext == headWordIndex.end() )
|
||||
recordSize = recordIndex.shadowEndPos - i->first;
|
||||
else
|
||||
{
|
||||
recordSize = lastWordSize;
|
||||
}
|
||||
}
|
||||
else
|
||||
recordSize = iNext->first - current.first;
|
||||
recordSize = iNext->first - i->first;
|
||||
|
||||
RecordInfo recordInfo;
|
||||
recordInfo.compressedBlockPos = recordPos_ + recordIndex.startPos;
|
||||
recordInfo.recordOffset = current.first - recordIndex.shadowStartPos;
|
||||
recordInfo.recordOffset = i->first - recordIndex.shadowStartPos;
|
||||
recordInfo.decompressedBlockSize = recordIndex.decompressedSize;
|
||||
recordInfo.compressedBlockSize = recordIndex.compressedSize;
|
||||
recordInfo.recordSize = recordSize;
|
||||
|
||||
recordHandler.handleRecord( current.second, recordInfo );
|
||||
|
||||
if( readNextBlock )
|
||||
break;
|
||||
recordHandler.handleRecord( i->second, recordInfo );
|
||||
}
|
||||
|
||||
if( readNextBlock )
|
||||
readRecordBlock( headWordIndex, recordHandler, cross_block_read );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ public:
|
|||
|
||||
bool open( const char * filename );
|
||||
bool readNextHeadWordIndex( HeadWordIndex & headWordIndex );
|
||||
bool readRecordBlock( HeadWordIndex & headWordIndex, RecordHandler & recordHandler, bool cross_block_read=false );
|
||||
bool readRecordBlock( HeadWordIndex & headWordIndex, RecordHandler & recordHandler );
|
||||
|
||||
// helpers
|
||||
static QString toUtf16( const char * fromCode, const char * from, size_t fromSize );
|
||||
|
|
4
mdx.cc
4
mdx.cc
|
@ -1440,9 +1440,9 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f
|
|||
MdictParser::HeadWordIndex headWordIndex;
|
||||
|
||||
// enumerating word and its definition
|
||||
if ( parser.readNextHeadWordIndex( headWordIndex ) )
|
||||
while ( parser.readNextHeadWordIndex( headWordIndex ) )
|
||||
{
|
||||
parser.readRecordBlock( headWordIndex, articleHandler, true);
|
||||
parser.readRecordBlock( headWordIndex, articleHandler );
|
||||
}
|
||||
|
||||
// enumerating resources if there's any
|
||||
|
|
Loading…
Reference in a new issue