CRINSA-team2024 2024
Documentation du Club Robot INSA Rennes 2024
Chargement...
Recherche...
Aucune correspondance
serialutils.h
1#ifndef __SERIALUTILS_H__
2#define __SERIALUTILS_H__
3
4// This library is free software from Club robot Insa Rennes sources; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8// This library is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11// Lesser General Public License for more details.
12
13#ifdef ARDUINO
14#include <Arduino.h>
15#else
16#include <string>
17typedef unsigned char byte;
18typedef std::string String;
19#endif
20
30{
35 byte *buffer;
36
43
50 template <typename T>
51 Serializer &operator<<(const T &object)
52 {
53 write(object);
54 return *this;
55 }
56
62 template <typename T>
63 void write(const T &object)
64 {
65 *(T *)(buffer) = object;
66 buffer += sizeof(T);
67 }
68
74 void write(const char *string)
75 {
76 do
77 write(*string);
78 while (*(string++) != '\0');
79 }
80};
81
82template <>
88inline void Serializer::write<String>(const String &string)
89{
90 write(string.c_str());
91}
92
102{
107 byte *buffer;
108
113 byte *adr;
114
121
128 template <typename T>
130 {
131 object = read<T>();
132 return *this;
133 }
134
142 {
143 do
144 *string = read<char>();
145 while ((*string++) != '\0');
146 return *this;
147 }
148
154 template <typename T>
156 {
157 byte *address = buffer;
158 buffer += sizeof(T);
159 return *(T *)(address);
160 }
161
166 void clear()
167 {
168 free(adr);
169 }
170};
171
177template <>
178inline String Deserializer::read<String>()
179{
180 String string((char *)(buffer));
181 buffer += string.length() + 1;
182 return string;
183}
184
185#endif // __SERIALUTILS_H__
Objet destiné à extraire des variables d'un flux en octet.
Definition serialutils.h:102
byte * buffer
pointer vers le buffer à vider
Definition serialutils.h:107
Deserializer & operator>>(char *string)
Operateur de décalage, a utilisé pour remplir le buffer uniquement pour les variables de type char.
Definition serialutils.h:141
Deserializer & operator>>(T &object)
Operateur de décalage, à utiliser pour extraire les variables du buffer.
Definition serialutils.h:129
byte * adr
buffer address pointer
Definition serialutils.h:113
void clear()
Free the buffer memory.
Definition serialutils.h:166
Deserializer(byte buffer[])
Construct a new Deserializer object.
Definition serialutils.h:120
T read()
Methode interne pour convertir les octets du buffer en données exploitables.
Definition serialutils.h:155
Objet destiné à creer un flux de sortie pour les programme cpp.
Definition serialutils.h:30
void write(const T &object)
Methode pour une utilisation interne qui permet d'écrire sur le buffer après conversion en octets.
Definition serialutils.h:63
byte * buffer
pointer vers le buffer à complêter
Definition serialutils.h:35
void write(const char *string)
Methode pour une utilisation interne qui permet d'écrire sur le buffer après conversion en octets.
Definition serialutils.h:74
Serializer & operator<<(const T &object)
Operateur de décalage, a utilisé pour remplir le buffer.
Definition serialutils.h:51
Serializer(byte buffer[])
Construct a new Serializer object.
Definition serialutils.h:42