All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
TerraLib.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/common/TerraLib.cpp
22 
23  \brief An utility class to control the startup and cleanup of the TerraLib Platform and its resources.
24 */
25 
26 // TerraLib
27 #include "TerraLib.h"
28 
29 // STL
30 #include <algorithm>
31 #include <cassert>
32 
34 {
35 // let's initialize all non-initialized modules
36  const std::size_t size = m_modules.size();
37 
38  for(std::size_t i = 0; i < size; ++i)
39  initialize(i);
40 }
41 
42 void TerraLib::initialize(const std::size_t i)
43 {
44  assert(i < m_modules.size());
45 
46  if(m_initialized[i])
47  return;
48 
49  Module& module = m_modules[i];
50 
51 // invoke startup just for modules that has an init function
52  if(module.m_startFptr != 0)
53  (module.m_startFptr)();
54 
55  m_initialized[i] = true;
56 }
57 
58 void TerraLib::initialize(const std::string& moduleName)
59 {
60  const std::size_t i = getModuleIdx(moduleName);
61  initialize(i);
62 }
63 
65 {
66 // let's finalize all modules
67  const std::size_t size = m_modules.size();
68 
69  for(std::size_t i = 0; i < size; ++i)
70  finalize(i);
71 }
72 
73 void TerraLib::finalize(const std::size_t i)
74 {
75  assert(i < m_modules.size());
76 
77  if(!m_initialized[i])
78  return;
79 
80  Module& module = m_modules[i];
81 
82 // invoke cleanup just for modules that has a cleanup function
83  if(module.m_cleanupFptr != 0)
84  (module.m_cleanupFptr)();
85 
86  m_initialized[i] = false;
87 }
88 
89 void TerraLib::finalize(const std::string& moduleName)
90 {
91  const std::size_t i = getModuleIdx(moduleName);
92  finalize(i);
93 }
94 
95 void TerraLib::add(const Module& m)
96 {
97  m_modules.push_back(m);
98  m_initialized.push_back(false);
99 }
100 
101 void TerraLib::remove(const std::string& moduleName)
102 {
103 // let's find the module
104  const std::size_t size = m_modules.size();
105 
106  for(std::size_t i = 0; i < size; ++i)
107  {
108  const Module& module = m_modules[i];
109 
110  if(module.m_name == moduleName)
111  {
112 // after finding the module let's remove it from the initialization list and the module list
113  m_initialized.erase(m_initialized.begin() + i);
114  m_modules.erase(m_modules.begin() + i);
115  break;
116  }
117  }
118 }
119 
120 void TerraLib::remove(const std::size_t i)
121 {
122  assert((i < m_initialized.size()) && (i < m_modules.size()));
123 
124  m_initialized.erase(m_initialized.begin() + i);
125  m_modules.erase(m_modules.begin() + i);
126 }
127 
128 std::size_t TerraLib::getNumRegModules() const
129 {
130  return m_modules.size();
131 }
132 
133 std::size_t TerraLib::getModuleIdx(const std::string& moduleName) const
134 {
135  const std::size_t size = m_modules.size();
136 
137  for(std::size_t i = 0; i < size; ++i)
138  {
139  if(moduleName == m_modules[i].m_name)
140  return i;
141  }
142 
143  return (std::size_t)(-1);
144 }
145 
146 const std::string& TerraLib::getModuleName(std::size_t i) const
147 {
148  assert(i < m_modules.size());
149  return m_modules[i].m_name;
150 }
151 
153 {
154  //std::atexit(&TerraLib::sfinalize);
155 }
156 
158 {
159 }
160 
161 //void TerraLib::sfinalize()
162 //{
163 // TerraLib::getInstance().finalize();
164 //}
165 
166 
An utility class to control the startup and cleanup of the TerraLib Platform and its resources...
std::string m_name
The module name: an internal value used to identify the module in the system. Must be a unique value...
Definition: TerraLib.h:99
const std::string & getModuleName(std::size_t i) const
It return the i-th module name.
Definition: TerraLib.cpp:146
CleanupFptr m_cleanupFptr
The module finalization routine.
Definition: TerraLib.h:101
std::size_t getModuleIdx(const std::string &moduleName) const
It returns the module index inside the internal data structure.
Definition: TerraLib.cpp:133
std::size_t getNumRegModules() const
It returns the number of registered modules.
Definition: TerraLib.cpp:128
void finalize()
It finalizes the TerraLib Platform.
Definition: TerraLib.cpp:64
StartupFptr m_startFptr
The module initialization routine.
Definition: TerraLib.h:100
std::vector< bool > m_initialized
The list of modules to be initialized when initialize is called.
Definition: TerraLib.h:265
void remove(const std::string &moduleName)
It removes the module entry identified by the given name.
Definition: TerraLib.cpp:101
std::vector< Module > m_modules
This static function is invoked automatically when the application finishes its execution.
Definition: TerraLib.h:264
void add(const Module &m)
It registers the module in the TerraLib Platform.
Definition: TerraLib.cpp:95
void initialize()
It initializes the TerraLib Platform.
Definition: TerraLib.cpp:33
TerraLib()
The singleton constructor is not callable outside the class.
Definition: TerraLib.cpp:152
This internal structure is used to model the basic information about a TerraLib module.
Definition: TerraLib.h:97