| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

DataSeparatorRecord.cc

Go to the documentation of this file.
00001 /*
00002  *  DataSeparatorRecord.cc
00003  *  RawDataBundle
00004  *
00005  *  Created by Simon Patton on 7/18/10.
00006  *  Copyright 2010 DayaBay Collaboration. All rights reserved.
00007  *
00008  */
00009 #include "FileReadoutFormat/DataSeparatorRecord.h"
00010 
00011 #include "DaqReadoutFormat/ByteBuffer.h"
00012 #include "EventReadoutFormat/EventHeader.h"
00013 #include "EventReadoutFormat/EventReadout.h"
00014 #include "FileReadoutFormat/FileTraits.h"
00015 
00016 using DybDaq::ByteBuffer;
00017 using DybDaq::DataSeparatorRecord;
00018 using DybDaq::DaqBuffer;
00019 using DybDaq::EventReadout;
00020 using DybDaq::FileTraits;
00021 
00022 DataSeparatorRecord::DataSeparatorRecord(const EventReadout& block,
00023                                          unsigned int blockNumber,
00024                                          const FileTraits& traits) :
00025 FileBuffer(new char[traits.recordSize(FileTraits::kDataSeparatorRecord) * kBytesInInt],
00026            traits,
00027            FileTraits::kDataSeparatorRecord),
00028 m_block(&block),
00029 m_owner(false) {
00030     setBlockNumber(blockNumber);
00031     setBlockLength(block.header().totalSize() * kBytesInInt);
00032 }
00033 
00034 DataSeparatorRecord::DataSeparatorRecord(const ByteBuffer& byteBuffer,
00035                                          const FileTraits& traits) :
00036 FileBuffer(byteBuffer,
00037            traits),
00038 m_block(0),
00039 m_owner(true) {
00040 }
00041 
00042 DataSeparatorRecord::~DataSeparatorRecord() {
00043     if (m_owner && (0 != m_block)) {
00044         delete m_block;
00045     }
00046 }
00047 
00048 bool DataSeparatorRecord::isMarked(unsigned int marker) const {
00049     return FileTraits::kDataSeparatorRecord == marker;
00050 }
00051 
00052 const EventReadout& DataSeparatorRecord::block() const {
00053     return *m_block;
00054 }
00055 
00056 const EventReadout* DataSeparatorRecord::extractBlock() const {
00057     m_owner = false;
00058     return m_block;
00059 }
00060 
00061 unsigned int DataSeparatorRecord::blockNumber() const {
00062     return readUnsignedInt(FileTraits::kBlockNumber);
00063 }
00064 
00065 unsigned int DataSeparatorRecord::blockLength() const {
00066     return readUnsignedInt(FileTraits::kBlockLength);
00067 }
00068 
00069 unsigned int DataSeparatorRecord::formatComponent() const {
00070     return FileTraits::kDataSeparatorRecord;
00071 }
00072 
00073 void DataSeparatorRecord::setBlock(const EventReadout* block) {
00074     if (m_owner && (0 != m_block)) {
00075         delete m_block;
00076     }
00077     m_owner = true;
00078     m_block = block;
00079 }
00080 
00081 unsigned int DataSeparatorRecord::gather(OutputBufferList& outputBuffers) const {
00082     unsigned int result = bufferSize() * kBytesInInt;
00083     outputBuffers.push_back(OutputBuffer(buffer(),
00084                                          result));
00085 
00086     result += m_block->gather(outputBuffers);
00087     return result;
00088 }
00089 
00090 void DataSeparatorRecord::setBlockNumber(unsigned int blockNumber) {
00091     writeField(blockNumber,
00092                FileTraits::kBlockNumber);
00093 }
00094 
00095 void DataSeparatorRecord::setBlockLength(unsigned int blockLength) {
00096     writeField(blockLength,
00097                FileTraits::kBlockLength);
00098 }
00099 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:08:33 2011 for FileReadoutFormat by doxygen 1.4.7