5 #ifndef _GCOMM_TYPES_HPP_
6 #define _GCOMM_TYPES_HPP_
11 #include "gu_byteswap.hpp"
12 #include "gu_buffer.hpp"
26 String(
const std::string& str =
"") : str_(str)
28 if (str_.size() > str_size_)
30 gu_throw_error(EMSGSIZE);
36 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const
38 if (buflen < offset + str_size_)
40 gu_throw_error (EMSGSIZE) << str_size_
41 <<
" > " << (buflen-offset);
43 std::string ser_str(str_);
44 ser_str.resize(str_size_,
'\0');
45 (void)std::copy(ser_str.data(), ser_str.data() + ser_str.size(),
47 return offset + str_size_;
50 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset)
52 if (buflen < offset + str_size_)
54 gu_throw_error (EMSGSIZE) << str_size_
55 <<
" > " << (buflen-offset);
57 str_.assign(reinterpret_cast<const char*>(buf) + offset, str_size_);
58 const size_t tc(str_.find_first_of(
'\0'));
59 if (tc != std::string::npos)
63 return offset + str_size_;
66 static size_t serial_size()
71 const std::string& to_string()
const {
return str_; }
74 {
return (str_ == cmp.str_); }
77 static const size_t str_size_ = SZ ;
82 inline std::ostream& operator<<(std::ostream& os, const String<SZ>& str)
83 {
return (os << str.to_string()); }
GComm exception definitions.