ATLAS Offline Software
Loading...
Searching...
No Matches
TrigSteeringEvent::StringSerializer Class Reference

Utility class (not a tool or so) to serialize strings into stream of 32bit integers. More...

#include <StringSerializer.h>

Collaboration diagram for TrigSteeringEvent::StringSerializer:

Public Member Functions

void serialize (const std::vector< std::string > &strings, std::vector< uint32_t > &storage)
 Serializes vector of strings into vector of integers.
void serialize (const std::string &str, std::vector< uint32_t > &storage)
std::size_t deserialize (std::vector< uint32_t >::const_iterator first, std::vector< uint32_t >::const_iterator last, std::vector< std::string > &strings)
 Deserialize vector into strings.
std::size_t deserialize (const std::vector< uint32_t > &storage, std::vector< std::string > &strings)
 Same as above but with vector instead of iterators.
std::size_t deserialize (std::vector< uint32_t >::const_iterator first, std::vector< uint32_t >::const_iterator last, std::string &str)
 Deserialize one single string.
std::size_t deserialize (const std::vector< uint32_t > &storage, std::string &str)
 Deserialize one single string.
unsigned int inquireSize (const std::vector< uint32_t > &storage)
 Return number of strings serialized into 'storage'.

Private Member Functions

unsigned int getPadding (unsigned int sizeToReserve)
 Get number of padding bytes needed to align with uint32_t.

Private Attributes

std::ostringstream m_ostream
 sstream used in serialization
std::istringstream m_istream
 sstream used in de-serialization

Static Private Attributes

static const char *const s_delimiter = "\n"
 default delimeter which is put between strings from the input vector while serialization happens

Detailed Description

Utility class (not a tool or so) to serialize strings into stream of 32bit integers.

Definition at line 22 of file TrigEvent/TrigSteeringEvent/TrigSteeringEvent/StringSerializer.h.

Member Function Documentation

◆ deserialize() [1/4]

std::size_t TrigSteeringEvent::StringSerializer::deserialize ( const std::vector< uint32_t > & storage,
std::string & str )
inline

Deserialize one single string.

Definition at line 62 of file TrigEvent/TrigSteeringEvent/TrigSteeringEvent/StringSerializer.h.

62 {
63 return deserialize(storage.begin(), storage.end(), str);
64 }
std::size_t deserialize(std::vector< uint32_t >::const_iterator first, std::vector< uint32_t >::const_iterator last, std::vector< std::string > &strings)
Deserialize vector into strings.

◆ deserialize() [2/4]

std::size_t TrigSteeringEvent::StringSerializer::deserialize ( const std::vector< uint32_t > & storage,
std::vector< std::string > & strings )
inline

Same as above but with vector instead of iterators.

Definition at line 52 of file TrigEvent/TrigSteeringEvent/TrigSteeringEvent/StringSerializer.h.

52 {
53 return deserialize(storage.begin(), storage.end(), strings);
54 }

◆ deserialize() [3/4]

std::size_t StringSerializer::deserialize ( std::vector< uint32_t >::const_iterator first,
std::vector< uint32_t >::const_iterator last,
std::string & str )

Deserialize one single string.

Definition at line 102 of file TrigEvent/TrigSteeringEvent/src/StringSerializer.cxx.

105{
106 std::vector<std::string> tmp;
107 std::size_t nWords = deserialize(first, last, tmp);
108 if (tmp.size() == 1 )
109 str = tmp[0];
110
111 return nWords;
112}

◆ deserialize() [4/4]

std::size_t StringSerializer::deserialize ( std::vector< uint32_t >::const_iterator first,
std::vector< uint32_t >::const_iterator last,
std::vector< std::string > & strings )

Deserialize vector into strings.

Parameters
firstBeginning of 'byte-stream'
lastEnd of 'byte-stream', i.e. vector::end()
stringsVector of strings to hold result
Returns
Number of words consumed during deserialization

Definition at line 64 of file TrigEvent/TrigSteeringEvent/src/StringSerializer.cxx.

67{
68 std::size_t storageSize = std::distance(first, last);
69
70 if ( storageSize <= 1 ) return storageSize;
71 unsigned int numOfStrings = *first;
72
73 /*
74 unsigned int i;
75 std::cerr << "deserialized: " << std::endl;
76 for ( i = 0 ; i < storage.size()-1; ++i ) {
77 std::cerr << " " << std::hex << uarray[i] ;
78 }
79 std::cerr << " " << std::dec << std::endl;
80 */
81
82 std::string whole(reinterpret_cast<const char*>(&*(first+1)),
83 (storageSize-1)*sizeof(uint32_t));
84
85 m_istream.clear(); // istream reset
86 m_istream.str(whole);
87
88 std::string one;
89 unsigned int readInStrings=0;
90 std::size_t nChars=0;
91
92 while ( m_istream.good() && readInStrings < numOfStrings ) {
93 getline(m_istream, one, s_delimiter[0]);
94 strings.push_back(one);
95 readInStrings++;
96 nChars += one.size() + 1;
97 }
98
99 return 1 + (nChars+getPadding(nChars))/sizeof(uint32_t); // # uint32_t words (incl. header)
100}
static const char *const s_delimiter
default delimeter which is put between strings from the input vector while serialization happens
unsigned int getPadding(unsigned int sizeToReserve)
Get number of padding bytes needed to align with uint32_t.
bool first
Definition DeMoScan.py:534

◆ getPadding()

unsigned int TrigSteeringEvent::StringSerializer::getPadding ( unsigned int sizeToReserve)
inlineprivate

Get number of padding bytes needed to align with uint32_t.

Definition at line 76 of file TrigEvent/TrigSteeringEvent/TrigSteeringEvent/StringSerializer.h.

76 {
77 return (sizeof(uint32_t) - sizeToReserve%sizeof(uint32_t)) % sizeof(uint32_t);
78 }
setEventNumber uint32_t

◆ inquireSize()

unsigned int StringSerializer::inquireSize ( const std::vector< uint32_t > & storage)

Return number of strings serialized into 'storage'.

Definition at line 114 of file TrigEvent/TrigSteeringEvent/src/StringSerializer.cxx.

114 {
115 if ( storage.size() <= 1 )
116 return 0;
117 return storage[0];
118}

◆ serialize() [1/2]

void StringSerializer::serialize ( const std::string & str,
std::vector< uint32_t > & storage )

Definition at line 59 of file TrigEvent/TrigSteeringEvent/src/StringSerializer.cxx.

59 {
60 std::vector<std::string> tmp(1, str);
61 return serialize(tmp, storage);
62}
void serialize(const std::vector< std::string > &strings, std::vector< uint32_t > &storage)
Serializes vector of strings into vector of integers.

◆ serialize() [2/2]

void StringSerializer::serialize ( const std::vector< std::string > & strings,
std::vector< uint32_t > & storage )

Serializes vector of strings into vector of integers.

The number of strings (size of input vector) is put first into the stream. In case the strings is an empty vector the 0 is put into the storage.

Parameters
strings
storageis place where serizlized from of stings is appended to

Definition at line 15 of file TrigEvent/TrigSteeringEvent/src/StringSerializer.cxx.

15 {
16
17 m_ostream.str(""); // ostream reset
18
19 // copy strings into m_ostream with delimiter after each element (even after last element)
20 copy(strings.begin(), strings.end(), std::ostream_iterator<std::string>(m_ostream, s_delimiter));
21
22 /*
23 unsigned int i;
24 for ( i = 0 ; i < strings.size() ; ++i) {
25 std::cerr << "ser: " << strings[i] << std::endl;
26 }
27 */
28
29 unsigned sizeToReserve = m_ostream.str().size();
30
31 // Pad with '\n'
32 unsigned int sizeToPad = getPadding(sizeToReserve);
33
34 if ( sizeToPad != 0 ) {
35 sizeToReserve += sizeToPad;
36 for ( unsigned i = 0 ; i < sizeToPad; i++ )
38 }
39 m_ostream.flush();
40
41 std::string s (m_ostream.str());
42 const uint32_t * uarray = reinterpret_cast<const uint32_t*> (s.data());
43
44 storage.push_back(strings.size()); // put number of strings first
45 storage.insert(storage.end(), &uarray[0], &uarray[sizeToReserve/sizeof(uint32_t)]);
46
47 /*
48 std::cerr << "reserved = " << sizeToReserve << ", pad = " << sizeToPad
49 << ", storage size = " << storage.size() << ", serialized: " << std::endl;
50
51 for ( unsigned int i = 0 ; i < sizeToReserve; ++i ) {
52 std::cerr << " " << std::hex << (int)carray[i] << std::dec << "(" << (char)carray[i] << ")";
53 }
54 std::cerr << " " << std::dec << std::endl;
55 */
56
57}
bool copy
Definition calibdata.py:26

Member Data Documentation

◆ m_istream

std::istringstream TrigSteeringEvent::StringSerializer::m_istream
private

sstream used in de-serialization

Definition at line 81 of file TrigEvent/TrigSteeringEvent/TrigSteeringEvent/StringSerializer.h.

◆ m_ostream

std::ostringstream TrigSteeringEvent::StringSerializer::m_ostream
private

sstream used in serialization

Definition at line 80 of file TrigEvent/TrigSteeringEvent/TrigSteeringEvent/StringSerializer.h.

◆ s_delimiter

const char *const StringSerializer::s_delimiter = "\n"
staticprivate

default delimeter which is put between strings from the input vector while serialization happens

Definition at line 82 of file TrigEvent/TrigSteeringEvent/TrigSteeringEvent/StringSerializer.h.


The documentation for this class was generated from the following files: