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 
00014 template<typename DataType>
00015 class Buffer {
00016   public:
00017     const Segment & m_segment;
00018   private:
00019     const unsigned int m_channels;
00020     const unsigned int m_size;
00021     DataType * m_data;
00022 
00023   public:
00024     explicit Buffer(const Segment & segment, unsigned int channels = 4);
00025     virtual ~Buffer();
00026 
00027     DataType & operator()(unsigned int x,unsigned int y,unsigned int channel) {
00028         assert(m_data != 0);
00029         return m_data[(y * m_size + x) * m_channels + channel];
00030     }
00031 
00032     const DataType & operator()(unsigned int x,
00033                                 unsigned int y,
00034                                 unsigned int channel) const {
00035         assert(m_data != 0);
00036         return m_data[(y * m_size + x) * m_channels + channel];
00037     }
00038     
00039     const Segment & getSegment() const {
00040         return m_segment;
00041     }
00042 
00043     unsigned int getSize() const {
00044         return m_size;
00045     }
00046 
00047     unsigned int getChannels() const {
00048         return m_channels;
00049     }
00050 
00051     DataType * getData() {
00052         return m_data;
00053     }
00054 
00055     void allocate() {
00056         assert(m_data == 0);
00057         m_data = new DataType[m_size * m_size * m_channels];
00058     }
00059 
00060     bool isValid() const {
00061         return (m_data != 0);
00062     }
00063 
00064     void invalidate() {
00065         delete [] m_data;
00066         m_data = 0;
00067     }
00068 
00069 };
00070 
00071 } // namespace Mercator
00072 
00073 #endif // MERCATOR_BUFFER_H

Generated on Sun Aug 27 21:43:56 2006 for Mercator by  doxygen 1.4.7