USGS

Isis 3.0 Object Programmers' Reference

Home

Isis::Buffer Class Reference
[Low Level Cube I/O]

Buffer for reading and writing cube data. More...

#include <Buffer.h>

Inheritance diagram for Isis::Buffer:
Inheritance graph
[legend]
Collaboration diagram for Isis::Buffer:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 Buffer ()
 Default constructor for proper initialization purposes.
 Buffer (const int nsamps, const int nlines, const int nbands, const Isis::PixelType type)
 Creates a Buffer object.
 ~Buffer ()
 Destroys the Buffer object and frees shape buffer.
 Buffer (const Buffer &)
 The copy constructor.
Bufferoperator= (const double &d)
 Assign the entire buffer to a constant double value.
int SampleDimension () const
 Returns the number of samples in the shape buffer.
int LineDimension () const
 Returns the number of lines in the shape buffer.
int BandDimension () const
 Returns the number of bands in the shape buffer.
int size () const
 Returns the total number of pixels in the shape buffer.
int Sample (const int index=0) const
 Returns the sample position associated with a shape buffer index.
int Line (const int index=0) const
 Returns the line position associated with a shape buffer index.
int Band (const int index=0) const
 Returns the band position associated with a shape buffer index.
void Position (const int index, int &i_samp, int &i_line, int &i_band) const
 Returns the sample, line, and band position associated with a shape buffer index.
int Index (const int i_samp, const int i_line, const int i_band) const
 Given a sample, line, and band position, this returns the appropriate index in the shape buffer.
double at (const int index) const
 Returns the value in the shape buffer at the given index.
double & operator[] (const int index)
 Returns the value in the shape buffer at given index.
const double & operator[] (const int index) const
 Returns the value in the shape buffer at given index.
double * DoubleBuffer () const
 Returns the value of the shape buffer.
void Copy (const Buffer &in, bool includeRawBuf=true)
 Allows copying of the buffer contents to another Buffer.
bool CopyOverlapFrom (const Buffer &in)
 Allows copying of the buffer contents of a larger buffer to another same size or smaller Buffer, using their base positions to relate data.
void * RawBuffer () const
 Returns a void pointer to the raw buffer.
Isis::PixelType PixelType () const
 Returns the raw buffer pixel type.

Protected Member Functions

void SetBasePosition (const int start_sample, const int start_line, const int start_band)
 This method is used to set the base position of the shape buffer.
void SetBaseSample (const int start_samp)
 This method is used to set the base sample position of the shape buffer.
void SetBaseLine (const int start_line)
 This method is used to set the base line position of the shape buffer.
void SetBaseBand (const int start_band)
 This method is used to set the base band position of the shape buffer.
void Allocate ()
 Size or resize the memory buffer.
Bufferoperator= (const Buffer &rvalue)
 Copy operator.

Protected Attributes

int p_sample
 Starting sample to read/write.
int p_nsamps
 Number of samples to read/write.
int p_line
 Starting line to read/write.
int p_nlines
 Number of lines to read/write.
int p_band
 Starting band to read/write.
int p_nbands
 Number of bands to read/write.
int p_npixels
 Number of pixels (nsamps * nlines * nbands).
double * p_buf
 Shape buffer allocated to the size of npixels for handling reads/writes.
const Isis::PixelType p_pixelType
 The pixel type of the raw buffer.
void * p_rawbuf
 The raw dm read from the disk.

Detailed Description

Buffer for reading and writing cube data.

This is the base class for I/O on buffers of data from cubes. The programmer can define an arbitrary shape using this object and then read or write that shape from a cube. Some example shapes are lines, tiles, columns, cublets, and spectral pencils. Data which is read or written to a cube will always be contained within an internal buffer of type double. There are methods for querying the sample/line/band position based upon the buffer index. Note that this class does not read/write data but is used in conjunction with the class to read/write data. Even more powerful are the BufferManager classes which inherit this object and can step through cubes by line, tile, boxcar, column, etc.

If you would like to see Buffer being used in implementation, see circle.cpp

Author:
2002-04-09 Kris Becker & Jeff Anderson

For internal use only.

History:
2003-05-16 Stuart Sides - modified schema from astrogeology...isis.astrogeology
History:
2005-01-16 Jeff Anderson - moved some private methods/variables into protected space
History:
2007-09-05 Kris Becker - Added default constructor for added protection; Added assignment operator for a single value for convenience.
History:
2008-06-25 Noah Hilt - Added some safety measures to the allocate and deconstructor methods to prevent accessing buffers that have not been initialized. Added memory checking to make sure to release any memory if initialized.
History:
2010-06-22 Steven Lambright - "Copy" now ensures pixel types are the same to prevent going out of memory bounds
History:
2012-07-02 Steven Lambright and Stuart Sides - Added "includeRawBuf" to Copy(). We did this to simplify implementation in Cube::copy()... this ought to be usable in many other areas also. References #961.
History:
2012-11-19 Steven Lambright - Added CopyOverlapFrom() for use as a quicker IO than going back to Cube. References #1232.

Definition at line 68 of file Buffer.h.


Constructor & Destructor Documentation

Isis::Buffer::Buffer (  ) 

Default constructor for proper initialization purposes.

This constructor is mostly useless but is needed so that it protects against improper usage.

Definition at line 41 of file Buffer.cpp.

Isis::Buffer::Buffer ( const int  nsamps,
const int  nlines,
const int  nbands,
const Isis::PixelType  type 
)

Creates a Buffer object.

Note that the number of pixels in the buffer can not exceed 2GB.

Parameters:
nsamps Number of samples in shape.
nlines Number of lines in shape.
nbands Number of bands in shape.
type Raw buffer pixel type
Exceptions:
Isis::iException::Programmer - Invalid value for a dimension

Definition at line 56 of file Buffer.cpp.

References _FILEINFO_, Allocate(), p_band, p_line, p_nbands, p_nlines, p_npixels, p_nsamps, p_sample, and Isis::IException::Programmer.

Isis::Buffer::~Buffer (  ) 

Destroys the Buffer object and frees shape buffer.

Definition at line 82 of file Buffer.cpp.

References p_buf, and p_rawbuf.

Isis::Buffer::Buffer ( const Buffer rhs  ) 

The copy constructor.

Allows a new Buffer object to be created using an existing Buffer object.

Parameters:
rhs The Buffer to be used to create the new buffer

Definition at line 322 of file Buffer.cpp.

References Allocate(), Copy(), p_band, p_line, p_npixels, and p_sample.


Member Function Documentation

void Isis::Buffer::Allocate (  )  [protected]

Size or resize the memory buffer.

Exceptions:
Isis::iException::System - Memory allocation failed

Definition at line 341 of file Buffer.cpp.

References _FILEINFO_, Isis::Message::MemoryAllocationFailed(), p_buf, p_npixels, p_pixelType, p_rawbuf, Isis::SizeOf(), and Isis::IException::Unknown.

Referenced by Buffer(), and Isis::Brick::Resize().

double Isis::Buffer::at ( const int  index  )  const

Returns the value in the shape buffer at the given index.

Parameters:
index Index position in buffer. Out of bounds index is trapped.
Returns:
double Buffer value at index
Exceptions:
Isis::iException::Programmer - Array Subscript not in range

Definition at line 238 of file Buffer.cpp.

References _FILEINFO_, Isis::Message::ArraySubscriptNotInRange(), p_buf, p_npixels, and Isis::IException::Programmer.

Referenced by Isis::CubeDataThreadTester::BrickChanged(), Isis::ViewportBuffer::DataReady(), Isis::ViewportBuffer::fillBuffer(), Isis::StatisticsTool::getStatistics(), Isis::CubeDataThreadTester::ReadBrick(), and Isis::CubeDataThreadTester::ReadWriteBrick().

int Isis::Buffer::Band ( const int  index = 0  )  const

Returns the band position associated with a shape buffer index.

The shape buffer is one dimensional. Let us assume a nsamps=2, nlines=3, and nbands=2. Therefore the total size of the shape buffer is 12 and valid index values are 0-11. Indexes 0-5 will return band 1 and 6-11 will return band 2.

Parameters:
index Shape buffer index to map to a band position. Defaults to 0.
Returns:
int The absolute band number based on the buffer index.

Definition at line 172 of file Buffer.cpp.

References p_band, p_nlines, and p_nsamps.

Referenced by Isis::CubeIoHandler::bufferLessThan(), CopyOverlapFrom(), Isis::IndependentCubeViewport::cubeDataChanged(), Isis::CubeIoHandler::findIntersection(), Isis::Average::operator()(), Isis::ProcessByBrick::ProcessCubesFunctor< T >::operator()(), Isis::ImageImporter::operator()(), Isis::CubeDataThread::OverlapIndex(), Position(), Isis::CubeIoHandler::read(), Isis::ProcessRubberSheet::StartProcess(), Isis::CubeIoHandler::synchronousWrite(), Isis::CubeIoHandler::writeIntoDouble(), and Isis::CubeIoHandler::writeIntoRaw().

int Isis::Buffer::BandDimension (  )  const [inline]
void Isis::Buffer::Copy ( const Buffer in,
bool  includeRawBuf = true 
)

Allows copying of the buffer contents to another Buffer.

Parameters:
in The Buffer to be copied.
Exceptions:
Isis::iException::Programmer - Input and Output buffers are not the same size

Definition at line 259 of file Buffer.cpp.

References _FILEINFO_, p_buf, p_npixels, p_pixelType, p_rawbuf, PixelType(), Isis::IException::Programmer, size(), and Isis::SizeOf().

Referenced by Buffer(), and Isis::FileTool::copy().

bool Isis::Buffer::CopyOverlapFrom ( const Buffer in  ) 

Allows copying of the buffer contents of a larger buffer to another same size or smaller Buffer, using their base positions to relate data.

This does not copy the raw buffer.

Parameters:
in The Buffer to be copied.
Returns:
The operation was successful (the buffers overlapped)

Definition at line 288 of file Buffer.cpp.

References Band(), Index(), Line(), p_band, p_line, p_nbands, p_nlines, p_npixels, p_nsamps, p_sample, Sample(), and size().

double* Isis::Buffer::DoubleBuffer (  )  const [inline]
int Isis::Buffer::Index ( const int  i_samp,
const int  i_line,
const int  i_band 
) const

Given a sample, line, and band position, this returns the appropriate index in the shape buffer.

Parameters:
i_samp Sample position.
i_line Line position.
i_band Band position.
Returns:
int Index at the specified sample, line and band.
Exceptions:
Isis::iException::Programmer - Array Subscript not in range

Definition at line 205 of file Buffer.cpp.

References _FILEINFO_, Isis::Message::ArraySubscriptNotInRange(), p_band, p_line, p_nbands, p_nlines, p_nsamps, p_sample, and Isis::IException::Programmer.

Referenced by CopyOverlapFrom(), Isis::ViewportBuffer::fillBuffer(), Isis::CubeIoHandler::writeIntoDouble(), and Isis::CubeIoHandler::writeIntoRaw().

int Isis::Buffer::Line ( const int  index = 0  )  const

Returns the line position associated with a shape buffer index.

The shape buffer is one dimensional. Let us assume a nsamps=2, nlines=3, and nbands=2. Therefore the total size of the shape buffer is 12 and valid index values are 0-11. Line(0), Line(1), Line(6) and Line(7), will return a 1, Line(2), Line(3), Line(8) and Line(9) will return a 2, and Line(4), Line(5), Line(10), and Line(11) will return a 3.

Parameters:
index Shape buffer index to map to a line position. Defaults to 0
Returns:
int The absolute line number based on the buffer index

Definition at line 156 of file Buffer.cpp.

References p_line, p_nlines, and p_nsamps.

Referenced by Isis::CubeIoHandler::bufferLessThan(), CopyOverlapFrom(), Isis::IndependentCubeViewport::cubeDataChanged(), Isis::CubeViewport::cubeDataChanged(), Isis::ViewportBuffer::DataReady(), Isis::ViewportBuffer::fillBuffer(), Isis::CubeIoHandler::findIntersection(), Isis::Average::operator()(), Isis::Nearest::operator()(), Isis::ImageImporter::operator()(), Isis::CubeDataThread::OverlapIndex(), Position(), Isis::CubeIoHandler::read(), Isis::EditTool::redoEdit(), Isis::CubeIoHandler::synchronousWrite(), Isis::EditTool::undoEdit(), Isis::StreamExporter::writeGrayscale(), Isis::QtExporter::writeGrayscale(), Isis::StreamExporter::writeRgb(), Isis::QtExporter::writeRgb(), Isis::StreamExporter::writeRgba(), Isis::QtExporter::writeRgba(), and Isis::EditTool::writeToCube().

int Isis::Buffer::LineDimension (  )  const [inline]
Buffer& Isis::Buffer::operator= ( const Buffer rvalue  )  [inline, protected]

Copy operator.

We will make it private since copies of these buffers do not need to occur.

Parameters:
rvalue Right hand side
Returns:
Buffer&

Reimplemented in Isis::BufferManager.

Definition at line 239 of file Buffer.h.

Buffer & Isis::Buffer::operator= ( const double &  d  ) 

Assign the entire buffer to a constant double value.

Parameters:
d Value to assign to the buffer
Returns:
the current Buffer

Definition at line 102 of file Buffer.cpp.

References p_buf, and p_npixels.

const double& Isis::Buffer::operator[] ( const int  index  )  const [inline]

Returns the value in the shape buffer at given index.

Parameters:
index Index position in buffer. No out of bounds index is checked
Returns:
double

Definition at line 144 of file Buffer.h.

References p_buf.

double& Isis::Buffer::operator[] ( const int  index  )  [inline]

Returns the value in the shape buffer at given index.

Parameters:
index Index position in buffer. No out of bounds index is checked
Returns:
double&

Definition at line 133 of file Buffer.h.

References p_buf.

Isis::PixelType Isis::Buffer::PixelType (  )  const [inline]

Returns the raw buffer pixel type.

Returns:
Isis::PixelType

Definition at line 175 of file Buffer.h.

References p_pixelType.

Referenced by Copy().

void Isis::Buffer::Position ( const int  index,
int &  i_samp,
int &  i_line,
int &  i_band 
) const

Returns the sample, line, and band position associated with a shape buffer index.

Performs the same function as the Sample, Line, and Band methods.

Parameters:
index Shape buffer index to map to a band position.
i_samp Sample position in shape buffer at index.
i_line Line position in shape buffer at index
i_band Band position in shape buffer at index.

Definition at line 186 of file Buffer.cpp.

References Band(), Line(), and Sample().

void* Isis::Buffer::RawBuffer (  )  const [inline]

Returns a void pointer to the raw buffer.

Cast this void pointer using information from the PixelType() method

Returns:
void* Pointer to the raw buffer

Definition at line 166 of file Buffer.h.

References p_rawbuf.

Referenced by Isis::CubeIoHandler::writeIntoDouble().

int Isis::Buffer::Sample ( const int  index = 0  )  const

Returns the sample position associated with a shape buffer index.

The shape buffer is one dimensional. Let us assume a nsamps=2, nlines=3, and nbands=2. Therefore the total size of the shape buffer is 12 and valid index values are 0-11. Sample(0), Sample(2), Sample(4), etc will return a 1 while Sample(1), Sample(3), Sample(5), etc will return a 2.

Parameters:
index Shape buffer index to map to a sample position. Defaults to 0.
Returns:
int The absolute sample number based on the buffer index.

Definition at line 139 of file Buffer.cpp.

References p_nsamps, and p_sample.

Referenced by Isis::CubeIoHandler::bufferLessThan(), CopyOverlapFrom(), Isis::IndependentCubeViewport::cubeDataChanged(), Isis::CubeViewport::cubeDataChanged(), Isis::ViewportBuffer::DataReady(), Isis::ViewportBuffer::fillBuffer(), Isis::CubeIoHandler::findIntersection(), Isis::CubeDataThread::OverlapIndex(), Position(), Isis::CubeIoHandler::read(), Isis::EditTool::redoEdit(), Isis::CubeIoHandler::synchronousWrite(), Isis::EditTool::undoEdit(), and Isis::EditTool::writeToCube().

int Isis::Buffer::SampleDimension (  )  const [inline]
void Isis::Buffer::SetBaseBand ( const int  start_band  )  [inline, protected]

This method is used to set the base band position of the shape buffer.

Parameters:
start_band Starting band to set

Reimplemented in Isis::Brick.

Definition at line 208 of file Buffer.h.

References p_band.

Referenced by SetBasePosition().

void Isis::Buffer::SetBaseLine ( const int  start_line  )  [inline, protected]

This method is used to set the base line position of the shape buffer.

Parameters:
start_line Starting line to set

Reimplemented in Isis::Brick.

Definition at line 198 of file Buffer.h.

References p_line.

Referenced by SetBasePosition().

void Isis::Buffer::SetBasePosition ( const int  start_sample,
const int  start_line,
const int  start_band 
) [protected]

This method is used to set the base position of the shape buffer.

In general it is used by BufferManager objects to progress sequentially through a cube by line, tile, boxcar, etc.

Parameters:
start_sample Starting sample to set.
start_line Starting line to set.
start_band Starting band to set.

Reimplemented in Isis::Brick.

Definition at line 118 of file Buffer.cpp.

References SetBaseBand(), SetBaseLine(), and SetBaseSample().

Referenced by Isis::BufferManager::setpos(), and Isis::Portal::SetPosition().

void Isis::Buffer::SetBaseSample ( const int  start_samp  )  [inline, protected]

This method is used to set the base sample position of the shape buffer.

Parameters:
start_samp Starting sample to set

Reimplemented in Isis::Brick.

Definition at line 188 of file Buffer.h.

References p_sample.

Referenced by SetBasePosition().

int Isis::Buffer::size (  )  const [inline]

Member Data Documentation

int Isis::Buffer::p_band [protected]

Starting band to read/write.

Definition at line 219 of file Buffer.h.

Referenced by Band(), Buffer(), CopyOverlapFrom(), Index(), and SetBaseBand().

double* Isis::Buffer::p_buf [protected]

Shape buffer allocated to the size of npixels for handling reads/writes.

Definition at line 223 of file Buffer.h.

Referenced by Allocate(), at(), Copy(), DoubleBuffer(), operator=(), operator[](), Isis::Brick::Resize(), and ~Buffer().

int Isis::Buffer::p_line [protected]

Starting line to read/write.

Definition at line 216 of file Buffer.h.

Referenced by Buffer(), CopyOverlapFrom(), Index(), Line(), and SetBaseLine().

int Isis::Buffer::p_nbands [protected]

Number of bands to read/write.

Definition at line 220 of file Buffer.h.

Referenced by BandDimension(), Buffer(), CopyOverlapFrom(), Index(), and Isis::Brick::Resize().

int Isis::Buffer::p_nlines [protected]

Number of lines to read/write.

Definition at line 217 of file Buffer.h.

Referenced by Band(), Buffer(), CopyOverlapFrom(), Index(), Line(), LineDimension(), and Isis::Brick::Resize().

int Isis::Buffer::p_npixels [protected]

Number of pixels (nsamps * nlines * nbands).

Definition at line 222 of file Buffer.h.

Referenced by Allocate(), at(), Buffer(), Copy(), CopyOverlapFrom(), operator=(), Isis::Brick::Resize(), and size().

int Isis::Buffer::p_nsamps [protected]

Number of samples to read/write.

Definition at line 214 of file Buffer.h.

Referenced by Band(), Buffer(), CopyOverlapFrom(), Index(), Line(), Isis::Brick::Resize(), Sample(), and SampleDimension().

The pixel type of the raw buffer.

Definition at line 226 of file Buffer.h.

Referenced by Allocate(), Copy(), and PixelType().

void* Isis::Buffer::p_rawbuf [protected]

The raw dm read from the disk.

Definition at line 227 of file Buffer.h.

Referenced by Allocate(), Copy(), RawBuffer(), Isis::Brick::Resize(), and ~Buffer().

int Isis::Buffer::p_sample [protected]

Starting sample to read/write.

Definition at line 213 of file Buffer.h.

Referenced by Buffer(), CopyOverlapFrom(), Index(), Sample(), and SetBaseSample().


The documentation for this class was generated from the following files: