cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cmnClassRegister.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Alvin Liem, Anton Deguet
7  Created on: 2002-08-01
8 
9  (C) Copyright 2002-2010 Johns Hopkins University (JHU), All Rights
10  Reserved.
11 
12 --- begin cisst license - do not edit ---
13 
14 This software is provided "as is" under an open source license, with
15 no warranty. The complete license can be found in license.txt and
16 http://www.cisst.org/cisst/license.txt.
17 
18 --- end cisst license ---
19 
20 */
21 
22 
27 #pragma once
28 
29 #ifndef _cmnClassRegister_h
30 #define _cmnClassRegister_h
31 
34 #include <cisstCommon/cmnLogger.h>
35 
36 #include <iostream>
37 #include <sstream>
38 #include <string>
39 #include <map>
40 #include <typeinfo>
41 #include <fstream>
42 
43 #include <cisstCommon/cmnExport.h>
44 
45 
98  public:
101  typedef std::map<std::string, cmnClassServicesBase*> ServicesContainerType;
102  typedef ServicesContainerType::value_type EntryType;
103 
104  typedef ServicesContainerType::const_iterator const_iterator;
105  typedef ServicesContainerType::const_reverse_iterator const_reverse_iterator;
106 
108 
109  private:
110  typedef ServicesContainerType::iterator iterator;
111  typedef ServicesContainerType::reverse_iterator reverse_iterator;
113 
115  ServicesContainerType ServicesContainer;
116 
117  public:
123  cmnClassServicesBase * FindClassServicesInstance(const std::string & className);
124 
130  cmnClassServicesBase * FindClassServicesInstance(const std::type_info & typeInfo);
131 
134  const std::string *
135  RegisterInstance(cmnClassServicesBase * classServicesPointer,
136  const std::string & className);
137 
140  bool SetLogMaskClassAllInstance(cmnLogMask mask);
141 
144  bool SetLogMaskClassMatchingInstance(const std::string & stringToMatch, cmnLogMask mask);
145 
148  std::string ToStringInstance(void) const;
149 
152  void ToStreamInstance(std::ostream & outputStream) const;
153 
156  inline size_type sizeInstance(void) const {
157  return ServicesContainer.size();
158  }
159 
162  inline const_iterator beginInstance(void) const {
163  return ServicesContainer.begin();
164  }
165 
168  inline const_iterator endInstance(void) const {
169  return ServicesContainer.end();
170  }
171 
172 protected:
175  inline cmnClassRegister(void) {};
176 
177  public:
178 
186  static cmnClassRegister * Instance(void);
187 
188 
207  static inline const std::string *
208  Register(cmnClassServicesBase * classServicesPointer,
209  const std::string & className)
210  {
211  return Instance()->RegisterInstance(classServicesPointer,
212  className);
213  }
214 
215 
226  static bool SetLogMaskClass(const std::string & className, cmnLogMask mask);
227 
228  static inline bool CISST_DEPRECATED SetLoD(const std::string & className, cmnLogMask mask) {
229  return SetLogMaskClass(className, mask);
230  }
231 
232 
241  static inline bool SetLogMaskClassAll(cmnLogMask mask) {
242  return Instance()->SetLogMaskClassAllInstance(mask);
243  }
244 
246  return SetLogMaskClassAll(mask);
247  }
248 
249 
260  static inline bool SetLogMaskClassMatching(const std::string & stringToMatch, cmnLogMask mask) {
261  return Instance()->SetLogMaskClassMatchingInstance(stringToMatch, mask);
262  }
263 
264  static inline bool CISST_DEPRECATED SetLoDForMatchingClasses(const std::string & stringToMatch, cmnLogMask mask) {
265  return Instance()->SetLogMaskClassMatching(stringToMatch, mask);
266  }
267 
268 
277  static inline cmnClassServicesBase * FindClassServices(const std::string & className) {
278  return Instance()->FindClassServicesInstance(className);
279  }
280 
292  static inline cmnClassServicesBase * FindClassServices(const std::type_info & typeInfo) {
293  return Instance()->FindClassServicesInstance(typeInfo);
294  }
295 
296 
303  static cmnGenericObject * Create(const std::string & className);
304 
313  static cmnGenericObject * Create(const std::string & className,
314  const cmnGenericObject & other);
315 
316 
319  static std::string ToString(void);
320 
321 
323  static void ToStream(std::ostream & outputStream) {
324  Instance()->ToStreamInstance(outputStream);
325  }
326 
327 
329  static size_type size(void) {
330  return Instance()->sizeInstance();
331  }
332 
334  static const_iterator begin(void) {
335  return Instance()->beginInstance();
336  }
337 
338 
340  static const_iterator end(void) {
341  return Instance()->endInstance();
342  }
343 
344 };
345 
346 
348 inline
349 std::ostream & operator << (std::ostream & output,
350  const cmnClassRegister & classRegister) {
351  classRegister.ToStream(output);
352  return output;
353 }
354 
355 
356 #endif // _cmnClassRegister_h
357 
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
Main register for classes.
Definition: cmnClassRegister.h:97
std::string ToString()
Definition: cisstVectorEigenAddons.h:30
static size_type size(void)
Definition: cmnClassRegister.h:329
#define CISST_DEPRECATED
Definition: cmnPortability.h:310
std::map< std::string, cmnClassServicesBase * > ServicesContainerType
Definition: cmnClassRegister.h:101
Portability across compilers and operating systems tools.
static bool CISST_DEPRECATED SetLoDForAllClasses(cmnLogMask mask)
Definition: cmnClassRegister.h:245
size_t size_type
Definition: vctContainerTraits.h:35
Base class for high level objects.
Definition: cmnGenericObject.h:51
static cmnClassServicesBase * FindClassServices(const std::type_info &typeInfo)
Definition: cmnClassRegister.h:292
ServicesContainerType::const_reverse_iterator const_reverse_iterator
Definition: cmnClassRegister.h:105
static const_iterator begin(void)
Definition: cmnClassRegister.h:334
ServicesContainerType::value_type EntryType
Definition: cmnClassRegister.h:102
Declaration of cmnLogger amd macros for human readable logging.
size_type sizeInstance(void) const
Definition: cmnClassRegister.h:156
Macros to export the symbols of cisstCommon (in a Dll).
cmnClassRegister(void)
Definition: cmnClassRegister.h:175
static const_iterator end(void)
Definition: cmnClassRegister.h:340
static bool SetLogMaskClassMatching(const std::string &stringToMatch, cmnLogMask mask)
Definition: cmnClassRegister.h:260
ServicesContainerType::size_type size_type
Definition: cmnClassRegister.h:107
short cmnLogMask
Definition: cmnLogLoD.h:67
static const std::string * Register(cmnClassServicesBase *classServicesPointer, const std::string &className)
Definition: cmnClassRegister.h:208
const_iterator beginInstance(void) const
Definition: cmnClassRegister.h:162
const_iterator endInstance(void) const
Definition: cmnClassRegister.h:168
static bool CISST_DEPRECATED SetLoDForMatchingClasses(const std::string &stringToMatch, cmnLogMask mask)
Definition: cmnClassRegister.h:264
Base class for class services.
Definition: cmnClassServicesBase.h:45
std::ostream & operator<<(std::ostream &output, const cmnClassRegister &classRegister)
Definition: cmnClassRegister.h:349
static cmnClassServicesBase * FindClassServices(const std::string &className)
Definition: cmnClassRegister.h:277
ServicesContainerType::const_iterator const_iterator
Definition: cmnClassRegister.h:104
static bool SetLogMaskClassAll(cmnLogMask mask)
Definition: cmnClassRegister.h:241
static void ToStream(std::ostream &outputStream)
Definition: cmnClassRegister.h:323
static bool CISST_DEPRECATED SetLoD(const std::string &className, cmnLogMask mask)
Definition: cmnClassRegister.h:228