otbExtendedFilenameHelper.h 3.45 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 26
#include <iosfwd>             // for ostream
#include <string>             // for string
#include <utility>            // for pair
27
#include "itkObjectFactory.h"
28 29 30 31
#include "itkMacro.h"        // for itkGetStringMacro, ExtendedFilenameHelp...
#include "itkSmartPointer.h"  // for SmartPointer
#include "itkObject.h"        // for Object
#include "OTBCommonExport.h"  // for OTBCommon_EXPORT
32 33 34 35 36 37 38 39

namespace otb
{

/** \class ExtendedFilenameHelper
 *  \brief Helper to handle extended filenames.
 *
 *  \sa ImageFileReader
40 41
 *
 * \ingroup OTBExtendedFilename
42
 * \ingroup OTBCommon
43 44
 */

45
class OTBCommon_EXPORT ExtendedFilenameHelper : public itk::Object
46 47 48 49 50 51 52 53 54 55 56 57 58
{
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;

59
  /** \deprecated const char* overload of SetExtendedFileName is deprecated, use std::string instead */
60
  virtual void SetExtendedFileName(const char * extFname);
61

62
  virtual void SetExtendedFileName(const std::string& extFname);
63

64 65
  const OptionMapType & GetOptionMap(void) const;
  
66 67 68
  itkGetStringMacro(ExtendedFileName);
  itkGetStringMacro(SimpleFileName);

69
  struct OTBCommon_EXPORT GenericBandRange : std::pair<int,int>
70 71 72
  {
    GenericBandRange() {}

73
    GenericBandRange(int a);
74 75 76

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

77
    GenericBandRange(int a,int b);
78 79 80

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

81
    void Print(std::ostream& os) const;
82
  };
83

84 85
  /**  Decode the string into a list of GenericBandRange, band indexes are
   *  1-based. */
86
  std::vector<ExtendedFilenameHelper::GenericBandRange> GetGenericBandRange(const std::string &bandRange) const;
87 88 89 90

  /** 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) */
91
  bool ResolveBandRange(const std::string &bandRange, const unsigned int &nbBands, std::vector<unsigned int> &output) const;
92

93
protected:
94 95
  ExtendedFilenameHelper() = default;
  ~ExtendedFilenameHelper() override = default;
96 97

private:
98 99
  ExtendedFilenameHelper(const Self &) = delete;
  void operator =(const Self&) = delete;
100
  itkSetStringMacro(SimpleFileName);
101

102 103
  std::string                          m_ExtendedFileName;
  std::string                          m_SimpleFileName;
104 105 106 107 108
  OptionMapType                        m_OptionMap;

};
} // end namespace otb

109
#endif // otbExtendedFilenameHelper_h