#include <RawBuffer.h>
Inheritance diagram for DayaBay::RawBuffer:
Public Member Functions | |
RawBuffer () | |
RawBuffer (unsigned int *buffer, bool isOwner=false, unsigned int bufferSize=0) | |
RawBuffer (DayaBay::RawBuffer &buffer, bool adopt=false) | |
virtual | ~RawBuffer () |
unsigned int * | buffer () const |
unsigned int | bufferSize () const |
bool | isOwner () const |
void | setOwner (bool isOwner=true) |
virtual bool | isValid () const |
unsigned int * | getPointer (const unsigned int &line) const |
unsigned int | getValue (const unsigned int &line, const unsigned int &firstBit=0, const unsigned int &bitLength=32) const |
char * | getString (const unsigned int &line, const unsigned int &byteOffset=0) const |
Private Attributes | |
unsigned int * | m_buffer |
unsigned int | m_bufferSize |
bool | m_isOwner |
Definition at line 12 of file RawBuffer.h.
DayaBay::RawBuffer::RawBuffer | ( | ) |
Definition at line 5 of file RawBuffer.cc.
00006 : m_buffer(0), 00007 m_bufferSize(0), 00008 m_isOwner(false) 00009 { 00010 // Default constructor 00011 }
DayaBay::RawBuffer::RawBuffer | ( | unsigned int * | buffer, | |
bool | isOwner = false , |
|||
unsigned int | bufferSize = 0 | |||
) |
Definition at line 13 of file RawBuffer.cc.
00016 : m_buffer(buffer), 00017 m_bufferSize(bufferSize), 00018 m_isOwner(isOwner) 00019 { 00020 // Standard constructor 00021 }
DayaBay::RawBuffer::RawBuffer | ( | DayaBay::RawBuffer & | buffer, | |
bool | adopt = false | |||
) |
Definition at line 23 of file RawBuffer.cc.
00025 : m_buffer(0), 00026 m_bufferSize(0), 00027 m_isOwner(false) 00028 { 00029 // Construct from another RawBuffer 00030 // If adopt==true, then take over ownership of the 00031 // memory buffer (if the input buffer is the current owner) 00032 m_buffer = buffer.buffer(); 00033 m_isOwner = false; 00034 m_bufferSize = buffer.bufferSize(); 00035 if(adopt && buffer.isOwner()){ 00036 // Make new RawBuffer the owner of this memory 00037 m_isOwner = true; 00038 buffer.setOwner(false); 00039 } 00040 }
DayaBay::RawBuffer::~RawBuffer | ( | ) | [virtual] |
Definition at line 43 of file RawBuffer.cc.
00044 { 00045 // Destructor 00046 if(m_isOwner && m_buffer) free(m_buffer); 00047 m_buffer=0; 00048 m_bufferSize=0; 00049 m_isOwner=false; 00050 }
unsigned int * DayaBay::RawBuffer::buffer | ( | ) | const |
Definition at line 52 of file RawBuffer.cc.
00053 { 00054 // Return the pointer to the internal memory buffer 00055 return m_buffer; 00056 }
unsigned int DayaBay::RawBuffer::bufferSize | ( | ) | const |
Definition at line 58 of file RawBuffer.cc.
00059 { 00060 // Return the allocated size of the internal memory buffer, if known 00061 return m_bufferSize; 00062 }
bool DayaBay::RawBuffer::isOwner | ( | ) | const |
Definition at line 64 of file RawBuffer.cc.
00065 { 00066 // Does this RawBuffer own this memory buffer? 00067 return m_isOwner; 00068 }
void DayaBay::RawBuffer::setOwner | ( | bool | isOwner = true |
) |
bool DayaBay::RawBuffer::isValid | ( | ) | const [virtual] |
Definition at line 74 of file RawBuffer.cc.
00075 { 00076 // Does this RawBuffer contain data? 00077 return (m_buffer != 0); 00078 }
unsigned int * DayaBay::RawBuffer::getPointer | ( | const unsigned int & | line | ) | const |
Definition at line 80 of file RawBuffer.cc.
00081 { 00082 // Return a pointer to a specific line in the data block 00083 if(m_bufferSize>0 && line>=m_bufferSize) return 0; 00084 return (m_buffer + line); 00085 }
unsigned int DayaBay::RawBuffer::getValue | ( | const unsigned int & | line, | |
const unsigned int & | firstBit = 0 , |
|||
const unsigned int & | bitLength = 32 | |||
) | const |
Definition at line 87 of file RawBuffer.cc.
00090 { 00091 // Read a value from the memory buffer 00092 // line = line number in the memory block (line = integer length) 00093 // firstBit = first bit to read (max=31) 00094 // bitLength = length of bits to read (max=32) 00095 if(bitLength>32 || firstBit>31) return 0; 00096 unsigned int* pointer = this->getPointer(line); 00097 if(!pointer) return 0; 00098 // Catch request for full line 00099 if(firstBit==0 && bitLength==32) return *pointer; 00100 // Prepare bit mask 00101 unsigned int oneBit = 0x1; 00102 unsigned int mask = 0; 00103 for(unsigned int shift=0; shift<bitLength; shift++) 00104 mask += (oneBit << shift); 00105 // Shift value, mask, and return 00106 return (*pointer >> firstBit) & mask; 00107 }
char * DayaBay::RawBuffer::getString | ( | const unsigned int & | line, | |
const unsigned int & | byteOffset = 0 | |||
) | const |
Definition at line 109 of file RawBuffer.cc.
00111 { 00112 // Return a char pointer to a specific byte in the data block 00113 // line = line number in the memory block (line = integer length) 00114 // byteOffset = offset if string starts at an uneven byte position (max=3) 00115 if(byteOffset>3) return 0; 00116 unsigned int* pointer = this->getPointer(line); 00117 if(!pointer) return 0; 00118 return (char*)(pointer + byteOffset); 00119 }
unsigned int* DayaBay::RawBuffer::m_buffer [private] |
Definition at line 32 of file RawBuffer.h.
unsigned int DayaBay::RawBuffer::m_bufferSize [private] |
Definition at line 33 of file RawBuffer.h.
bool DayaBay::RawBuffer::m_isOwner [private] |
Definition at line 34 of file RawBuffer.h.