Mercator
|
00001 // This file may be redistributed and modified only under the terms of 00002 // the GNU General Public License (See COPYING for details). 00003 // Copyright (C) 2003 Alistair Riddoch 00004 00005 #ifndef MERCATOR_BUFFER_H 00006 #define MERCATOR_BUFFER_H 00007 00008 namespace Mercator { 00009 00010 class Segment; 00011 00013 template<typename DataType> 00014 class Buffer { 00015 public: 00017 const Segment & m_segment; 00018 private: 00020 const unsigned int m_channels; 00022 const unsigned int m_size; 00024 DataType * m_data; 00025 00026 public: 00031 explicit Buffer(const Segment & segment, unsigned int channels = 4); 00032 virtual ~Buffer(); 00033 00039 DataType & operator()(unsigned int x,unsigned int y,unsigned int channel) { 00040 return m_data[(y * m_size + x) * m_channels + channel]; 00041 } 00042 00048 const DataType & operator()(unsigned int x, 00049 unsigned int y, 00050 unsigned int channel) const { 00051 return m_data[(y * m_size + x) * m_channels + channel]; 00052 } 00053 00055 const Segment & getSegment() const { 00056 return m_segment; 00057 } 00058 00060 unsigned int getSize() const { 00061 return m_size; 00062 } 00063 00065 unsigned int getChannels() const { 00066 return m_channels; 00067 } 00068 00070 DataType * getData() { 00071 return m_data; 00072 } 00073 00078 void allocate() { 00079 m_data = new DataType[m_size * m_size * m_channels]; 00080 } 00081 00085 bool isValid() const { 00086 return (m_data != 0); 00087 } 00088 00092 void invalidate() { 00093 delete [] m_data; 00094 m_data = 0; 00095 } 00096 00097 }; 00098 00099 } // namespace Mercator 00100 00101 #endif // MERCATOR_BUFFER_H