20 #include "eformat/HeaderMarker.h"
21 #include "eformat/Status.h"
22 #include "eformat/Issue.h"
23 #include "eformat/checksum.h"
30 eformat::helper::Version
version(0, eformat::MAJOR_V40_VERSION);
83 this->source_id(source_id);
84 bc_time_seconds(bc_time_secs);
85 bc_time_nanoseconds(bc_time_nsec);
86 this->global_id(global_id);
89 this->lumi_block(lumi_block);
90 this->lvl1_id(lvl1_id);
92 lvl1_trigger_type(lvl1_type);
100 if (
read.payload_size_word() > 0) {
102 m_node[9].next = &m_node[10];
104 set(m_node[10],
tmp,
read.payload_size_word(), 0);
105 m_header[1] +=
read.payload_size_word();
122 eformat::helper::Version fe_ver(
read.version());
123 minor_version(fe_ver.minor_version());
124 source_id(
read.source_id());
125 bc_time_seconds(
read.bc_time_seconds());
126 bc_time_nanoseconds(
read.bc_time_nanoseconds());
127 global_id(
read.global_id());
129 run_no(
read.run_no());
130 lumi_block(
read.lumi_block());
131 lvl1_id(
read.lvl1_id());
133 lvl1_trigger_type(
read.lvl1_trigger_type());
138 lvl1_trigger_info(
read.nlvl1_trigger_info(),
tmp);
140 lvl2_trigger_info(
read.nlvl2_trigger_info(),
tmp);
142 event_filter_info(
read.nevent_filter_info(),
tmp);
144 stream_tag(
read.nstream_tag(),
tmp);
145 checksum_type(
read.checksum_type());
151 minor_version(
other.minor_version());
152 source_id(
other.source_id());
153 bc_time_seconds(
other.bc_time_seconds());
154 bc_time_nanoseconds(
other.bc_time_nanoseconds());
155 global_id(
other.global_id());
157 run_no(
other.run_no());
158 lumi_block(
other.lumi_block());
159 lvl1_id(
other.lvl1_id());
160 bc_id(
other.bc_id());
161 lvl1_trigger_type(
other.lvl1_trigger_type());
163 lvl1_trigger_info(
other.nlvl1_trigger_info(),
other.lvl1_trigger_info());
164 lvl2_trigger_info(
other.nlvl2_trigger_info(),
other.lvl2_trigger_info());
165 event_filter_info(
other.nevent_filter_info(),
other.event_filter_info());
166 stream_tag(
other.nstream_tag(),
other.stream_tag());
167 checksum_type(
other.checksum_type());
173 m_node[0].base[1] -= m_node[0].base[5];
174 m_node[0].base[2] -= m_node[0].base[5];
175 m_node[1].size_word = m_node[0].base[5] =
n;
176 m_node[0].base[1] +=
n;
177 m_node[0].base[2] +=
n;
181 m_node[1].base = status_nc;
187 m_node[0].base[1] -= nlvl1_trigger_info();
188 m_node[0].base[2] -= nlvl1_trigger_info();
189 m_node[3].size_word = m_node[2].base[10] =
n;
190 m_node[0].base[1] +=
n;
191 m_node[0].base[2] +=
n;
195 m_node[3].base = data_nc;
201 m_node[0].base[1] -= nlvl2_trigger_info();
202 m_node[0].base[2] -= nlvl2_trigger_info();
203 m_node[5].size_word = m_node[4].base[0] =
n;
204 m_node[0].base[1] +=
n;
205 m_node[0].base[2] +=
n;
209 m_node[5].base = data_nc;
215 m_node[0].base[1] -= nevent_filter_info();
216 m_node[0].base[2] -= nevent_filter_info();
217 m_node[7].size_word = m_node[6].base[0] =
n;
218 m_node[0].base[1] +=
n;
219 m_node[0].base[2] +=
n;
223 m_node[7].base = data_nc;
229 m_node[0].base[1] -= nstream_tag();
230 m_node[0].base[2] -= nstream_tag();
231 m_node[9].size_word = m_node[8].base[0] =
n;
232 m_node[0].base[1] +=
n;
233 m_node[0].base[2] +=
n;
237 m_node[9].base = data_nc;
248 if (m_last) m_last->next(rob);
259 m_unchecked[m_n_unchecked-1].next = &m_unchecked[m_n_unchecked];
266 uint32_t retval = 10 + (m_node[9].next?1:0) + (checksum_type()?1:0);
268 retval += curr->page_count();
269 return retval+m_n_unchecked;
272 const eformat::write::node_t*
276 eformat::write::node_t* last = &m_node[9];
277 eformat::write::node_t*
payload = last;
278 if (m_node[10].size_word) last = last->next;
283 last->next = curr->bind();
284 while (last->next) last = last->next;
290 last->next = m_unchecked;
291 last = &m_unchecked[m_n_unchecked-1];
297 if (checksum_type() != eformat::NO_CHECKSUM) {
300 eformat::write::node_t
null;
302 m_checksum = eformat::write::checksum(checksum_type(), &
null);
305 m_checksum = eformat::write::checksum(checksum_type(),
payload);
306 last->next = &m_node[11];
314 if (m_node[2].
base[0] == eformat::NO_CHECKSUM &&
s != eformat::NO_CHECKSUM) {
316 m_node[0].base[1] += 1;
318 else if (m_node[2].
base[0] != eformat::NO_CHECKSUM &&
319 s == eformat::NO_CHECKSUM) {
321 m_node[0].base[1] -= 1;
323 m_node[2].base[0] =
s;
329 return m_unchecked[
n].base;