Mercator
Buffer.h
1 // This file may be redistributed and modified only under the terms of
2 // the GNU General Public License (See COPYING for details).
3 // Copyright (C) 2003 Alistair Riddoch
4 
5 #ifndef MERCATOR_BUFFER_H
6 #define MERCATOR_BUFFER_H
7 
8 namespace Mercator {
9 
10 class Segment;
11 
13 template<typename DataType>
14 class Buffer {
15  public:
17  const Segment & m_segment;
18  private:
20  const unsigned int m_channels;
22  const unsigned int m_size;
24  DataType * m_data;
25 
26  public:
31  explicit Buffer(const Segment & segment, unsigned int channels = 4);
32  virtual ~Buffer();
33 
39  DataType & operator()(unsigned int x,unsigned int y,unsigned int channel) {
40  return m_data[(y * m_size + x) * m_channels + channel];
41  }
42 
48  const DataType & operator()(unsigned int x,
49  unsigned int y,
50  unsigned int channel) const {
51  return m_data[(y * m_size + x) * m_channels + channel];
52  }
53 
55  const Segment & getSegment() const {
56  return m_segment;
57  }
58 
60  unsigned int getSize() const {
61  return m_size;
62  }
63 
65  unsigned int getChannels() const {
66  return m_channels;
67  }
68 
70  DataType * getData() {
71  return m_data;
72  }
73 
78  void allocate() {
79  m_data = new DataType[m_size * m_size * m_channels];
80  }
81 
85  bool isValid() const {
86  return (m_data != 0);
87  }
88 
92  void invalidate() {
93  delete [] m_data;
94  m_data = 0;
95  }
96 
97 };
98 
99 } // namespace Mercator
100 
101 #endif // MERCATOR_BUFFER_H