OTB  9.0.0
Orfeo Toolbox
otbWrapperParameterList.hxx
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2005-2022 Centre National d'Etudes Spatiales (CNES)
3  *
4  * This file is part of Orfeo Toolbox
5  *
6  * https://www.orfeo-toolbox.org/
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 
21 #ifndef otbWrapperParameterList_hxx
22 #define otbWrapperParameterList_hxx
23 
24 
25 #include <algorithm>
26 #include <iterator>
27 
28 #include "otbCast.h"
30 
31 
32 namespace otb
33 {
34 
35 namespace Wrapper
36 {
37 
38 
39 /*****************************************************************************/
40 template <typename T>
42 {
43 }
44 
45 /*****************************************************************************/
46 template <typename T>
48 {
49 }
50 
51 /*****************************************************************************/
52 template <typename T>
54 {
55  return m_Parameters.begin();
56 }
57 
58 /*****************************************************************************/
59 template <typename T>
61 {
62  return m_Parameters.end();
63 }
64 
66 template <typename T>
68 {
69  return Size() > 0 && std::all_of(begin(), end(), [](auto p) -> bool {
70  assert(p != nullptr);
71  return p && p->HasValue();
72  });
73 }
75 
76 /*****************************************************************************/
77 template <typename T>
79 {
80  m_Parameters.clear();
81 
82  Superclass::ClearValue();
83 }
84 
85 /*****************************************************************************/
86 template <typename T>
88 {
89  this->SetStrings(strings);
90 }
91 
92 /*****************************************************************************/
93 template <typename T>
94 void ParameterList<T>::InsertNullElement(std::size_t index)
95 {
96  m_Parameters.insert(index >= m_Parameters.size() ? m_Parameters.end() : m_Parameters.begin() + index, typename T::Pointer());
97 
98  SetActive(false);
99 
100  Modified();
101 }
102 
103 /*****************************************************************************/
104 template <typename T>
105 void ParameterList<T>::AddFromFileName(const std::string& filename)
106 {
107  assert(!filename.empty());
108 
109  typename T::Pointer p(T::New());
110 
111  p->FromString(filename);
112 
113  m_Parameters.push_back(p);
114 
115  assert(!m_Parameters.back().IsNull());
116 
117  SetActive(true);
118 
119  Modified();
120 }
121 
122 /*****************************************************************************/
123 template <typename T>
124 void ParameterList<T>::Insert(const std::string& filename, std::size_t index)
125 {
126  typename T::Pointer p(T::New());
127 
128  p->FromString(filename);
129 
130  InsertElement(p, index);
131 }
132 
133 /*****************************************************************************/
134 template <typename T>
135 void ParameterList<T>::InsertElement(typename T::Pointer p, std::size_t index)
136 {
137  m_Parameters.insert(m_Parameters.begin() + index, p);
138 
139  assert(!m_Parameters.back().IsNull());
140 
141  SetActive(true);
142 
143  Modified();
144 }
145 
147 template <typename T>
148 void ParameterList<T>::SetNthFileName(std::size_t i, const std::string& filename)
149 {
150  assert(i < m_Parameters.size());
151  assert(!m_Parameters[i].IsNull());
153 
154  m_Parameters[i]->FromString(filename);
155 
156  SetActive(true);
157 
158  Modified();
159 }
160 
161 /*****************************************************************************/
162 template <typename T>
163 std::size_t ParameterList<T>::SetStrings(const StringVector& strings)
164 {
165  // First clear previous file chosen
166  ClearValue();
167 
168  if (!strings.empty())
169  {
170  std::transform(strings.begin(), strings.end(), std::back_inserter(m_Parameters), [](auto s) -> auto {
171  typename T::Pointer parameter(T::New());
172  parameter->FromString(s);
173  return parameter;
174  });
175 
176  SetActive(true);
177  Modified();
178  }
179  return strings.size();
180 }
181 
182 /*****************************************************************************/
183 template <typename T>
184 std::size_t ParameterList<T>::GetStrings(StringVector& strings) const
185 {
186  std::transform(begin(), end(), std::back_inserter(strings), [](auto p) -> auto { return p->ToString(); });
187 
188  return m_Parameters.size();
189 }
190 
191 /*****************************************************************************/
192 template <typename T>
194 {
195  StringVector filenames;
196 
197  GetStrings(filenames);
198 
199  return filenames;
200 }
201 
202 /*****************************************************************************/
203 template <typename T>
204 std::string ParameterList<T>::GetNthFileName(std::size_t i) const
205 {
206  assert(i < m_Parameters.size());
207 
208  return m_Parameters[i]->ToString();
209 }
210 
212 template <typename T>
213 const std::string& ParameterList<T>::GetToolTip(std::size_t i) const
214 {
215  assert(i < m_Parameters.size());
216  assert(!m_Parameters[i].IsNull());
218 
219  return m_Parameters[i]->GetDescription();
220 }
221 
223 template <typename T>
224 void ParameterList<T>::Erase(std::size_t start, std::size_t count)
225 {
226  assert(start < m_Parameters.size());
227  assert(start + count <= m_Parameters.size());
229 
230  m_Parameters.erase(m_Parameters.begin() + start, m_Parameters.begin() + start + count);
231 
232  Modified();
233 }
234 
235 /*****************************************************************************/
236 template <typename T>
237 std::size_t ParameterList<T>::Size() const
238 {
239  return m_Parameters.size();
240 }
241 
243 template <typename T>
244 bool ParameterList<T>::IsActive(std::size_t i) const
245 {
246  assert(i < m_Parameters.size());
247  assert(!m_Parameters[i].IsNull());
249 
250  return m_Parameters[i]->GetActive();
251 }
252 
253 /*****************************************************************************/
254 template <typename T>
255 void ParameterList<T>::Swap(std::size_t i1, std::size_t i2)
256 {
257  assert(!m_Parameters.empty());
258 
259  auto clamp = [this](std::size_t i) -> std::size_t { return i >= m_Parameters.size() ? m_Parameters.size() - 1 : i; };
260 
261  std::swap(m_Parameters[clamp(i1)], m_Parameters[clamp(i2)]);
262 }
263 
265 template <typename T>
266 template <typename L, typename From, typename Get>
267 void ParameterList<T>::SetObjectList(L& this_list, const L& list, From from, Get get)
268 {
269  // Force update of input-list elements.
270  for (std::size_t i = 0; i < list.Size(); i++)
271  {
272  assert(list.GetNthElement(i) != nullptr);
274 
275  list.GetNthElement(i)->UpdateOutputInformation();
276  }
277 
278  // Clear previous target list.
279  ClearValue();
280 
281  for (std::size_t i = 0; i < list.Size(); i++)
282  {
283  assert(list.GetNthElement(i) != nullptr);
284 
285  typename T::Pointer parameter;
286 
287  from(parameter, list.GetNthElement(i));
288 
289  m_Parameters.push_back(parameter);
290 
291  assert(get(parameter) != nullptr);
292 
293  this_list.PushBack(get(parameter));
294  }
295 
296  SetActive(true);
297 
298  Modified();
299 }
300 
301 /*****************************************************************************/
302 template <typename T>
303 template <typename L, typename Get>
304 typename L::ObjectType* ParameterList<T>::GetObjectList(L& this_list, Get get)
305 {
306  assert(this_list);
307 
308  this_list->Clear();
309 
310  std::for_each(begin(), end(), [this_list, get](auto parameter) -> void {
311  assert(parameter);
312  assert(parameter == otb::DynamicCast<T>(parameter));
313 
314  assert(get(DynamicCast<T>(parameter)));
315 
316  this_list->PushBack(get(DynamicCast<T>(parameter)));
317  });
318 
319  return this_list;
320 }
321 
322 /*****************************************************************************/
323 template <typename T>
324 template <typename L, typename Get>
325 const typename L::ObjectType* ParameterList<T>::GetObjectList(L& this_list, Get get) const
326 {
327  return const_cast<ParameterList<T>*>(this)->GetObjectList(this_list, get);
328 }
329 
330 /*****************************************************************************/
331 template <typename T>
332 template <typename D, typename From>
333 void ParameterList<T>::AddData(D* data, From from)
334 {
335  assert(data != nullptr);
336 
337  // Check input availability
338  data->UpdateOutputInformation();
339 
340  // Build & add parameter.
341  m_Parameters.push_back(from(data));
342 
343  Modified();
344 }
345 
346 /*****************************************************************************/
347 template <typename T>
348 template <typename D, typename Set>
349 typename T::Pointer ParameterList<T>::FromData(D* data, Set set, const std::string& description)
350 {
351  assert(data != nullptr);
352 
353  typename T::Pointer p(T::New());
354 
355  return FromData(p, data, set, description);
356 }
357 
358 /*****************************************************************************/
359 template <typename T>
360 template <typename D, typename Set>
361 typename T::Pointer& ParameterList<T>::FromData(typename T::Pointer& parameter, D* data, Set set, const std::string& description)
362 {
363  assert(data != nullptr);
364 
365  set(parameter, data);
366  parameter->SetDescription(description);
367 
368  return parameter;
369 }
370 
371 template <typename T>
372 std::vector<std::string> ParameterList<T>::ToStringList() const
373 {
374  return GetFileNameList();
375 }
376 
377 template <typename T>
378 void ParameterList<T>::FromStringList(const std::vector<std::string>& value)
379 {
380  SetStrings(value);
381 }
382 
383 template <typename T>
384 std::string ParameterList<T>::ToString() const
385 {
386  std::ostringstream oss;
387  oss << std::setprecision(10);
388  auto strList = GetFileNameList();
389  for (size_t i = 0; i < strList.size(); i++)
390  {
391  if (i != 0)
392  {
393  oss << " ";
394  }
395  oss << strList[i];
396  }
397  return oss.str();
398 }
399 
400 template <typename T>
401 typename T::Pointer ParameterList<T>::GetNthElement(std::size_t i)
402 {
403  return m_Parameters[i];
404 }
405 
406 } // End namespace Wrapper
407 
408 
409 } // End namespace otb
410 
411 
412 #endif
otb::Wrapper::ParameterList::begin
ParameterVector::const_iterator begin() const
Definition: otbWrapperParameterList.hxx:53
otb::Wrapper::ParameterList
This class represents a InputImage parameter.
Definition: otbWrapperParameterList.h:42
otb
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.
Definition: otbJoinContainer.h:32
otbWrapperParameterList.h
otbCast.h
otb::Wrapper::ParameterList::end
ParameterVector::const_iterator end() const
Definition: otbWrapperParameterList.hxx:60
otb::Wrapper::AbstractParameterList
This class is a base class for list-type parameters.
Definition: otbWrapperAbstractParameterList.h:41
otb::Wrapper::StringListInterface::StringVector
std::vector< std::string > StringVector
Definition: otbWrapperStringListInterface.h:48
otb::clamp
constexpr T const & clamp(T const &v, T const &lo, T const &hi) noexcept
Definition: otbAlgoClamp.h:33
otb::Wrapper::ParameterList::ParameterList
ParameterList()
Definition: otbWrapperParameterList.hxx:41