return packet;
}
-inline Packet& operator<<(Packet& packet, const std::string& value)
+template <class T>
+inline Packet& operator<<(Packet& packet, const std::basic_string<T>& value)
{
packet << (uint16_t)value.length();
- packet.write(value.c_str(), value.length());
+ packet.write(value.data(), value.length() * sizeof(T));
+ return packet;
+}
+
+template <class T>
+inline Packet& operator>>(Packet& packet, std::basic_string<T>& value)
+{
+ uint16_t length = 0;
+ packet >> length;
+
+ T str[length];
+ size_t charsRead = packet.read(str, length * sizeof(T));
+ value.assign(str, charsRead);
return packet;
}
+
template <class T>
inline Packet& operator<<(Packet& packet, const std::vector<T>& value)
{
- packet << (uint8_t)value.size();
+ packet << (uint16_t)value.size();
typename std::vector<T>::const_iterator it;
for (it = value.begin(); it != value.end(); ++it)
{
return packet;
}
-
-inline Packet& operator>>(Packet& packet, std::string& value)
-{
- uint8_t length = 0;
- packet >> length;
-
- char str[256];
- size_t charsRead = packet.read(str, length);
- value.assign(str, charsRead);
- return packet;
-}
-
template <class T>
inline Packet& operator>>(Packet& packet, std::vector<T>& value)
{
- uint8_t size = 0;
+ uint16_t size = 0;
packet >> size;
value.clear();
- for (uint8_t i = 0; i < size; ++i)
+ for (uint16_t i = 0; i < size; ++i)
{
T item;
packet >> item;
}
-
} // namespace Mf
#endif // _MOOF_PACKET_HH_