File indexing completed on 2024-05-19 04:49:18

0001 /****************************************************************************************
0002  * Copyright (c) 2010 Maximilian Kossick <maximilian.kossick@googlemail.com>            *
0003  *                                                                                      *
0004  * This program is free software; you can redistribute it and/or modify it under        *
0005  * the terms of the GNU General Public License as published by the Free Software        *
0006  * Foundation; either version 2 of the License, or (at your option) any later           *
0007  * version.                                                                             *
0008  *                                                                                      *
0009  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
0010  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
0011  * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
0012  *                                                                                      *
0013  * You should have received a copy of the GNU General Public License along with         *
0014  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
0015  ****************************************************************************************/
0016 
0017 #include "MemoryQueryMakerInternal.h"
0018 
0019 #include "MemoryCollection.h"
0020 #include "MemoryCustomValue.h"
0021 #include "MemoryFilter.h"
0022 #include "MemoryMatcher.h"
0023 #include "MemoryQueryMakerHelper.h"
0024 
0025 #include "core/meta/Meta.h"
0026 
0027 #include <QSharedPointer>
0028 
0029 #include <KSortableList>
0030 
0031 namespace Collections {
0032 
0033 MemoryQueryMakerInternal::MemoryQueryMakerInternal( const QWeakPointer<MemoryCollection> &collection )
0034     : QObject()
0035     , m_collection( collection )
0036     , m_matchers( nullptr )
0037     , m_filters( nullptr )
0038     , m_maxSize( 0 )
0039     , m_type( QueryMaker::None )
0040     , m_albumQueryMode( QueryMaker::AllAlbums )
0041     , m_orderDescending( false )
0042     , m_orderByNumberField( false )
0043     , m_orderByField( 0 )
0044 {
0045 
0046 }
0047 
0048 MemoryQueryMakerInternal::~MemoryQueryMakerInternal()
0049 {
0050     delete m_filters;
0051     delete m_matchers;
0052     qDeleteAll( m_returnFunctions );
0053     qDeleteAll( m_returnValues );
0054 }
0055 
0056 void
0057 MemoryQueryMakerInternal::runQuery()
0058 {
0059     QSharedPointer<MemoryCollection> coll = m_collection.toStrongRef();
0060     if( coll )
0061         coll->acquireReadLock();
0062     //naive implementation, fix this
0063     if ( m_matchers )
0064     {
0065         Meta::TrackList result = coll ? m_matchers->match( coll.data() ) : Meta::TrackList();
0066         if ( m_filters )
0067         {
0068             Meta::TrackList filtered;
0069             foreach( Meta::TrackPtr track, result )
0070             {
0071                 if( m_filters->filterMatches( track ) )
0072                     filtered.append( track );
0073             }
0074             handleResult( filtered );
0075         }
0076         else
0077             handleResult( result );
0078     }
0079     else if ( m_filters )
0080     {
0081         Meta::TrackList tracks = coll ? coll->trackMap().values() : Meta::TrackList();
0082         Meta::TrackList filtered;
0083         foreach( const Meta::TrackPtr &track, tracks )
0084         {
0085             if ( m_filters->filterMatches( track ) )
0086                 filtered.append( track );
0087         }
0088         handleResult( filtered );
0089     }
0090     else
0091         handleResult();
0092     if( coll )
0093         coll->releaseLock();
0094 }
0095 
0096 template<typename T>
0097 static inline QList<T> reverse(const QList<T> &l)
0098 {
0099     QList<T> ret;
0100     for (int i=l.size() - 1; i>=0; --i)
0101         ret.append(l.at(i));
0102     return ret;
0103 }
0104 
0105 void
0106 MemoryQueryMakerInternal::handleResult()
0107 {
0108     QSharedPointer<MemoryCollection> coll = m_collection.toStrongRef();
0109     //this gets called when we want to return all values for the given query type
0110     switch( m_type )
0111     {
0112         case QueryMaker::Custom :
0113         {
0114             QStringList result;
0115             Meta::TrackList tmpTracks = coll ? coll->trackMap().values() : Meta::TrackList();
0116             Meta::TrackList tracks;
0117             foreach( const Meta::TrackPtr &track, tmpTracks )
0118             {
0119                 if( ( m_albumQueryMode == QueryMaker::AllAlbums
0120                     || ( m_albumQueryMode == QueryMaker::OnlyCompilations && track->album()->isCompilation() )
0121                     || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && !track->album()->isCompilation()) ) &&
0122                     ( m_labelQueryMode == QueryMaker::NoConstraint
0123                       || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0124                       || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0125                 {
0126                     tracks.append( track );
0127                 }
0128             }
0129 
0130             if( !m_returnFunctions.empty() )
0131             {
0132                 //no sorting necessary
0133                 foreach( CustomReturnFunction *function, m_returnFunctions )
0134                 {
0135                     result.append( function->value( tracks ) );
0136                 }
0137             }
0138             else if( !m_returnValues.empty() )
0139             {
0140                 if( m_orderByField )
0141                 {
0142                     if( m_orderByNumberField )
0143                         tracks = MemoryQueryMakerHelper::orderListByNumber( tracks, m_orderByField, m_orderDescending );
0144                     else
0145                         tracks = MemoryQueryMakerHelper::orderListByString( tracks, m_orderByField, m_orderDescending );
0146                 }
0147 
0148                 int count = 0;
0149                 foreach( const Meta::TrackPtr &track, tracks )
0150                 {
0151                     if ( m_maxSize >= 0 && count == m_maxSize )
0152                         break;
0153 
0154                     foreach( CustomReturnValue *value, m_returnValues )
0155                     {
0156                         result.append( value->value( track ) );
0157                     }
0158                     count++;
0159                 }
0160             }
0161             Q_EMIT newResultReady( result );
0162             break;
0163         }
0164         case QueryMaker::Track :
0165         {
0166             Meta::TrackList tracks;
0167 
0168             Meta::TrackList tmpTracks = coll ? coll->trackMap().values() : Meta::TrackList();
0169             foreach( Meta::TrackPtr track, tmpTracks )
0170             {
0171                 Meta::AlbumPtr album = track->album();
0172                 if( ( m_albumQueryMode == QueryMaker::AllAlbums
0173                     || ( m_albumQueryMode == QueryMaker::OnlyCompilations && (!album || album->isCompilation()) )
0174                     || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && (album && !album->isCompilation()) ) ) &&
0175                     ( m_labelQueryMode == QueryMaker::NoConstraint
0176                       || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0177                       || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0178                 {
0179                     tracks.append( track );
0180                 }
0181             }
0182 
0183             if( m_orderByField )
0184             {
0185                 if( m_orderByNumberField )
0186                     tracks = MemoryQueryMakerHelper::orderListByNumber( tracks, m_orderByField, m_orderDescending );
0187                 else
0188                     tracks = MemoryQueryMakerHelper::orderListByString( tracks, m_orderByField, m_orderDescending );
0189             }
0190 
0191             Q_EMIT newTracksReady( tracks );
0192             break;
0193         }
0194         case QueryMaker::Album :
0195         {
0196             Meta::AlbumList albums;
0197             Meta::AlbumList tmp = coll ? coll->albumMap().values() : Meta::AlbumList();
0198             foreach( Meta::AlbumPtr album, tmp )
0199             {
0200                 Meta::TrackList tracks = album->tracks();
0201                 foreach( Meta::TrackPtr track, tracks )
0202                 {
0203                     Meta::AlbumPtr album = track->album();
0204                     if( ( m_albumQueryMode == QueryMaker::AllAlbums
0205                         || ( m_albumQueryMode == QueryMaker::OnlyCompilations && (!album || album->isCompilation()) )
0206                         || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && (album && !album->isCompilation()) ) ) &&
0207                         ( m_labelQueryMode == QueryMaker::NoConstraint
0208                           || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0209                           || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0210                     {
0211                         albums.append( album );
0212                         break;
0213                     }
0214                 }
0215             }
0216 
0217             albums = MemoryQueryMakerHelper::orderListByName<Meta::AlbumPtr>( albums, m_orderDescending );
0218 
0219             Q_EMIT newAlbumsReady( albums );
0220             break;
0221         }
0222         case QueryMaker::Artist :
0223         {
0224             Meta::ArtistList artists;
0225             Meta::ArtistList tmp = coll ? coll->artistMap().values() : Meta::ArtistList();
0226             foreach( Meta::ArtistPtr artist, tmp )
0227             {
0228                 Meta::TrackList tracks = artist->tracks();
0229                 foreach( Meta::TrackPtr track, tracks )
0230                 {
0231                     if( ( m_albumQueryMode == QueryMaker::AllAlbums
0232                         || ( m_albumQueryMode == QueryMaker::OnlyCompilations && track->album()->isCompilation() )
0233                         || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && !track->album()->isCompilation()) ) &&
0234                         ( m_labelQueryMode == QueryMaker::NoConstraint
0235                           || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0236                           || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0237                     {
0238                         artists.append( artist );
0239                         break;
0240                     }
0241                 }
0242             }
0243             artists = MemoryQueryMakerHelper::orderListByName<Meta::ArtistPtr>( artists, m_orderDescending );
0244             Q_EMIT newArtistsReady( artists );
0245             break;
0246         }
0247         case QueryMaker::AlbumArtist :
0248         {
0249             Meta::ArtistList artists;
0250             Meta::AlbumList tmp = coll ? coll->albumMap().values() : Meta::AlbumList();
0251             foreach( Meta::AlbumPtr album, tmp )
0252             {
0253                 if( !album->hasAlbumArtist() )
0254                     continue;
0255 
0256                 Meta::TrackList tracks = album->tracks();
0257                 foreach( Meta::TrackPtr track, tracks )
0258                 {
0259                     if( ( m_albumQueryMode == QueryMaker::AllAlbums
0260                         || ( m_albumQueryMode == QueryMaker::OnlyCompilations && album->isCompilation() )
0261                         || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && !album->isCompilation()) ) &&
0262                         ( m_labelQueryMode == QueryMaker::NoConstraint
0263                           || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0264                           || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0265                     {
0266                         artists.append( album->albumArtist() );
0267                         break;
0268                     }
0269                 }
0270             }
0271             artists = MemoryQueryMakerHelper::orderListByName<Meta::ArtistPtr>( artists, m_orderDescending );
0272             Q_EMIT newArtistsReady( artists );
0273             break;
0274         }
0275         case QueryMaker::Composer :
0276         {
0277             Meta::ComposerList composers;
0278             Meta::ComposerList tmp = coll ? coll->composerMap().values() : Meta::ComposerList();
0279             foreach( Meta::ComposerPtr composer, tmp )
0280             {
0281                 Meta::TrackList tracks = composer->tracks();
0282                 foreach( Meta::TrackPtr track, tracks )
0283                 {
0284                     if( ( m_albumQueryMode == QueryMaker::AllAlbums
0285                         || ( m_albumQueryMode == QueryMaker::OnlyCompilations && track->album()->isCompilation() )
0286                         || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && !track->album()->isCompilation()) ) &&
0287                         ( m_labelQueryMode == QueryMaker::NoConstraint
0288                           || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0289                           || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0290                     {
0291                         composers.append( composer );
0292                         break;
0293                     }
0294                 }
0295             }
0296             composers = MemoryQueryMakerHelper::orderListByName<Meta::ComposerPtr>( composers, m_orderDescending );
0297 
0298             Q_EMIT newComposersReady( composers );
0299             break;
0300         }
0301         case QueryMaker::Genre :
0302         {
0303             Meta::GenreList genres;
0304             Meta::GenreList tmp = coll ? coll->genreMap().values() : Meta::GenreList();
0305             foreach( Meta::GenrePtr genre, tmp )
0306             {
0307                 Meta::TrackList tracks = genre->tracks();
0308                 foreach( Meta::TrackPtr track, tracks )
0309                 {
0310                     if( ( m_albumQueryMode == QueryMaker::AllAlbums
0311                         || ( m_albumQueryMode == QueryMaker::OnlyCompilations && track->album()->isCompilation() )
0312                         || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && !track->album()->isCompilation()) ) &&
0313                         ( m_labelQueryMode == QueryMaker::NoConstraint
0314                           || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0315                           || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0316                     {
0317                         genres.append( genre );
0318                         break;
0319                     }
0320                 }
0321             }
0322 
0323             genres = MemoryQueryMakerHelper::orderListByName<Meta::GenrePtr>( genres, m_orderDescending );
0324 
0325             Q_EMIT newGenresReady( genres );
0326             break;
0327         }
0328         case QueryMaker::Year :
0329         {
0330             Meta::YearList years;
0331             Meta::YearList tmp = coll ? coll->yearMap().values() : Meta::YearList();
0332             foreach( Meta::YearPtr year, tmp )
0333             {
0334                 Meta::TrackList tracks = year->tracks();
0335                 foreach( Meta::TrackPtr track, tracks )
0336                 {
0337                     if( ( m_albumQueryMode == QueryMaker::AllAlbums
0338                         || ( m_albumQueryMode == QueryMaker::OnlyCompilations && track->album()->isCompilation() )
0339                         || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && !track->album()->isCompilation()) ) &&
0340                         ( m_labelQueryMode == QueryMaker::NoConstraint
0341                           || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0342                           || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0343                     {
0344                         years.append( year );
0345                         break;
0346                     }
0347                 }
0348             }
0349 
0350             //this a special case which requires a bit of code duplication
0351             //years have to be ordered as numbers, but orderListByNumber does not work for Meta::YearPtrs
0352             if( m_orderByField == Meta::valYear )
0353             {
0354                 years = MemoryQueryMakerHelper::orderListByYear( years, m_orderDescending );
0355             }
0356 
0357             Q_EMIT newYearsReady( years );
0358             break;
0359         }
0360         case QueryMaker::Label:
0361         {
0362             Meta::LabelList labels;
0363             Meta::LabelList tmp = coll ? coll->labelMap().values() : Meta::LabelList();
0364             foreach( const Meta::LabelPtr &label, tmp )
0365             {
0366                 Meta::TrackList tracks = coll ? coll->labelToTrackMap().value( label ) : Meta::TrackList();
0367                 foreach( const Meta::TrackPtr &track, tracks )
0368                 {
0369                     if( ( m_albumQueryMode == QueryMaker::AllAlbums
0370                         || ( m_albumQueryMode == QueryMaker::OnlyCompilations && track->album()->isCompilation() )
0371                         || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && !track->album()->isCompilation()) ) &&
0372                         ( m_labelQueryMode == QueryMaker::NoConstraint
0373                           || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0374                           || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0375                     {
0376                         labels.append( label );
0377                         break;
0378                     }
0379                 }
0380             }
0381 
0382             labels = MemoryQueryMakerHelper::orderListByName<Meta::LabelPtr>( labels, m_orderDescending );
0383 
0384             Q_EMIT newLabelsReady( labels );
0385             break;
0386         }
0387         case QueryMaker::None :
0388             //nothing to do
0389             break;
0390     }
0391 }
0392 
0393 void
0394 MemoryQueryMakerInternal::handleResult( const Meta::TrackList &tmpTracks )
0395 {
0396     Meta::TrackList tracks;
0397     foreach( const Meta::TrackPtr &track, tmpTracks )
0398     {
0399         if( ( m_albumQueryMode == QueryMaker::AllAlbums
0400             || ( m_albumQueryMode == QueryMaker::OnlyCompilations && track->album()->isCompilation() )
0401             || ( m_albumQueryMode == QueryMaker::OnlyNormalAlbums && !track->album()->isCompilation()) ) &&
0402             ( m_labelQueryMode == QueryMaker::NoConstraint
0403               || ( m_labelQueryMode == QueryMaker::OnlyWithLabels && track->labels().count() > 0 )
0404               || ( m_labelQueryMode == QueryMaker::OnlyWithoutLabels && track->labels().isEmpty()) ) )
0405         {
0406             tracks.append( track );
0407         }
0408     }
0409 
0410     switch( m_type )
0411     {
0412         case QueryMaker::Custom :
0413         {
0414             QStringList result;
0415             if( !m_returnFunctions.empty() )
0416             {
0417                 //no sorting necessary
0418                 foreach( CustomReturnFunction *function, m_returnFunctions )
0419                 {
0420                     result.append( function->value( tracks ) );
0421                 }
0422             }
0423             else if( !m_returnValues.empty() )
0424             {
0425                 Meta::TrackList resultTracks = tracks;
0426                 if( m_orderByField )
0427                 {
0428                     if( m_orderByNumberField )
0429                         resultTracks = MemoryQueryMakerHelper::orderListByNumber( resultTracks, m_orderByField, m_orderDescending );
0430                     else
0431                         resultTracks = MemoryQueryMakerHelper::orderListByString( resultTracks, m_orderByField, m_orderDescending );
0432                 }
0433 
0434                 int count = 0;
0435                 foreach( const Meta::TrackPtr &track, resultTracks )
0436                 {
0437                     if ( m_maxSize >= 0 && count == m_maxSize )
0438                         break;
0439 
0440                     foreach( CustomReturnValue *value, m_returnValues )
0441                     {
0442                         result.append( value->value( track ) );
0443                     }
0444                     count++;
0445                 }
0446             }
0447             Q_EMIT newResultReady( result );
0448             break;
0449         }
0450         case QueryMaker::Track :
0451         {
0452             Meta::TrackList newResult;
0453 
0454             if( m_orderByField )
0455             {
0456                 if( m_orderByNumberField )
0457                     newResult = MemoryQueryMakerHelper::orderListByNumber( tracks, m_orderByField, m_orderDescending );
0458                 else
0459                     newResult = MemoryQueryMakerHelper::orderListByString( tracks, m_orderByField, m_orderDescending );
0460             }
0461             else
0462                 newResult = tracks;
0463 
0464             Q_EMIT newTracksReady( newResult );
0465             break;
0466         }
0467         case QueryMaker::Album :
0468         {
0469             QSet<Meta::AlbumPtr> albumSet;
0470             foreach( Meta::TrackPtr track, tracks )
0471             {
0472                 albumSet.insert( track->album() );
0473             }
0474             Meta::AlbumList albumList = albumSet.values();
0475             albumList = MemoryQueryMakerHelper::orderListByName<Meta::AlbumPtr>( albumList, m_orderDescending );
0476             Q_EMIT newAlbumsReady( albumList );
0477             break;
0478         }
0479         case QueryMaker::Artist :
0480         {
0481             QSet<Meta::ArtistPtr> artistSet;
0482             foreach( Meta::TrackPtr track, tracks )
0483             {
0484                 artistSet.insert( track->artist() );
0485             }
0486             Meta::ArtistList list = artistSet.values();
0487             list = MemoryQueryMakerHelper::orderListByName<Meta::ArtistPtr>( list, m_orderDescending );
0488             Q_EMIT newArtistsReady( list );
0489             break;
0490         }
0491         case QueryMaker::AlbumArtist :
0492         {
0493             QSet<Meta::ArtistPtr> artistSet;
0494             foreach( Meta::TrackPtr track, tracks )
0495             {
0496                 if( !track->album().isNull() && track->album()->hasAlbumArtist() )
0497                     artistSet.insert( track->album()->albumArtist() );
0498             }
0499             Meta::ArtistList list = artistSet.values();
0500             list = MemoryQueryMakerHelper::orderListByName<Meta::ArtistPtr>( list, m_orderDescending );
0501             Q_EMIT newArtistsReady( list );
0502             break;
0503         }
0504         case QueryMaker::Genre :
0505         {
0506             QSet<Meta::GenrePtr> genreSet;
0507             foreach( Meta::TrackPtr track, tracks )
0508             {
0509                 genreSet.insert( track->genre() );
0510             }
0511             Meta::GenreList list = genreSet.values();
0512             list = MemoryQueryMakerHelper::orderListByName<Meta::GenrePtr>( list, m_orderDescending );
0513             Q_EMIT newGenresReady( list );
0514             break;
0515         }
0516         case QueryMaker::Composer :
0517         {
0518             QSet<Meta::ComposerPtr> composerSet;
0519             foreach( Meta::TrackPtr track, tracks )
0520             {
0521                 composerSet.insert( track->composer() );
0522             }
0523             Meta::ComposerList list = composerSet.values();
0524             list = MemoryQueryMakerHelper::orderListByName<Meta::ComposerPtr>( list, m_orderDescending );
0525             Q_EMIT newComposersReady( list );
0526             break;
0527         }
0528         case QueryMaker::Year :
0529         {
0530             QSet<Meta::YearPtr> yearSet;
0531             foreach( Meta::TrackPtr track, tracks )
0532             {
0533                 yearSet.insert( track->year() );
0534             }
0535             Meta::YearList years = yearSet.values();
0536             if( m_orderByField == Meta::valYear )
0537             {
0538                 years = MemoryQueryMakerHelper::orderListByYear( years, m_orderDescending );
0539             }
0540 
0541             Q_EMIT newYearsReady( years );
0542             break;
0543         }
0544         case QueryMaker::Label:
0545         {
0546             QSet<Meta::LabelPtr> labelSet;
0547             foreach( const Meta::TrackPtr &track, tracks )
0548             {
0549                 Meta::LabelList tracklabels=track->labels();
0550                 QSet<Meta::LabelPtr> addLabelsSet(tracklabels.begin(), tracklabels.end());
0551                 labelSet.unite( addLabelsSet );
0552             }
0553             Meta::LabelList labels = labelSet.values();
0554             if( m_orderByField == Meta::valLabel )
0555             {
0556                 labels = MemoryQueryMakerHelper::orderListByName<Meta::LabelPtr>( labels, m_orderDescending );
0557             }
0558             Q_EMIT newLabelsReady( labels );
0559             break;
0560         }
0561         case QueryMaker::None:
0562             //should never happen, but handle error anyway
0563             break;
0564     }
0565 }
0566 
0567 void
0568 MemoryQueryMakerInternal::setMatchers( MemoryMatcher *matchers )
0569 {
0570     m_matchers = matchers;
0571 }
0572 
0573 void
0574 MemoryQueryMakerInternal::setFilters( MemoryFilter *filters )
0575 {
0576     m_filters = filters;
0577 }
0578 
0579 void
0580 MemoryQueryMakerInternal::setMaxSize( int maxSize )
0581 {
0582     m_maxSize = maxSize;
0583 }
0584 
0585 void
0586 MemoryQueryMakerInternal::setType( QueryMaker::QueryType type )
0587 {
0588     m_type = type;
0589 }
0590 
0591 void
0592 MemoryQueryMakerInternal::setCustomReturnFunctions( const QList<CustomReturnFunction *> &functions )
0593 {
0594     m_returnFunctions = functions;
0595 }
0596 
0597 void
0598 MemoryQueryMakerInternal::setCustomReturnValues( const QList<CustomReturnValue *> &values )
0599 {
0600     m_returnValues = values;
0601 }
0602 
0603 } //namespace Collections
0604