Orfeo Toolbox  4.0
otbGeometriesSet.cxx
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: ORFEO Toolbox
4  Language: C++
5  Date: $Date$
6  Version: $Revision$
7 
8 
9  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
10  See OTBCopyright.txt for details.
11 
12 
13  This software is distributed WITHOUT ANY WARRANTY; without even
14  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  PURPOSE. See the above copyright notices for more information.
16 
17 =========================================================================*/
18 
19 /*===========================================================================*/
20 /*===============================[ Includes ]================================*/
21 /*===========================================================================*/
22 #include "otbGeometriesSet.h"
23 #include <cassert>
24 
25 /*===========================================================================*/
26 /*================================[ Helpers ]================================*/
27 /*===========================================================================*/
28 namespace otb { namespace ogr { namespace internal {
29 
38 template <typename DataType> inline
39  DataType & getRef(typename itk::SmartPointer<DataType> const& ds)
40  {
41  assert(ds && "unexpected nil datasource");
42  return *ds;
43  }
44 
52 inline
54  {
55  return layer;
56  }
57 
65 inline
67  {
68  return layer;
69  }
70 } } } // otb::ogr::internal namespaces
71 
72 
73 /*===========================================================================*/
74 /*=======================[ Setting and construction ]========================*/
75 /*===========================================================================*/
77 : m_GeometriesSet(otb::ogr::DataSource::New())
78 , m_ImageReference(*this)
79 {
80 }
81 
83 : m_GeometriesSet(datasource)
84 , m_ImageReference(*this)
85 {
86  assert(datasource && "unexpected nil datasource");
87 }
88 
90 : m_GeometriesSet(layer)
91 , m_ImageReference(*this)
92 {
93 }
94 
95 /*static*/
97 {
98  Pointer res = new Self(datasource);
99  res->UnRegister();
100  return res;
101 }
102 
103 /*static*/
105 {
106  Pointer res = new Self(layer);
107  res->UnRegister();
108  return res;
109 }
110 
111 /*virtual*/
113 {
114 }
115 
117 {
118  assert(layer && "unexpected nil layer");
119  m_GeometriesSet = layer;
120 }
121 
123 {
124  assert(datasource && "unexpected nil datasource");
125  m_GeometriesSet = datasource;
126 }
127 
128 /*===========================================================================*/
129 /*=================================[ IsSet ]=================================*/
130 /*===========================================================================*/
131 namespace otb { namespace ogr { namespace internal {
138 struct IsSetTester : boost::static_visitor<bool>
139 {
140  template <typename T>
141  bool operator()(T const& gs) const
142  {
143  return getRef(gs);
144  }
145 };
146 } } } // otb::ogr::internal namespaces
147 
149 {
150  return this->apply(ogr::internal::IsSetTester());
151 }
152 
153 /*===========================================================================*/
154 /*===============================[ Printing ]================================*/
155 /*===========================================================================*/
156 namespace otb { namespace ogr { namespace internal {
163 struct Printer : boost::static_visitor<>
164 {
165  Printer(std::ostream& os, itk::Indent indent)
166  : m_os(os), m_indent(indent) {}
167  void operator()(otb::ogr::Layer layer) const
168  {
169  assert(layer && "unexpected nil layer...");
170  layer.PrintSelf(m_os, m_indent);
171  }
172  void operator()(otb::ogr::DataSource::Pointer datasource) const
173  {
174  assert(datasource && "unexpected nil datasource...");
175  datasource->Print(m_os, m_indent);
176  }
177 private:
178  std::ostream &m_os;
180 };
181 } } } // otb::ogr::internal namespaces
182 
183 void otb::GeometriesSet::PrintSelf(std::ostream& os, itk::Indent indent) const
184 {
185  this->apply(ogr::internal::Printer(os, indent));
186 }

Generated at Sat Mar 8 2014 15:57:36 for Orfeo Toolbox with doxygen 1.8.3.1