BmnRoot
Loading...
Searching...
No Matches
Timeslice.h
Go to the documentation of this file.
1// Copyright 2013 Jan de Cuveland <cmail@cuveland.de>
4#pragma once
5
7#include "MicrosliceView.h"
10
11#include <boost/serialization/access.hpp>
12#include <fstream>
13#include <vector>
14// Note: <fstream> has to precede boost/serialization includes for non-obvious
15// reasons to avoid segfault similar to
16// http://lists.debian.org/debian-hppa/2009/11/msg00069.html
17
18namespace fles
19{
20
28{
29 public:
30 virtual ~Timeslice() = default;
31
33 uint64_t index() const { return timeslice_descriptor_.index; }
34
37
39 uint64_t num_microslices(uint64_t component) const { return desc_ptr_[component]->num_microslices; }
40
43
45 const uint8_t* content(uint64_t component, uint64_t microslice) const
46 {
47 return data_ptr_[component] + desc_ptr_[component]->num_microslices * sizeof(MicrosliceDescriptor)
48 + descriptor(component, microslice).offset - descriptor(component, 0).offset;
49 }
50
52 const MicrosliceDescriptor& descriptor(uint64_t component, uint64_t microslice) const
53 {
54 return reinterpret_cast<const MicrosliceDescriptor*>(data_ptr_[component])[microslice];
55 }
56
58 const MicrosliceView get_microslice(uint64_t component, uint64_t microslice_index) const
59 {
60 uint8_t* component_data_ptr = data_ptr_[component];
61
62 MicrosliceDescriptor& dd = reinterpret_cast<MicrosliceDescriptor*>(component_data_ptr)[microslice_index];
63
64 MicrosliceDescriptor& dd0 = reinterpret_cast<MicrosliceDescriptor*>(component_data_ptr)[0];
65
66 uint8_t* cc = component_data_ptr + desc_ptr_[component]->num_microslices * sizeof(MicrosliceDescriptor)
67 + dd.offset - dd0.offset;
68
69 return MicrosliceView(dd, cc);
70 }
71
72 protected:
73 // Timeslice(){};
74
75 // friend class StorableTimeslice;
76
79
81 std::vector<uint8_t*> data_ptr_;
82
85 std::vector<TimesliceComponentDescriptor*> desc_ptr_;
86};
87
88} // namespace fles
The MicrosliceView class provides read access to a microslice stored elsewhere.
The Timeslice class provides read access to the data of a timeslice.
Definition Timeslice.h:28
uint64_t num_components() const
Retrieve the number of components (contributing input channels).
Definition Timeslice.h:42
virtual ~Timeslice()=default
uint64_t num_microslices(uint64_t component) const
Retrieve the total number of microslices.
Definition Timeslice.h:39
const MicrosliceDescriptor & descriptor(uint64_t component, uint64_t microslice) const
Retrieve the descriptor of a given microslice.
Definition Timeslice.h:52
const uint8_t * content(uint64_t component, uint64_t microslice) const
Retrieve a pointer to the data content of a given microslice.
Definition Timeslice.h:45
TimesliceDescriptor timeslice_descriptor_
The timeslice descriptor.
Definition Timeslice.h:78
std::vector< uint8_t * > data_ptr_
A vector of pointers to the data content, one per timeslice component.
Definition Timeslice.h:81
uint64_t num_core_microslices() const
Retrieve the number of core microslices.
Definition Timeslice.h:36
std::vector< TimesliceComponentDescriptor * > desc_ptr_
A vector of pointers to the microslice descriptors, one per timeslice component.
Definition Timeslice.h:85
const MicrosliceView get_microslice(uint64_t component, uint64_t microslice_index) const
Retrieve the descriptor and pointer to the data of a given microslice.
Definition Timeslice.h:58
uint64_t index() const
Retrieve the timeslice index.
Definition Timeslice.h:33
Defines the fles::MicrosliceDescriptor struct and corresponding enums.
Defines the fles::MicrosliceView class.
Defines the fles::TimesliceComponentDescriptor serializable struct.
Defines the fles::TimesliceDescriptor serializable struct.
Main FLES namespace.
Microslice descriptor struct.
uint64_t offset
Offset in event buffer (bytes)
Timeslice descriptor struct.
uint64_t index
Global index of this timeslice.
uint32_t num_core_microslices
Number of core microslices.
uint32_t num_components
Number of components (contributing input channels)