diff options
author | Andreas Bille <abi@openoffice.org> | 2001-11-23 14:50:43 +0000 |
---|---|---|
committer | Andreas Bille <abi@openoffice.org> | 2001-11-23 14:50:43 +0000 |
commit | a7a7cf58efc3984d9dc8c4f2521c035ae8f9fedc (patch) | |
tree | 04dc41391de653bed0e0f0336a71d888625e7c65 | |
parent | 87bf346969ac288b224e6156dde86fc4e2114f6e (diff) |
Mysterious bug fixing: don't make the collator a member of the elements
-rw-r--r-- | xmlhelp/source/cxxhelp/provider/databases.cxx | 109 |
1 files changed, 32 insertions, 77 deletions
diff --git a/xmlhelp/source/cxxhelp/provider/databases.cxx b/xmlhelp/source/cxxhelp/provider/databases.cxx index c0a815f60597..ad0349e4f53a 100644 --- a/xmlhelp/source/cxxhelp/provider/databases.cxx +++ b/xmlhelp/source/cxxhelp/provider/databases.cxx @@ -2,9 +2,9 @@ * * $RCSfile: databases.cxx,v $ * - * $Revision: 1.28 $ + * $Revision: 1.29 $ * - * last change: $Author: abi $ $Date: 2001-11-23 13:54:35 $ + * last change: $Author: abi $ $Date: 2001-11-23 15:50:43 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -538,56 +538,11 @@ Databases::getCollator( const rtl::OUString& Language, } -KeywordInfo::KeywordElement::KeywordElement( Databases *pDatabases, - Db* pDb, - Reference< XCollator > xCollator, - rtl::OUString& ky, - rtl::OUString& data ) - : m_xCollator( xCollator ), - key( ky ) -{ - pDatabases->replaceName( key ); - init( pDatabases,pDb,data ); -} - - -// std::vector<KeywordInfo::KeywordElement> *globSet = 0; - -// bool check(const KeywordInfo::KeywordElement& aElement) -// { -// std::vector<KeywordInfo::KeywordElement> aVec = *globSet; -// if( aElement.key.getLength() == 0 ) -// fprintf(stderr,"...found zero element at position %d\n",aVec.size()); - -// for(int i = 0; i < aVec.size(); ++i) -// { -// for(int j = i; j < aVec.size(); ++j) -// { -// bool b12 = aVec[i]<aVec[j]; -// bool b13 = aVec[i]<aElement; -// bool b21 = aVec[j]<aVec[i]; -// bool b23 = aVec[j]<aElement; -// bool b31 = aElement<aVec[i]; -// bool b32 = aElement<aVec[j]; - -// if( b12 && b23 && ! b13 || -// b13 && b32 && ! b12 || -// b21 && b13 && ! b23 || -// b31 && b12 && ! b32 || -// b23 && b31 && ! b21 || -// b32 && b21 && ! b31 ) -// fprintf(stderr,"found index tripel not matching weak ordering requirement"); -// } -// } - -// aVec.push_back( aElement ); -// } - - -bool KeywordInfo::KeywordElement::operator<( const KeywordElement& ra ) const +bool KeywordInfo::KeywordElementComparator::operator()( const KeywordInfo::KeywordElement& la, + const KeywordInfo::KeywordElement& ra) const { - const rtl::OUString& l = key; + const rtl::OUString& l = la.key; const rtl::OUString& r = ra.key; bool ret; @@ -620,6 +575,20 @@ bool KeywordInfo::KeywordElement::operator<( const KeywordElement& ra ) const } + + +KeywordInfo::KeywordElement::KeywordElement( Databases *pDatabases, + Db* pDb, + rtl::OUString& ky, + rtl::OUString& data ) + : key( ky ) +{ + pDatabases->replaceName( key ); + init( pDatabases,pDb,data ); +} + + + void KeywordInfo::KeywordElement::init( Databases *pDatabases,Db* pDb,const rtl::OUString& ids ) { const sal_Unicode* idstr = ids.getStr(); @@ -666,7 +635,8 @@ void KeywordInfo::KeywordElement::init( Databases *pDatabases,Db* pDb,const rtl: } -KeywordInfo::KeywordInfo( const std::set< KeywordElement >& aSet ) + +KeywordInfo::KeywordInfo( const std::set< KeywordElement,KeywordElementComparator >& aSet ) : listKey( aSet.size() ), listId( aSet.size() ), listAnchor( aSet.size() ), @@ -686,22 +656,6 @@ KeywordInfo::KeywordInfo( const std::set< KeywordElement >& aSet ) } -KeywordInfo::KeywordInfo( const std::vector< KeywordElement >& aVec ) - : listKey( aVec.size() ), - listId( aVec.size() ), - listAnchor( aVec.size() ), - listTitle( aVec.size() ) -{ - for( int i = 0; i < aVec.size(); ++i ) - { - listKey[i] = aVec[i].key; - listId[i] = aVec[i].listId; - listAnchor[i] = aVec[i].listAnchor; - listTitle[i] = aVec[i].listTitle; - } -} - - KeywordInfo* Databases::getKeyword( const rtl::OUString& Database, const rtl::OUString& Language ) @@ -729,10 +683,13 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database, Db table( 0,DB_CXX_NO_EXCEPTIONS ); if( 0 == table.open( fileName.getStr(),0,DB_BTREE,DB_RDONLY,0644 ) ) { - std::vector<KeywordInfo::KeywordElement> aVector; - Db* idmap = getBerkeley( Database,Language ); Reference< XCollator > xCollator = getCollator( Language,rtl::OUString() ); + KeywordInfo::KeywordElementComparator aComparator( xCollator ); + + std::set<KeywordInfo::KeywordElement,KeywordInfo::KeywordElementComparator> aSet( aComparator ); + Db* idmap = getBerkeley( Database,Language ); + bool first = true; Dbc* cursor = 0; @@ -749,11 +706,10 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database, data.get_size(), RTL_TEXTENCODING_UTF8 ); - aVector.push_back( KeywordInfo::KeywordElement( this, - idmap, - xCollator, - keyword, - doclist ) ); + aSet.insert( KeywordInfo::KeywordElement( this, + idmap, + keyword, + doclist ) ); if( first ) { key.set_flags( DB_DBT_REALLOC ); @@ -761,9 +717,9 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database, first = false; } } - std::sort( aVector.begin(),aVector.end() ); + if( cursor ) cursor->close(); - KeywordInfo* info = it->second = new KeywordInfo( aVector ); + KeywordInfo* info = it->second = new KeywordInfo( aSet ); } table.close( 0 ); } @@ -774,7 +730,6 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database, - Reference< XHierarchicalNameAccess > Databases::jarFile( const rtl::OUString& jar, const rtl::OUString& Language ) { |