ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
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. More...
 
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. More...
 
std::size_t deserialize (const std::vector< uint32_t > &storage, std::vector< std::string > &strings)
 Same as above but with vector instead of iterators. More...
 
std::vector< std::string > deserialize (const std::vector< uint32_t > &storage)
 Same as above but return string by value (useful when invoked from Python) More...
 
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. More...
 
std::size_t deserialize (const std::vector< uint32_t > &storage, std::string &str)
 Deserialize one single string
More...
 
unsigned int inquireSize (const std::vector< uint32_t > &storage)
 Return number of strings serialized into 'storage'. More...
 

Private Member Functions

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

Private Attributes

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

Static Private Attributes

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

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  }

◆ 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 }

◆ 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  }

◆ 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 }

◆ 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 }

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:
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
Trk::one
@ one
Definition: TrkDetDescr/TrkSurfaces/TrkSurfaces/RealQuadraticEquation.h:22
StringSerializer::serialize
void serialize(const std::vector< std::string > &strings, std::vector< uint32_t > &storage)
Serializes vector of strings into vector of integers.
Definition: TrigDataAccess/TrigSerializeResult/src/StringSerializer.cxx:10
StringSerializer::m_istream
std::istringstream m_istream
sstream used in de-serialization
Definition: TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h:85
lumiFormat.i
int i
Definition: lumiFormat.py:85
StringSerializer::m_ostream
std::ostringstream m_ostream
sstream used in serialization
Definition: TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h:84
StringSerializer::deserialize
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.
Definition: TrigDataAccess/TrigSerializeResult/src/StringSerializer.cxx:59
DeMoUpdate.tmp
string tmp
Definition: DeMoUpdate.py:1167
StringSerializer::s_delimiter
static const char *const s_delimiter
default delimeter which is put between strings from the input vector while serialization happens
Definition: TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h:86
DeMoScan.first
bool first
Definition: DeMoScan.py:534
python.SystemOfUnits.s
float s
Definition: SystemOfUnits.py:147
str
Definition: BTagTrackIpAccessor.cxx:11
calibdata.copy
bool copy
Definition: calibdata.py:26
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
StringSerializer::getPadding
unsigned int getPadding(unsigned int sizeToReserve)
Get number of padding bytes needed to align with uint32_t.
Definition: TrigDataAccess/TrigSerializeResult/TrigSerializeResult/StringSerializer.h:80