10#include "IException.h"
26 p_band(0), p_nbands(0), p_npixels(0), p_buf(0),
27 p_pixelType(None), p_rawbuf(0) { }
43 p_nsamps(nsamps), p_nlines(nlines),
44 p_nbands(nbands), p_pixelType(type) {
49 string message =
"Invalid value for sample dimensions (nsamps)";
53 string message =
"Invalid value for line dimensions (nlines)";
57 string message =
"Invalid value for band dimensions (nbands)";
107 const int start_line,
108 const int start_band) {
180 i_line =
Line(index);
181 i_band =
Band(index);
257 string message =
"Input and output buffers are not the same size";
261 if(includeRawBuf &&
p_pixelType != in.PixelType()) {
262 string message =
"Input and output buffers are not the same pixel type";
266 size_t n =
sizeof(double);
268 memcpy(
p_buf, in.p_buf, n);
286 bool isSubareaOfIn = (
p_npixels <= in.size());
287 isSubareaOfIn &= (
p_sample >= in.p_sample);
288 isSubareaOfIn &= (
p_line >= in.p_line);
289 isSubareaOfIn &= (
p_band >= in.p_band);
292 int otherEndSample = in.p_sample + in.p_nsamps - 1;
295 int otherEndLine = in.p_line + in.p_nlines - 1;
298 int otherEndBand = in.p_band + in.p_nbands - 1;
300 isSubareaOfIn &= (endSample <= otherEndSample);
301 isSubareaOfIn &= (endLine <= otherEndLine);
302 isSubareaOfIn &= (endBand <= otherEndBand);
305 for (
int i = 0; i <
size(); i++) {
310 return isSubareaOfIn;
321 p_nsamps(rhs.p_nsamps), p_nlines(rhs.p_nlines),
322 p_nbands(rhs.p_nbands), p_pixelType(rhs.p_pixelType) {
Buffer for reading and writing cube data.
int size() const
Returns the total number of pixels in the shape buffer.
void * p_rawbuf
The raw dm read from the disk.
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.
int Line(const int index=0) const
Returns the line position associated with a shape buffer index.
Buffer()
Default constructor for proper initialization purposes.
int p_npixels
Number of pixels (nsamps * nlines * nbands)
void Allocate()
Size or resize the memory buffer.
int p_nlines
Number of lines to read/write.
int p_nbands
Number of bands to read/write.
Buffer & operator=(const double &d)
Assign the entire buffer to a constant double value.
bool CopyOverlapFrom(const Buffer &in)
Allows copying of the buffer contents of a larger buffer to another same size or smaller Buffer,...
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.
void SetBaseLine(const int start_line)
This method is used to set the base line position of the shape buffer.
double * p_buf
Shape buffer allocated to the size of npixels for handling reads/writes.
int Band(const int index=0) const
Returns the band position associated with a shape buffer index.
int p_sample
Starting sample to read/write.
const Isis::PixelType p_pixelType
The pixel type of the raw buffer.
int p_band
Starting band to read/write.
void Copy(const Buffer &in, bool includeRawBuf=true)
Allows copying of the buffer contents to another Buffer.
double at(const int index) const
Returns the value in the shape buffer at the given index.
int p_nsamps
Number of samples to read/write.
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.
int p_line
Starting line to read/write.
int Sample(const int index=0) const
Returns the sample position associated with a shape buffer index.
void SetBaseBand(const int start_band)
This method is used to set the base band 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.
~Buffer()
Destroys the Buffer object and frees shape buffer.
@ Unknown
A type of error that cannot be classified as any of the other error types.
@ Programmer
This error is for when a programmer made an API call that was illegal.
QString ArraySubscriptNotInRange(int index)
This error should be used when an Isis object or application is checking array bounds and the legal r...
QString MemoryAllocationFailed()
This error should be used when an error accrues during a memory allocation such as "new".
This is free and unencumbered software released into the public domain.
int SizeOf(Isis::PixelType pixelType)
Returns the number of bytes of the specified PixelType.
PixelType
Enumerations for Isis Pixel Types.
Namespace for the standard library.