Mysterious bug fixing: don't make the collator a member of the elements
This commit is contained in:
@@ -2,9 +2,9 @@
|
|||||||
*
|
*
|
||||||
* $RCSfile: databases.cxx,v $
|
* $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
|
* The Contents of this file are made available subject to the terms of
|
||||||
* either of the following licenses
|
* either of the following licenses
|
||||||
@@ -538,56 +538,11 @@ Databases::getCollator( const rtl::OUString& Language,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
KeywordInfo::KeywordElement::KeywordElement( Databases *pDatabases,
|
|
||||||
Db* pDb,
|
bool KeywordInfo::KeywordElementComparator::operator()( const KeywordInfo::KeywordElement& la,
|
||||||
Reference< XCollator > xCollator,
|
const KeywordInfo::KeywordElement& ra) const
|
||||||
rtl::OUString& ky,
|
|
||||||
rtl::OUString& data )
|
|
||||||
: m_xCollator( xCollator ),
|
|
||||||
key( ky )
|
|
||||||
{
|
{
|
||||||
pDatabases->replaceName( key );
|
const rtl::OUString& l = la.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
|
|
||||||
{
|
|
||||||
const rtl::OUString& l = key;
|
|
||||||
const rtl::OUString& r = ra.key;
|
const rtl::OUString& r = ra.key;
|
||||||
|
|
||||||
bool ret;
|
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 )
|
void KeywordInfo::KeywordElement::init( Databases *pDatabases,Db* pDb,const rtl::OUString& ids )
|
||||||
{
|
{
|
||||||
const sal_Unicode* idstr = ids.getStr();
|
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() ),
|
: listKey( aSet.size() ),
|
||||||
listId( aSet.size() ),
|
listId( aSet.size() ),
|
||||||
listAnchor( 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,
|
KeywordInfo* Databases::getKeyword( const rtl::OUString& Database,
|
||||||
const rtl::OUString& Language )
|
const rtl::OUString& Language )
|
||||||
@@ -729,10 +683,13 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database,
|
|||||||
Db table( 0,DB_CXX_NO_EXCEPTIONS );
|
Db table( 0,DB_CXX_NO_EXCEPTIONS );
|
||||||
if( 0 == table.open( fileName.getStr(),0,DB_BTREE,DB_RDONLY,0644 ) )
|
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() );
|
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;
|
bool first = true;
|
||||||
|
|
||||||
Dbc* cursor = 0;
|
Dbc* cursor = 0;
|
||||||
@@ -749,9 +706,8 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database,
|
|||||||
data.get_size(),
|
data.get_size(),
|
||||||
RTL_TEXTENCODING_UTF8 );
|
RTL_TEXTENCODING_UTF8 );
|
||||||
|
|
||||||
aVector.push_back( KeywordInfo::KeywordElement( this,
|
aSet.insert( KeywordInfo::KeywordElement( this,
|
||||||
idmap,
|
idmap,
|
||||||
xCollator,
|
|
||||||
keyword,
|
keyword,
|
||||||
doclist ) );
|
doclist ) );
|
||||||
if( first )
|
if( first )
|
||||||
@@ -761,9 +717,9 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database,
|
|||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::sort( aVector.begin(),aVector.end() );
|
|
||||||
if( cursor ) cursor->close();
|
if( cursor ) cursor->close();
|
||||||
KeywordInfo* info = it->second = new KeywordInfo( aVector );
|
KeywordInfo* info = it->second = new KeywordInfo( aSet );
|
||||||
}
|
}
|
||||||
table.close( 0 );
|
table.close( 0 );
|
||||||
}
|
}
|
||||||
@@ -774,7 +730,6 @@ KeywordInfo* Databases::getKeyword( const rtl::OUString& Database,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference< XHierarchicalNameAccess > Databases::jarFile( const rtl::OUString& jar,
|
Reference< XHierarchicalNameAccess > Databases::jarFile( const rtl::OUString& jar,
|
||||||
const rtl::OUString& Language )
|
const rtl::OUString& Language )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user