ATLAS Offline Software
Loading...
Searching...
No Matches
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 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::vector< std::string > deserialize (const std::vector< uint32_t > &storage)
 Same as above but return string by value (useful when invoked from Python)
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 19 of file TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h.

Member Function Documentation

◆ deserialize() [1/5]

std::vector< std::string > StringSerializer::deserialize ( const std::vector< uint32_t > & storage)
inline

Same as above but return string by value (useful when invoked from Python)

Definition at line 54 of file TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h.

54 {
55 std::vector<std::string> strings;
56 deserialize(storage.begin(), storage.end(), strings);
57 return strings;
58 }
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/5]

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

Deserialize one single string.

Definition at line 66 of file TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h.

66 {
67 return deserialize(storage.begin(), storage.end(), str);
68 }

◆ deserialize() [3/5]

std::size_t 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 49 of file TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h.

49 {
50 return deserialize(storage.begin(), storage.end(), strings);
51 }

◆ deserialize() [4/5]

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 97 of file TrigDataAccess/TrigSerializeResult/src/StringSerializer.cxx.

100{
101 std::vector<std::string> tmp;
102 std::size_t nWords = deserialize(first, last, tmp);
103 if (tmp.size() == 1 )
104 str = tmp[0];
105
106 return nWords;
107}

◆ deserialize() [5/5]

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 59 of file TrigDataAccess/TrigSerializeResult/src/StringSerializer.cxx.

62{
63 std::size_t storageSize = std::distance(first, last);
64
65 if ( storageSize <= 1 ) return storageSize;
66 unsigned int numOfStrings = *first;
67
68 /*
69 unsigned int i;
70 std::cerr << "deserialized: " << std::endl;
71 for ( i = 0 ; i < storage.size()-1; ++i ) {
72 std::cerr << " " << std::hex << uarray[i] ;
73 }
74 std::cerr << " " << std::dec << std::endl;
75 */
76
77 std::string whole(reinterpret_cast<const char*>(&*(first+1)),
78 (storageSize-1)*sizeof(uint32_t));
79
80 m_istream.clear(); // istream reset
81 m_istream.str(whole);
82
83 std::string one;
84 unsigned int readInStrings=0;
85 std::size_t nChars=0;
86
87 while ( m_istream.good() && readInStrings < numOfStrings ) {
88 getline(m_istream, one, s_delimiter[0]);
89 strings.push_back(one);
90 readInStrings++;
91 nChars += one.size() + 1;
92 }
93
94 return 1 + (nChars+getPadding(nChars))/sizeof(uint32_t); // # uint32_t words (incl. header)
95}
static const char *const s_delimiter
default delimeter which is put between strings from the input vector while serialization happens
std::istringstream m_istream
sstream used in de-serialization
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 StringSerializer::getPadding ( unsigned int sizeToReserve)
inlineprivate

Get number of padding bytes needed to align with uint32_t.

Definition at line 80 of file TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h.

80 {
81 return (sizeof(uint32_t) - sizeToReserve%sizeof(uint32_t)) % sizeof(uint32_t);
82 }
setEventNumber uint32_t

◆ inquireSize()

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

Return number of strings serialized into 'storage'.

Definition at line 109 of file TrigDataAccess/TrigSerializeResult/src/StringSerializer.cxx.

109 {
110 if ( storage.size() <= 1 )
111 return 0;
112 return storage[0];
113}

◆ serialize() [1/2]

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

Definition at line 54 of file TrigDataAccess/TrigSerializeResult/src/StringSerializer.cxx.

54 {
55 std::vector<std::string> tmp(1, str);
56 return serialize(tmp, storage);
57}
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 10 of file TrigDataAccess/TrigSerializeResult/src/StringSerializer.cxx.

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

Member Data Documentation

◆ m_istream

std::istringstream StringSerializer::m_istream
private

sstream used in de-serialization

Definition at line 85 of file TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h.

◆ m_ostream

std::ostringstream StringSerializer::m_ostream
private

sstream used in serialization

Definition at line 84 of file TrigDataAccess/TrigSerializeResult/TrigSerializeResult/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 86 of file TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h.


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