XdmfTIFFController.hpp 7.68 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
/*****************************************************************************/
/*                                    XDMF                                   */
/*                       eXtensible Data Model and Format                    */
/*                                                                           */
/*  Id : XdmfTIFFController.hpp                                              */
/*                                                                           */
/*  Author:                                                                  */
/*     Kenneth Leiter                                                        */
/*     kenneth.leiter@arl.army.mil                                           */
/*     US Army Research Laboratory                                           */
/*     Aberdeen Proving Ground, MD                                           */
/*                                                                           */
/*     Copyright @ 2011 US Army Research Laboratory                          */
/*     All Rights Reserved                                                   */
/*     See Copyright.txt for details                                         */
/*                                                                           */
/*     This software is distributed WITHOUT ANY WARRANTY; without            */
/*     even the implied warranty of MERCHANTABILITY or FITNESS               */
/*     FOR A PARTICULAR PURPOSE.  See the above copyright notice             */
/*     for more information.                                                 */
/*                                                                           */
/*****************************************************************************/

#ifndef XDMFTIFFCONTROLLER_HPP_
#define XDMFTIFFCONTROLLER_HPP_

// C Compatible Includes
#include "XdmfCore.hpp"
#include "XdmfHeavyDataController.hpp"

#ifdef __cplusplus

/**
 * @brief Couples an XdmfArray with TIFF data stored on disk.
 *
 * Serves as an interface between data stored in XdmfArrays and data
 * stored in tiff files on disk. When an Xdmf file is read from or
 * written to disk an XdmfTIFFController is attached to
 * XdmfArrays. This allows data to be released from memory but still
 * be accessible or have its location written to light data.
 */
class XDMFCORE_EXPORT XdmfTIFFController : public XdmfHeavyDataController {

public:

  virtual ~XdmfTIFFController();

  /**
   * Create a new controller for an TIFF file on disk.
   *
   * Example of use:
   *
   * C++
   *
   * @dontinclude ExampleXdmfTIFFController.cpp
   * @skipline //#initializationsimplified
   * @until //#initializationsimplified
   *
   * Python
   *
   * @dontinclude XdmfExampleTIFFController.py
   * @skipline #//initializationsimplified
   * @until #//initializationsimplified
   *
   * @param     filePath                The location of the tiff file the data
   *                                    set resides in.
   * @param     type                    The data type of the dataset to read.
   * @param     dimensions              The number of elements to select in each
   *                                    dimension from the data set.
   *                                    (size in each dimension)
   *
   * @return    New TIFF Controller.
   */
  static shared_ptr<XdmfTIFFController>
  New(const std::string & filePath,
      const shared_ptr<const XdmfArrayType> & type,
      const std::vector<unsigned int> & dimensions);

  /**
   * Create a new controller for an TIFF file on disk.
   *
   * Example of use:
   *
   * C++
   *
   * @dontinclude ExampleXdmfTIFFController.cpp
   * @skipline //#initialization
   * @until //#initialization
   *
   * Python
   *
   * @dontinclude XdmfExampleTIFFController.py
   * @skipline #//initialization
   * @until #//initialization
   *
   * @param     filePath                The location of the tiff file the data set resides in.
   * @param     type                    The data type of the dataset to read.
   * @param     starts                  The offset of the starting element in each
   *                                    dimension in the data set.
   * @param     strides                 The number of elements to move in each
   *                                    dimension from the data set.
   * @param     dimensions              The number of elements to select in each
   *                                    dimension from the data set.
   *                                    (size in each dimension)
   * @param     dataspaces              The number of elements in the entire
   *                                    data set (may be larger than
   *                                    dimensions if using hyperslabs).
   *
   * @return    New TIFF Controller.
   */
  static shared_ptr<XdmfTIFFController>
  New(const std::string & filePath,
      const shared_ptr<const XdmfArrayType> & type,
      const std::vector<unsigned int> & starts,
      const std::vector<unsigned int> & strides,
      const std::vector<unsigned int> & dimensions,
      const std::vector<unsigned int> & dataspaces);

  virtual std::string getName() const;

  virtual void 
  getProperties(std::map<std::string, std::string> & collectedProperties) const;

  virtual void read(XdmfArray * const array);

  XdmfTIFFController(const XdmfTIFFController &);

protected:

  XdmfTIFFController(const std::string & filePath,
                     const shared_ptr<const XdmfArrayType> & type,
                     const std::vector<unsigned int> & starts,
                     const std::vector<unsigned int> & strides,
                     const std::vector<unsigned int> & dimensions,
                     const std::vector<unsigned int> & dataspaces);

  virtual shared_ptr<XdmfHeavyDataController>
  createSubController(const std::vector<unsigned int> & starts,
                      const std::vector<unsigned int> & strides,
                      const std::vector<unsigned int> & dimensions);

  unsigned int getNumberDirectories() const;

  void readToArray(XdmfArray * const array,
                   void * pointer,
                   unsigned int offset,
                   unsigned int start,
                   unsigned int stride,
                   unsigned int amount,
                   shared_ptr<const XdmfArrayType> type);

private:

  void operator=(const XdmfTIFFController &);  // Not implemented.
};

#endif

#ifdef __cplusplus
extern "C" {
#endif

struct XDMFTIFFCONTROLLER; // Simply as a typedef to ensure correct typing
typedef struct XDMFTIFFCONTROLLER XDMFTIFFCONTROLLER;

XDMFCORE_EXPORT XDMFTIFFCONTROLLER * XdmfTIFFControllerNew(char * filePath,
                                                           int type,
                                                           unsigned int * dimensions,
                                                           unsigned int numDims,
                                                           int * status);

XDMFCORE_EXPORT XDMFTIFFCONTROLLER * XdmfTIFFControllerNewHyperslab(char * filePath,
                                                                    int type,
                                                                    unsigned int * starts,
                                                                    unsigned int * strides,
                                                                    unsigned int * dimensions,
                                                                    unsigned int * dataspaces,
                                                                    unsigned int numDims,
                                                                    int * status);

XDMF_HEAVYCONTROLLER_C_CHILD_DECLARE(XdmfTIFFController, XDMFTIFFCONTROLLER, XDMFCORE)

#ifdef __cplusplus
}
#endif

#endif /* XDMFTIFFCONTROLLER_HPP_ */