13#include "eformat/write/SubDetectorFragment.h"
14#include "eformat/HeaderMarker.h"
15#include "eformat/Status.h"
16#include "eformat/write/FullEventFragment.h"
17#include "ers/StreamFactory.h"
20 : m_parent( 0 ), m_child( 0 ), m_last( 0 ), m_next( 0 ), m_extra_count( 0 ) {
30 set( m_node[0], m_header, 6, &m_node[1] );
32 set( m_node[2], &m_header[6], 1, 0 );
33 ERS_DEBUG_3(
"%s Source Id. = 0x%x.",
"Built (write) subdetector from scratch, with",
38 : m_parent( 0 ), m_child( 0 ), m_last( 0 ), m_next( 0 ), m_extra_count( 0 ) {
48 set( m_node[0], m_header, 6, &m_node[1] );
50 set( m_node[2], &m_header[6], 1, 0 );
51 ERS_DEBUG_3(
"%s Source Id. = 0x%x.",
"Built empty (write) subdetector from scratch, with",
56 : m_parent( 0 ), m_child( 0 ), m_last( 0 ), m_next( 0 ), m_extra_count( 0 ) {
58 set( m_node[0], sd, 6, &m_node[1] );
59 set( m_node[1], &sd[6], sd[5], &m_node[2] );
60 set( m_node[2], &sd[6 + sd[5]], 1, &m_extra );
64 "Built (write) subdetector from contiguous memory, with",
source_id() );
68 : m_parent( 0 ), m_child( 0 ), m_last( 0 ), m_next( 0 ), m_extra_count( 0 ) {
70 set( m_node[0], sd->
base, 6, &m_node[1] );
71 set( m_node[1], &sd->
base[6], sd->
base[5], &m_node[2] );
72 set( m_node[2], &sd->
base[6 + sd->
base[5]], 1, &m_extra );
76 ERS_DEBUG_3(
"%s Source Id. = 0x%x.",
"Built (write) subdetector from paged memory, with",
82 : m_parent( 0 ), m_child( 0 ), m_last( 0 ), m_next( 0 ), m_extra_count( 0 ) {
84 ERS_DEBUG_3(
"%s Source Id. = 0x%x.",
"Built (write) subdetector from copy, with",
90 memcpy(
reinterpret_cast<void*
>( m_header ),
91 reinterpret_cast<const void*
>( other.m_node[0].base ), 6 *
sizeof( uint32_t ) );
92 m_header[6] = other.m_node[2].base[0];
95 set( m_node[0], m_header, 6, &m_node[1] );
96 set( m_node[1], other.m_node[1].base, other.m_node[1].size_word, &m_node[2] );
97 set( m_node[2], &m_header[6], 1, 0 );
98 ERS_DEBUG_3(
"%s Source Id. = 0x%x.",
"Copied (write) subdetector with",
105 m_parent->size_change( m_node[0].base[1], m_node[0].base[1] - m_node[0].base[5] +
n );
106 m_node[0].base[1] -= m_node[0].base[5];
107 m_node[0].base[2] -= m_node[0].base[5];
108 m_node[1].size_word = m_node[0].base[5] =
n;
109 m_node[0].base[1] +=
n;
110 m_node[0].base[2] +=
n;
111 m_node[1].base =
const_cast<uint32_t*
>(
status );
115 uint32_t old_size = m_node[0].base[1];
116 m_node[0].base[1] -= o;
117 m_node[0].base[1] +=
n;
118 if ( m_parent ) m_parent->size_change( old_size, m_node[0].base[1] );
122 ERS_DEBUG_3(
"%s Source Id. = 0x%x to subdetector with Source Id. = 0x%x",
125 uint32_t old_size = m_node[0].base[1];
129 if ( m_last ) m_last->next( ros );
134 if ( m_parent ) m_parent->
size_change( old_size, m_node[0].base[1] );
138 uint32_t retval = 3 + m_extra_count;
140 retval += curr->page_count();
150 while ( last->
next ) last = last->
next;
155 while ( last->
next ) last = last->
next;