ed
binary_writer.h
Go to the documentation of this file.
1 #ifndef ERA_TUE_IO_BINARY_WRITER_H_
2 #define ERA_TUE_IO_BINARY_WRITER_H_
3 
4 #include "era/io/writer.h"
5 
6 #include <map>
7 #include <stdint.h>
8 #include <vector>
9 
10 namespace era
11 {
12 
13 namespace io
14 {
15 
16 class BinaryWriter : Writer
17 {
18 
19 public:
20 
21  BinaryWriter(Data& data) : Writer(data) {}
22 
24 
25  void writeGroup(const std::string& name)
26  {
27  writeLabel("g" + name);
28  }
29 
30  void endGroup()
31  {
32  write('e');
33  }
34 
35  void writeValue(const std::string& key, float f)
36  {
37  writeLabel("f" + key);
38  write<float>(f);
39  }
40 
41  void writeValue(const std::string& key, int i)
42  {
43  writeLabel("i" + key);
44  write<int32_t>(i);
45  }
46 
47  void writeValue(const std::string& key, const std::string& s)
48  {
49  writeLabel("s" + key);
50  temp_data_.insert(temp_data_.end(), &s[0], &s[s.size() + 1]);
51  }
52 
53  void writeValue(const std::string& key, const float* fs, std::size_t size)
54  {
55  writeLabel("F" + key);
56  temp_data_.insert(temp_data_.end(), (const char*)fs, (const char*)fs + size * sizeof(float));
57  }
58 
59  void writeValue(const std::string& key, const int* is, std::size_t size)
60  {
61  // ...
62  }
63 
64  void writeValue(const std::string& key, const std::string* ss, std::size_t size)
65  {
66  // ...
67  }
68 
69  void writeArray(const std::string& key)
70  {
71  writeLabel("a" + key);
72  }
73 
74  void addArrayItem() {}
75  void endArrayItem() {}
76 
77  void endArray()
78  {
79  write('e');
80  }
81 
82  void finish()
83  {
84  // Add all labels
86  {
87  const std::string& s = *it;
88  data_.insert(data_.end(), &s[0], &s[s.size() + 1]);
89  }
90 
91  data_.insert(data_.end(), temp_data_.begin(), temp_data_.end());
92  }
93 
94 private:
95 
98 
99  void writeLabel(const std::string& label)
100  {
102 
103  std::size_t idx;
104  if (it != label_to_index_.end())
105  idx = it->second;
106  else
107  {
108  std::size_t idx = labels_.size();
109  label_to_index_[label] = idx;
110  labels_.push_back(label);
111  }
112 
113  if (idx < 255)
114  {
115  temp_data_.push_back(idx);
116  }
117  else
118  {
119  temp_data_.push_back(255);
120  write<uint32_t>(idx);
121  }
122  }
123 
124  template<typename T>
125  inline void write(const T& d)
126  {
127  temp_data_.insert(temp_data_.end(), (char*)&d, (char*)&d + sizeof(T));
128  }
129 
131 
132 };
133 
134 }
135 
136 } // end namespace era
137 
138 #endif
std::string
era::io::BinaryWriter::writeValue
void writeValue(const std::string &key, const int *is, std::size_t size)
Definition: binary_writer.h:59
vector
std::map::find
T find(T... args)
std::string::size
T size(T... args)
era::io::BinaryWriter::endArrayItem
void endArrayItem()
Definition: binary_writer.h:75
era::io::BinaryWriter::writeLabel
void writeLabel(const std::string &label)
Definition: binary_writer.h:99
era::io::BinaryWriter::endGroup
void endGroup()
Definition: binary_writer.h:30
era::io::BinaryWriter::writeValue
void writeValue(const std::string &key, const std::string &s)
Definition: binary_writer.h:47
era::io::BinaryWriter::writeArray
void writeArray(const std::string &key)
Definition: binary_writer.h:69
era::io::BinaryWriter::label_to_index_
std::map< std::string, std::size_t > label_to_index_
Definition: binary_writer.h:97
era
Definition: binary_writer.h:10
std::vector::push_back
T push_back(T... args)
era::io::BinaryWriter::endArray
void endArray()
Definition: binary_writer.h:77
era::io::BinaryWriter::addArrayItem
void addArrayItem()
Definition: binary_writer.h:74
era::io::BinaryWriter::writeValue
void writeValue(const std::string &key, const std::string *ss, std::size_t size)
Definition: binary_writer.h:64
era::io::BinaryWriter::~BinaryWriter
~BinaryWriter()
Definition: binary_writer.h:23
era::io::BinaryWriter::writeValue
void writeValue(const std::string &key, float f)
Definition: binary_writer.h:35
era::io::BinaryWriter::BinaryWriter
BinaryWriter(Data &data)
Definition: binary_writer.h:21
era::io::BinaryWriter::temp_data_
std::vector< unsigned char > temp_data_
Definition: binary_writer.h:130
map
std::vector::begin
T begin(T... args)
era::io::BinaryWriter::labels_
std::vector< std::string > labels_
Definition: binary_writer.h:96
std::vector::insert
T insert(T... args)
era::io::BinaryWriter::finish
void finish()
Definition: binary_writer.h:82
era::io::BinaryWriter::writeValue
void writeValue(const std::string &key, int i)
Definition: binary_writer.h:41
era::io::BinaryWriter::writeValue
void writeValue(const std::string &key, const float *fs, std::size_t size)
Definition: binary_writer.h:53
std::size_t
std::vector::end
T end(T... args)
era::io::BinaryWriter
Definition: binary_writer.h:16
era::io::BinaryWriter::write
void write(const T &d)
Definition: binary_writer.h:125
era::io::BinaryWriter::writeGroup
void writeGroup(const std::string &name)
Definition: binary_writer.h:25