00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "FileReadoutFormat/FileEndRecord.h"
00010
00011 #include "FileReadoutFormat/FileTraits.h"
00012
00013 using DybDaq::ByteBuffer;
00014 using DybDaq::FileEndRecord;
00015 using DybDaq::FileTraits;
00016
00017 FileEndRecord::FileEndRecord(const FileTraits::FileDateTime& dateTime,
00018 const unsigned int fileEventCount,
00019 const unsigned int filePayloadSize,
00020 const unsigned int runEventCount,
00021 const unsigned int runPayloadSize,
00022 const unsigned int status,
00023 const FileTraits& traits) :
00024 FileBuffer(new char[traits.recordSize(FileTraits::kFileEndRecord) * kBytesInInt],
00025 traits,
00026 FileTraits::kFileEndRecord) {
00027 setDateTime(dateTime);
00028 setFileEventCount(fileEventCount);
00029 setFilePayloadSize(filePayloadSize);
00030 setRunEventCount(runEventCount);
00031 setRunPayloadSize(runPayloadSize);
00032 setStatus(status);
00033 writeField(traits.marker(FileTraits::kFileEndMarker),
00034 FileTraits::kEndFileMarker);
00035 }
00036
00037 FileEndRecord::FileEndRecord(const ByteBuffer& byteBuffer,
00038 const FileTraits& traits) :
00039 FileBuffer(byteBuffer,
00040 traits) {
00041 }
00042
00043 FileEndRecord::~FileEndRecord() {
00044 }
00045
00046 bool FileEndRecord::isMarked(unsigned int marker) const {
00047 return FileTraits::kFileEndRecord == marker;
00048 }
00049
00050 FileTraits::FileDateTime FileEndRecord::dateTime() const {
00051 const unsigned int closeDate = date();
00052 const unsigned int closeTime = time();
00053 struct tm tmStruct;
00054 tmStruct.tm_sec = closeTime % 100U;;
00055 tmStruct.tm_min = (closeTime /100U) % 100U;
00056 tmStruct.tm_hour = (closeTime /10000U) % 100U;
00057 tmStruct.tm_mday = (closeDate / 1000000U) % 100U;
00058 tmStruct.tm_mon = ((closeDate / 10000U) % 100U) - 1;
00059 tmStruct.tm_year = (closeDate % 10000U) - 1900;
00060 tmStruct.tm_wday = 0;
00061 tmStruct.tm_yday = 0;
00062 tmStruct.tm_isdst = 0;
00063 return tmStruct;
00064 }
00065
00066 unsigned int FileEndRecord::fileEventCount() const {
00067 return readUnsignedInt(FileTraits::kFileEventCount);
00068 }
00069
00070 unsigned int FileEndRecord::filePayloadSize() const {
00071 return readUnsignedInt(FileTraits::kFilePayloadSize);
00072 }
00073
00074 unsigned int FileEndRecord::runEventCount() const {
00075 return readUnsignedInt(FileTraits::kRunEventCount);
00076 }
00077
00078 unsigned int FileEndRecord::runPayloadSize() const {
00079 return readUnsignedInt(FileTraits::kRunPayloadSize);
00080 }
00081
00082 unsigned int FileEndRecord::status() const {
00083 return readUnsignedInt(FileTraits::kFileEndStatus);
00084 }
00085
00086 bool FileEndRecord::endMarkerFound() const {
00087 return fileTraits().marker(FileTraits::kEndFileMarker) == readUnsignedInt(FileTraits::kFileEndStatus);
00088 }
00089
00090 unsigned int FileEndRecord::date() const {
00091 return readUnsignedInt(FileTraits::kFileCloseDate);
00092 }
00093
00094 unsigned int FileEndRecord::time() const {
00095 return readUnsignedInt(FileTraits::kFileCloseTime);
00096 }
00097
00098 unsigned int FileEndRecord::formatComponent() const {
00099 return FileTraits::kFileEndRecord;
00100 }
00101
00102 void FileEndRecord::setDateTime(const FileTraits::FileDateTime& dateTime) {
00103 setDate(dateTime.tm_year + 1900
00104 + (dateTime.tm_mon + 1) * 10000
00105 + dateTime.tm_mday * 1000000);
00106 setTime(dateTime.tm_sec
00107 + dateTime.tm_min * 100
00108 + dateTime.tm_hour * 10000);
00109 }
00110
00111 void FileEndRecord::setFileEventCount(const unsigned int fileEventCount) {
00112 writeField(fileEventCount,
00113 FileTraits::kFileEventCount);
00114 }
00115
00116 void FileEndRecord::setFilePayloadSize(const unsigned int filePayloadSize) {
00117 writeField(filePayloadSize,
00118 FileTraits::kFilePayloadSize);
00119 }
00120
00121 void FileEndRecord::setRunEventCount(const unsigned int runEventCount) {
00122 writeField(runEventCount,
00123 FileTraits::kRunEventCount);
00124 }
00125
00126 void FileEndRecord::setRunPayloadSize(const unsigned int runPayloadSize) {
00127 writeField(runPayloadSize,
00128 FileTraits::kRunPayloadSize);
00129 }
00130
00131 void FileEndRecord::setStatus(const unsigned int status) {
00132 writeField(status,
00133 FileTraits::kFileEndStatus);
00134 }
00135
00136 void FileEndRecord::setDate(const unsigned int date) {
00137 writeField(date,
00138 FileTraits::kFileCloseDate);
00139 }
00140
00141 void FileEndRecord::setTime(const unsigned int time) {
00142 writeField(time,
00143 FileTraits::kFileCloseTime);
00144 }
00145