Mercator

Buffer.h

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 #include <cassert>
00009 
00010 namespace Mercator {
00011 
00012 class Segment;
00013 
00015 template<typename DataType>
00016 class Buffer {
00017   public:
00019     const Segment & m_segment;
00020   private:
00022     const unsigned int m_channels;
00024     const unsigned int m_size;
00026     DataType * m_data;
00027 
00028   public:
00033     explicit Buffer(const Segment & segment, unsigned int channels = 4);
00034     virtual ~Buffer();
00035 
00041     DataType & operator()(unsigned int x,unsigned int y,unsigned int channel) {
00042         assert(m_data != 0);
00043         return m_data[(y * m_size + x) * m_channels + channel];
00044     }
00045 
00051     const DataType & operator()(unsigned int x,
00052                                 unsigned int y,
00053                                 unsigned int channel) const {
00054         assert(m_data != 0);
00055         return m_data[(y * m_size + x) * m_channels + channel];
00056     }
00057     
00059     const Segment & getSegment() const {
00060         return m_segment;
00061     }
00062 
00064     unsigned int getSize() const {
00065         return m_size;
00066     }
00067 
00069     unsigned int getChannels() const {
00070         return m_channels;
00071     }
00072 
00074     DataType * getData() {
00075         return m_data;
00076     }
00077 
00082     void allocate() {
00083         assert(m_data == 0);
00084         m_data = new DataType[m_size * m_size * m_channels];
00085     }
00086 
00090     bool isValid() const {
00091         return (m_data != 0);
00092     }
00093 
00097     void invalidate() {
00098         delete [] m_data;
00099         m_data = 0;
00100     }
00101 
00102 };
00103 
00104 } // namespace Mercator
00105 
00106 #endif // MERCATOR_BUFFER_H