All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Functions.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/idl/Functions.cpp
22 
23 \brief IDL module functions.
24 */
25 
26 #include "Functions.h"
27 
29 
30 #include <terralib/plugin.h>
31 #include <terralib/common.h>
33 
34 namespace te
35 {
36  namespace idl
37  {
38  int idl2TerralibType( const UCHAR& idlType )
39  {
40  switch( idlType )
41  {
42  case IDL_TYP_BYTE :
43  {
44  return te::dt::CHAR_TYPE;
45  break;
46  }
47  case IDL_TYP_INT :
48  {
49  return te::dt::INT16_TYPE;
50  break;
51  }
52  case IDL_TYP_UINT :
53  {
54  return te::dt::UINT16_TYPE;
55  break;
56  }
57  case IDL_TYP_LONG :
58  {
59  return te::dt::INT32_TYPE;
60  break;
61  }
62  case IDL_TYP_ULONG :
63  {
64  return te::dt::UINT32_TYPE;
65  break;
66  }
67  case IDL_TYP_LONG64 :
68  {
69  return te::dt::INT64_TYPE;
70  break;
71  }
72  case IDL_TYP_ULONG64 :
73  {
74  return te::dt::UINT64_TYPE;
75  break;
76  }
77  case IDL_TYP_FLOAT :
78  {
79  return te::dt::FLOAT_TYPE;
80  break;
81  }
82  case IDL_TYP_DOUBLE :
83  {
84  return te::dt::DOUBLE_TYPE;
85  break;
86  }
87  case IDL_TYP_COMPLEX :
88  {
89  return te::dt::CFLOAT_TYPE;
90  break;
91  }
92  case IDL_TYP_DCOMPLEX :
93  {
94  return te::dt::CFLOAT_TYPE;
95  break;
96  }
97  case IDL_TYP_STRING :
98  {
99  return te::dt::STRING_TYPE;
100  break;
101  }
102  case IDL_TYP_PTR :
103  {
104  return te::dt::VOID_TYPE;
105  break;
106  }
107  default:
108  {
109  return te::dt::UNKNOWN_TYPE;
110  break;
111  }
112  }
113  }
114 
115  UCHAR terralib2IdlType( const int& tlType )
116  {
117  switch( tlType )
118  {
119  case te::dt::CHAR_TYPE :
120  {
121  return IDL_TYP_BYTE;
122  break;
123  }
124  case te::dt::INT16_TYPE :
125  {
126  return IDL_TYP_INT;
127  break;
128  }
129  case te::dt::UINT16_TYPE :
130  {
131  return IDL_TYP_UINT;
132  break;
133  }
134  case te::dt::INT32_TYPE :
135  {
136  return IDL_TYP_LONG;
137  break;
138  }
139  case te::dt::UINT32_TYPE :
140  {
141  return IDL_TYP_ULONG;
142  break;
143  }
144  case te::dt::INT64_TYPE :
145  {
146  return IDL_TYP_LONG64;
147  break;
148  }
149  case te::dt::UINT64_TYPE :
150  {
151  return IDL_TYP_ULONG64;
152  break;
153  }
154  case te::dt::FLOAT_TYPE :
155  {
156  return IDL_TYP_FLOAT;
157  break;
158  }
159  case te::dt::DOUBLE_TYPE :
160  {
161  return IDL_TYP_DOUBLE;
162  break;
163  }
164  case te::dt::CFLOAT_TYPE :
165  {
166  return IDL_TYP_COMPLEX;
167  break;
168  }
169  case te::dt::CDOUBLE_TYPE :
170  {
171  return IDL_TYP_DCOMPLEX;
172  break;
173  }
174  case te::dt::STRING_TYPE :
175  {
176  return IDL_TYP_STRING;
177  break;
178  }
179  case te::dt::VOID_TYPE :
180  {
181  return IDL_TYP_PTR;
182  break;
183  }
184  default:
185  {
186  return IDL_TYP_UNDEF;
187  break;
188  }
189  }
190  }
191 
193  {
194  {
196  info.m_name = "te.da.ogr";
197  info.m_displayName = "OGR DataSource Driver";
198  info.m_description = "This data source driver supports spatial data managed by OGR";
199  info.m_engine = "C++";
200 // info.m_folder = PLUGINS_PATH;
201 
202  std::pair<std::string, std::string> rsc("SharedLibraryName", "terralib_ogr");
203 
204  info.m_resources.push_back(rsc);
205 
207  }
208 
209  {
210  std::pair<std::string, std::string> rsc("SharedLibraryName", "terralib_gdal");
211 
213  info.m_name = "te.da.gdal";
214  info.m_displayName = "GDAL DataSource Driver";
215  info.m_description = "This data source driver supports spatial data managed by GDAL";
216  info.m_engine = "C++";
217 // info.m_folder = PLUGINS_PATH;
218  info.m_resources.push_back(rsc);
219 
221  }
222  }
223 
224  bool createRasterFromIdlArray( IDL_VPTR idlValuePointer,
225  const bool takeBufferOwnership,
226  boost::shared_ptr< te::rst::Raster >& outRasterPtr )
227  {
228  if( ! ( idlValuePointer->flags & IDL_V_ARR) )
229  {
230  return false;
231  }
232  else
233  {
234  unsigned int nLines = 0;
235  unsigned int nCols = 0;
236  unsigned int nBands = 0;
237 
238  if( idlValuePointer->value.arr->n_dim == 2 )
239  {
240  nLines = (unsigned int)idlValuePointer->value.arr->dim[ 1 ];
241  nCols = (unsigned int)idlValuePointer->value.arr->dim[ 0 ];
242  nBands = 1;
243  }
244  else if( idlValuePointer->value.arr->n_dim == 3 )
245  {
246  nLines = (unsigned int)idlValuePointer->value.arr->dim[ 2 ];
247  nCols = (unsigned int)idlValuePointer->value.arr->dim[ 1 ];
248  nBands = (unsigned int)idlValuePointer->value.arr->dim[ 0 ];
249  }
250  else
251  {
252  return false;
253  }
254 
255  const int tlDataType = idl2TerralibType( idlValuePointer->type );
256 
257  std::map<std::string, std::string> rasterInfo;
258  rasterInfo["MEM_IS_DATA_BUFFER"] = "TRUE";
259  rasterInfo["MEM_BUFFER_NCOLS"] = te::common::Convert2String( nCols );
260  rasterInfo["MEM_BUFFER_NROWS"] = te::common::Convert2String( nLines );
261  rasterInfo["MEM_BUFFER_DATATYPE"] = te::common::Convert2String( tlDataType );
262  rasterInfo["MEM_BUFFER_NBANDS"] = te::common::Convert2String( nBands );
263 
264  outRasterPtr.reset( te::rst::RasterFactory::make(
265  "MEM",
266  rasterInfo,
267  idlValuePointer->value.arr->data,
268  takeBufferOwnership ? te::idl::deleteArray : te::idl::dummyFunction ) );
269 
270  if( outRasterPtr.get() )
271  {
272  return true;
273  }
274  else
275  {
276  outRasterPtr.reset();
277  return false;
278  }
279 
280  }
281  }
282 
283  } // namespace idl
284 } // namespace te
285 
std::string m_name
The plugin name: an internal value used to identify the plugin in the system. Must be a unique value...
Definition: PluginInfo.h:66
void dummyFunction(void *)
A dummy function for internal use.
Definition: Functions.h:69
This file contains include headers for the Plugin module of TerraLib.
std::string m_displayName
The plugin name to be displayed in a graphical interface.
Definition: PluginInfo.h:67
IDL module functions.
void deleteArray(void *arrayPtr)
Delete an array of elements.
Definition: Functions.h:74
std::string m_engine
The type of plugin execution engine: C++, JAVA.
Definition: PluginInfo.h:71
static PluginManager & getInstance()
It returns a reference to the singleton instance.
void loadTerralibModules()
Load the required terralib modules.
Definition: Functions.cpp:192
bool createRasterFromIdlArray(IDL_VPTR idlValuePointer, const bool takeBufferOwnership, boost::shared_ptr< te::rst::Raster > &outRasterPtr)
Definition: Functions.cpp:224
static Raster * make()
It creates and returns an empty raster with default raster driver.
std::vector< Resource > m_resources
The list of resources used by plugin.
Definition: PluginInfo.h:81
std::string m_description
A brief explanation about the plugin.
Definition: PluginInfo.h:68
General enumerations for the data type module.
This file contains include headers for the TerraLib Common Runtime module.
This is the abstract factory for Rasters.
std::string Convert2String(boost::int16_t value)
It converts a short integer value to a string.
Definition: StringUtils.h:51
The basic information about a plugin.
Definition: PluginInfo.h:61
UCHAR terralib2IdlType(const int &tlType)
Convert Terralib data types to IDL data types.
Definition: Functions.cpp:115
int idl2TerralibType(const UCHAR &idlType)
Convert IDL data types to Terralib data types.
Definition: Functions.cpp:38