BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
StorableMicroslice.h
Go to the documentation of this file.
1
// Copyright 2015 Jan de Cuveland <cmail@cuveland.de>
2
/// \file
3
/// \brief Defines the fles::StorableMicroslice class.
4
#ifndef FLES_STORABLEMICROSLICE_H
5
#define FLES_STORABLEMICROSLICE_H
6
7
#include "
ArchiveDescriptor.h
"
8
#include "
Microslice.h
"
9
#include "
MicrosliceDescriptor.h
"
10
11
#include <boost/serialization/access.hpp>
12
#include <boost/serialization/vector.hpp>
13
#include <fstream>
14
#include <vector>
15
// Note: <fstream> has to precede boost/serialization includes for non-obvious
16
// reasons to avoid segfault similar to
17
// http://lists.debian.org/debian-hppa/2009/11/msg00069.html
18
19
namespace
fles
20
{
21
22
template
<
class
Base,
class
Derived, ArchiveType archive_type>
23
class
InputArchive
;
24
template
<
class
Base,
class
Derived, ArchiveType archive_type>
25
class
InputArchiveLoop
;
26
27
/**
28
* \brief The StorableMicroslice class contains the data of a single microslice.
29
*
30
* Both metadata and content are stored within the object.
31
*/
32
class
StorableMicroslice
:
public
Microslice
33
{
34
public
:
35
/// Copy constructor.
36
StorableMicroslice
(
const
StorableMicroslice
& ms);
37
/// Delete assignment operator (not implemented).
38
void
operator=
(
const
StorableMicroslice
&) =
delete
;
39
/// Move constructor.
40
StorableMicroslice
(
StorableMicroslice
&& ms)
noexcept
;
41
42
/// Construct by copying from given Microslice object.
43
StorableMicroslice
(
const
Microslice
& ms);
44
45
/**
46
* \brief Construct by copying from given data array.
47
*
48
* Copy the descriptor and the data pointed to by `content` into the
49
* StorableMicroslice. The `size` field of the descriptor must already
50
* be valid and will not be modified.
51
*/
52
StorableMicroslice
(
MicrosliceDescriptor
d,
const
uint8_t* content_p);
53
54
/**
55
* \brief Construct by copying from given data vector.
56
*
57
* Copy the descriptor and copy or move the data contained in
58
* `content` into the StorableMicroslice. The descriptor will be
59
* updated to match the size of the `content` vector.
60
*
61
* Copying the vector is avoided if it is passed as an rvalue,
62
* like in:
63
*
64
* StorableMicroslice {..., std::move(some_vector)}
65
* StorableMicroslice {..., {1, 2, 3, 4, 5}}
66
* StorableMicroslice {..., create_some_vector()}
67
*/
68
StorableMicroslice
(
MicrosliceDescriptor
d, std::vector<uint8_t> content_v);
69
70
/// Retrieve non-const microslice descriptor reference
71
MicrosliceDescriptor
&
desc
() {
return
*
desc_ptr_
; }
72
73
/// Retrieve a non-const pointer to the microslice data
74
uint8_t*
content
() {
return
content_ptr_
; }
75
76
void
initialize_crc
();
77
78
private
:
79
friend
class
boost::serialization::access
;
80
friend
class
InputArchive
<
Microslice
,
StorableMicroslice
,
ArchiveType
::
MicrosliceArchive
>;
81
friend class
InputArchiveLoop
<Microslice, StorableMicroslice, ArchiveType::MicrosliceArchive>;
82
83
StorableMicroslice
();
84
85
template<class Archive>
86
void
serialize
(Archive& ar, const unsigned int
/* version */
)
87
{
88
ar &
desc_
;
89
ar &
content_
;
90
91
init_pointers
();
92
}
93
94
void
init_pointers
()
95
{
96
desc_ptr_
= &
desc_
;
97
content_ptr_
=
content_
.data();
98
}
99
100
MicrosliceDescriptor
desc_
;
101
std::vector<uint8_t>
content_
;
102
};
103
104
}
// namespace fles
105
106
#endif
// FLES_STORABLEMICROSLICE_H
fles::InputArchiveLoop
Definition
StorableMicroslice.h:25
fles::InputArchive
Definition
ArchiveDescriptor.h:25
fles::Microslice
The Microslice class provides read access to the data of a microslice.
Definition
Microslice.h:25
fles::Microslice::Microslice
Microslice()=default
fles::Microslice::content_ptr_
uint8_t * content_ptr_
Pointer to the microslice data content.
Definition
Microslice.h:55
fles::Microslice::desc_ptr_
MicrosliceDescriptor * desc_ptr_
Pointer to the microslice descriptor.
Definition
Microslice.h:52
fles::StorableMicroslice
The StorableMicroslice class contains the data of a single microslice.
Definition
StorableMicroslice.h:33
fles::StorableMicroslice::StorableMicroslice
StorableMicroslice(const StorableMicroslice &ms)
Copy constructor.
fles::StorableMicroslice::desc_
MicrosliceDescriptor desc_
Definition
StorableMicroslice.h:100
fles::StorableMicroslice::desc
MicrosliceDescriptor & desc()
Retrieve non-const microslice descriptor reference.
Definition
StorableMicroslice.h:71
fles::StorableMicroslice::initialize_crc
void initialize_crc()
fles::StorableMicroslice::init_pointers
void init_pointers()
Definition
StorableMicroslice.h:94
fles::StorableMicroslice::access
friend class boost::serialization::access
Definition
StorableMicroslice.h:79
fles::StorableMicroslice::operator=
void operator=(const StorableMicroslice &)=delete
Delete assignment operator (not implemented).
fles::StorableMicroslice::serialize
void serialize(Archive &ar, const unsigned int)
Definition
StorableMicroslice.h:86
fles::StorableMicroslice::StorableMicroslice
StorableMicroslice(StorableMicroslice &&ms) noexcept
Move constructor.
fles::StorableMicroslice::content_
std::vector< uint8_t > content_
Definition
StorableMicroslice.h:101
fles::StorableMicroslice::content
uint8_t * content()
Retrieve a non-const pointer to the microslice data.
Definition
StorableMicroslice.h:74
fles::StorableMicroslice::StorableMicroslice
StorableMicroslice(MicrosliceDescriptor d, std::vector< uint8_t > content_v)
Construct by copying from given data vector.
fles::StorableMicroslice::StorableMicroslice
StorableMicroslice(MicrosliceDescriptor d, const uint8_t *content_p)
Construct by copying from given data array.
fles::StorableMicroslice::StorableMicroslice
StorableMicroslice(const Microslice &ms)
Construct by copying from given Microslice object.
ArchiveDescriptor.h
Defines the fles::ArchiveDescriptor class.
MicrosliceDescriptor.h
Defines the fles::MicrosliceDescriptor struct and corresponding enums.
Microslice.h
Defines the fles::Microslice abstract base class.
fles
Main FLES namespace.
Definition
ArchiveDescriptor.h:15
fles::ArchiveType
ArchiveType
The archive type enum (e.g., timeslice, microslice).
Definition
ArchiveDescriptor.h:19
fles::ArchiveType::MicrosliceArchive
@ MicrosliceArchive
Definition
ArchiveDescriptor.h:21
fles::MicrosliceDescriptor
Microslice descriptor struct.
Definition
MicrosliceDescriptor.h:99
install
include
StorableMicroslice.h
Generated on
for BmnRoot by
1.17.0