otbExtendedFilenameHelper.h 2.96 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
 * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES)
 *
 * This file is part of Orfeo Toolbox
 *
 *     https://www.orfeo-toolbox.org/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
20

21 22
#ifndef otbExtendedFilenameHelper_h
#define otbExtendedFilenameHelper_h
23 24 25

#include "itkObject.h"
#include "itkObjectFactory.h"
26
#include "OTBCommonExport.h"
27 28 29 30 31 32 33 34

namespace otb
{

/** \class ExtendedFilenameHelper
 *  \brief Helper to handle extended filenames.
 *
 *  \sa ImageFileReader
35 36
 *
 * \ingroup OTBExtendedFilename
37
 * \ingroup OTBCommon
38 39
 */

40
class OTBCommon_EXPORT ExtendedFilenameHelper : public itk::Object
41 42 43 44 45 46 47 48 49 50 51 52 53
{
public:
/** Standard class typedefs. */
  typedef ExtendedFilenameHelper        Self;
  typedef itk::SmartPointer<Self>       Pointer;
  typedef itk::SmartPointer<const Self> ConstPointer;
  typedef itk::Object                   Superclass;

  itkTypeMacro(ExtendedFilenameHelper, itk::Object);
  itkNewMacro(Self);

  typedef std::map< std::string, std::string > OptionMapType;

54 55 56
  virtual void SetExtendedFileName(const char * extFname);
  const OptionMapType & GetOptionMap(void) const;
  
57 58 59
  itkGetStringMacro(ExtendedFileName);
  itkGetStringMacro(SimpleFileName);

60
  struct OTBCommon_EXPORT GenericBandRange : std::pair<int,int>
61 62 63
  {
    GenericBandRange() {}

64
    GenericBandRange(int a);
65 66 67

    GenericBandRange(const std::pair<int,int>& a);

68
    GenericBandRange(int a,int b);
69 70 71 72 73

    bool SetString(const std::string& str, size_t start=0 , size_t size=std::string::npos);

    void Print(std::ostream& os);
  };
74

75 76
  /**  Decode the string into a list of GenericBandRange, band indexes are
   *  1-based. */
77
  std::vector<ExtendedFilenameHelper::GenericBandRange> GetGenericBandRange(const std::string &bandRange) const;
78 79 80 81

  /** Resolve the list of band ranges into real band indexes, according to
   *  a total number of bands in the image. Note that the output indexes are
   *  zero-based (0 is the first component) */
82
  bool ResolveBandRange(const std::string &bandRange, const unsigned int &nbBands, std::vector<unsigned int> &output) const;
83

84 85
protected:
  ExtendedFilenameHelper() {}
86
  ~ExtendedFilenameHelper() override {}
87 88

private:
89 90
  ExtendedFilenameHelper(const Self &) = delete;
  void operator =(const Self&) = delete;
91
  itkSetStringMacro(SimpleFileName);
92

93 94
  std::string                          m_ExtendedFileName;
  std::string                          m_SimpleFileName;
95 96 97 98 99
  OptionMapType                        m_OptionMap;

};
} // end namespace otb

100
#endif // otbExtendedFilenameHelper_h