00001 /* -*- mode: c++ -*- 00002 */ 00003 /* 00004 00005 GIFT, a flexible content based image retrieval system. 00006 Copyright (C) 1998, 1999, 2000, 2001, 2002, CUI University of Geneva 00007 00008 Copyright (C) 2003, 2004 Bayreuth University 00009 2005 Bamberg University 00010 This program is free software; you can redistribute it and/or modify 00011 it under the terms of the GNU General Public License as published by 00012 the Free Software Foundation; either version 2 of the License, or 00013 (at your option) any later version. 00014 00015 This program is distributed in the hope that it will be useful, 00016 but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 GNU General Public License for more details. 00019 00020 You should have received a copy of the GNU General Public License 00021 along with this program; if not, write to the Free Software 00022 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00023 00024 */ 00025 // -*- mode: c++ -*- 00026 00027 #include "libMRML/include/CAccessorElement.h" 00028 #include "libMRML/include/CXMLElement.h" 00050 #ifndef _CQUERY 00051 #define _CQUERY 00052 #include "libMRML/include/uses-declarations.h" 00053 #include <memory> 00054 #include <map> 00055 #include "libMRML/include/CSelfDestroyPointer.h" 00056 #include "libMRML/include/CIDRelevanceLevelPairList.h" 00057 #include "libMRML/include/CXMLElement.h" 00058 00059 //#include "CWeightingFunctionPointerList.h" 00060 //#include "CWeightingFunctionPointerHash.h" 00061 00062 #include "libMRML/include/CAlgorithm.h" 00063 #include "libMRML/include/CAccessor.h" 00064 #include "libMRML/include/CAccessorAdminCollection.h" 00065 #include "libMRML/include/CAccessorAdmin.h" 00066 #include "libMRML/include/CMagic.h" //public CMagic 00067 00068 class CScoreBoard; 00069 class CAccessor; 00070 00071 00073 class CQuery:public CMagic{ 00074 00075 protected: 00081 CAccessor* mAccessor; 00086 CAccessorAdmin* mAccessorAdmin; 00091 CAccessorAdminCollection* mAccessorAdminCollection; 00092 00093 00098 CAlgorithm* mAlgorithm; 00099 00103 class lCChild{ 00104 public: 00106 CQuery* mQuery; 00108 double mWeight; 00109 }; 00111 typedef list<lCChild> lCChildren; 00114 lCChildren mChildren; 00115 00116 00117 00118 protected: 00124 virtual void init()=0; 00125 00126 public: 00132 CQuery(); 00138 virtual ~CQuery(); 00151 CQuery(CAccessorAdminCollection& inAccessorAdminCollection, 00152 CAlgorithm& inAlgorithm); 00153 00159 void addChild(CQuery* inChild, 00160 double inWeight=1); 00161 00162 00168 virtual CXMLElement* query(const CXMLElement& inQuery); 00169 00176 virtual CIDRelevanceLevelPairList* fastQuery(const CXMLElement& inQuery, 00177 int inNumberOfInterestingImages, 00178 double inDifferenceToBest)=0; 00179 00185 virtual CXMLElement* getRandomImages(int inNumberOfInterestingImages)const; 00191 virtual CIDRelevanceLevelPairList* getRandomIDs(int inNumberOfInterestingImages)const; 00197 virtual list<TID>* getAllIDs()const; 00203 virtual list<CAccessorElement>* getAllAccessorElements()const; 00210 virtual bool setAlgorithm(CAlgorithm& inAlgorithm); 00217 const CAlgorithm& getAlgorithm()const; 00218 00226 virtual void finishInit(); 00227 00228 }; /* end of class */ 00229 00230 #endif 00231