1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/* -*- mode: c++ -*-
*/
/*
GIFT, a flexible content based image retrieval system.
Copyright (C) 1998, 1999, 2000, 2001, 2002, CUI University of Geneva
Copyright (C) 2003, 2004 Bayreuth University
2005 Bamberg University
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
// -*- mode: c++ -*-
#ifndef _CALGORITHMCOLLECTION
#define _CALGORITHMCOLLECTION
#include "libMRML/include/uses-declarations.h"
#include <string>
#include <map>
#include "libMRML/include/CAlgorithm.h"
#ifdef LINK_DYNAMICALLY
#include "libMRML/include/CStaticQueryFactory.h"
#else
#include "libMRML/include/CDynamicQueryFactory.h"
#endif
#include "libMRML/include/CXMLElement.h" // for toXMLElement
class CAccessorAdminCollection;
/**
The algorithm collection is kind of a factory
for CQuery structures:
We provide a list of algorithms which correspond
to so-called "basetypes". At present there are
only two: bayesian and inverted_file.
Each algorithm which will be configured in
the configuration file will have a basetype.
Corresponding to this there is generated a
CQuery structure for each algorithm out of the
configuration.
@Author Wolfgang Mueller
*/
class CAlgorithmCollection:public CStaticQueryFactory{
protected:
/** as the name sais*/
CAlgorithm* mAlgorithmInConstruction;
/** The content of an algorithm collection is a map
between algorihm type and a pointer to
the corresponding CAlgorithm */
protected:
typedef map<string,CAlgorithm*> CContent;
/**
*/
CContent mContent;
/** for being able to read all the content */
CContent::const_iterator begin()const;
/** for being able to read all the content */
CContent::const_iterator end()const;
public:
//----------------------------------------
/**
returns a pointer to the algorithm in construction
*/
CAlgorithm* getAlgorithmInConstruction();
//----------------------------------------
/**
*/
void startAlgorithmConstruction(CAlgorithm* inAlgorithm);
/** Constructor */
CAlgorithmCollection(string inConfigFileName);
/** Destructor destroys all members of CContent
*/
~CAlgorithmCollection();
/** adding a completely built algorithm XML document tree*/
void addAlgorithm(CAlgorithm* inAlgorithm);
/** Algorithm for TYPE => permits configuring
probably only the pointered version is interesting
*/
CAlgorithm& getAlgorithmByType(const string& inType)const;
/** Algorithm for TYPE => permits configuring
probably only the pointered version is interesting
*/
bool containsAlgorithmByType(const string& inType)const;
/**
Creates a new algorithm for agiven type by cloning
what you would get with getAlgorithm.
The values made here will be used as default
in the subsequent CQuery building process.
*/
CAlgorithm* makeAlgorithmByType(const string& inType)const;
//----------------------------------------
/** A default algorithm for the default session
This algorithm will be given by the ONE
ALGORITHM which has the type "adefault"
*/
CAlgorithm* getDefaultAlgorithm()const;
//----------------------------------------
/** creates a copy of what you'd get with
the above function get...*/
CAlgorithm* makeDefaultAlgorithm()const;
//----------------------------------------
/** For handshaking:
This makes you a list of all algorithms which work with a given
query paradigm.
*/
CXMLElement* getAlgorithmList(const CXMLElement& inGetAlgorithms)const;
//----------------------------------------
/** for shandshake and for state output
*/
string toXML(bool inIsPrivate=false)const;
/** for get-algorithms: the output is an CXMLElement, containing
an algorithm-list element.
*/
CXMLElement* toXMLElement()const;
/** handed through to the CStaticQueryFactory */
CQuery* makeQuery(const string & inBaseType,
CAccessorAdminCollection & inAccessorAdminCollection,
CAlgorithm & inAlgorithm,
CStaticQueryFactory& inFactory);
};
#endif
|