File: CAccessorFactoryContainer.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 (117 lines) | stat: -rw-r--r-- 3,570 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
/* -*- 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 _CACCESSORFACTORYCONTAINER
#define _CACCESSORFACTORYCONTAINER
#include "libMRML/include/uses-declarations.h"
#include <map>
#include <string>
#include "libMRML/include/CSelfDestroyPointer.h"
class CXMLElement;
class CAccessor;
class CAccessorFactory;
/**
 * This is destined to hold a number of CAccessorFactories.
 * The use of this is to have an open-close-counter for 
 * all the factories which have been registered in this
 * 
 * New elements are only constructed if necessary.
 *
 *@author Wolfgang Mller
 */
class CAccessorFactoryContainer{
  /** 
      This tree contains the configuration data for this
  */
  CSelfDestroyPointer<CXMLElement> mConfigurationData;
  class CContentElement{
  public:
    /** Contains a pointer to the accessor, if already opened */
    CAccessorFactory* mFactory;
    /** Counts how often the accessor has been opened or closed */
    int mOpenCloseCounter;
  };
  /** 
      Typedef: The content is a map of string to content element 
      In this map is noted, which accessors are open for the
      collection with the given ID.
   */
public:
  typedef map<string,CContentElement> CContent;
protected:
  /** the content */
  CContent mContent;
     
 public:
  /** construct this. In the case of static linking,
      this means the construction of factorys
      for all accessors.
  */
  CAccessorFactoryContainer();
  /** configure this

      In the case of dynamic linking we will scan
      libdir for plugins
   */
  void configure(CXMLElement* inConfigurationData);
  /**
     The destructor destroys the CContentElements properly 
  */
  ~CAccessorFactoryContainer();
  /** 
      adding a factory to the content
   */
  void registerFactory(CAccessorFactory* inFactory,
		       string inName);
  /**
     opening an accessor:
     if the accessor is already constructed,
     then simply give the pointer,
     otherwhise construct a new one 
     using the appropriate factory

     @param name of the accessor to be created
     @param inConfigurationData the configuration data of 
            the CXMLElement to be created
  */
  CAccessor* openAccessor(string inName,
			  const CXMLElement& inCollectionElement);
  /**
     closing an accessor.
     If there have been as many openAccessor 
     as closeAccessor calls, the accessor will
     be delete-d.
  */
  void closeAccessor(string inName);
  /**
     Is a given factory present in the factory?
     Useful for building in order to avoid double registration
     and double dynamic linking.
  */
  bool isPresentFactory(string inName)const;
  
};

#endif