Simpact Cyan
Population based event driven simulation using mNRM
tiffdensityfile.h
1 #ifndef TIFFDENSITYFILE_H
2 
3 #define TIFFDENSITYFILE_H
4 
5 #include "errut/errorbase.h"
6 #include <assert.h>
7 #include <vector>
8 
9 class TIFFDensityFile : public errut::ErrorBase
10 {
11 public:
12  TIFFDensityFile();
13  ~TIFFDensityFile();
14 
15  // Note: everything will be converted to doubles!
16  bool init(const std::string &fileName);
17  int getWidth() const { return m_width; }
18  int getHeight() const { return m_height; }
19  double getValue(int x, int y) const;
20 private:
21  bool readTiffFile(const std::string &fileName);
22 
23  int m_width, m_height;
24  std::vector<double> m_values;
25 
26  class Tile
27  {
28  public:
29  Tile() { }
30  Tile(size_t s) { m_buffer.resize(s); }
31  Tile(const Tile &src) { m_buffer = src.m_buffer; }
32  float *getData() { assert(m_buffer.size() > 0); return &(m_buffer[0]); }
33  private:
34  std::vector<float> m_buffer;
35  };
36 };
37 
38 inline double TIFFDensityFile::getValue(int x, int y) const
39 {
40  assert(x >= 0 && x < m_width);
41  assert(y >= 0 && y < m_height);
42 
43  int idx = x + y*m_width;
44  assert(idx >= 0 && idx < m_values.size());
45 
46  return m_values[idx];
47 }
48 
49 #endif // TIFFDENSITYFILE_H
Base class which allows an error message to be set.
Definition: errorbase.h:49