File: CAlgorithmCollection.h

package info (click to toggle)
gnuift 0.1.14%2Bds-1
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 5,632 kB
  • ctags: 2,973
  • sloc: cpp: 15,867; sh: 8,281; ansic: 1,812; perl: 1,007; php: 651; makefile: 483; lisp: 344
file content (138 lines) | stat: -rw-r--r-- 4,720 bytes parent folder | download
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