Program Listing for File payload_base.hpp
↰ Return to documentation for file (include/kobuki_core/packet_handler/payload_base.hpp
)
/*****************************************************************************
** Ifdefs
*****************************************************************************/
#ifndef ROBOT_DATA_HPP_
#define ROBOT_DATA_HPP_
/*****************************************************************************
** Includes
*****************************************************************************/
#include <ecl/containers.hpp>
#include <stdint.h>
/*****************************************************************************
** Namespaces
*****************************************************************************/
namespace packet_handler
{
/*****************************************************************************
** Interface
*****************************************************************************/
class payloadBase
{
public:
bool yes;
const bool is_dynamic;
const unsigned char length;
/*
* construct and destruct
*/
payloadBase(const bool is_dynamic_ = false, const unsigned char length_ = 0 )
: yes(false)
, is_dynamic(is_dynamic_)
, length(length_)
{};
virtual ~payloadBase() {};
/*
* serialisation
*/
virtual bool serialise(ecl::PushAndPop<unsigned char> & byteStream)=0;
virtual bool deserialise(ecl::PushAndPop<unsigned char> & byteStream)=0;
// utilities
// todo; let's put more useful converters here. Or we may use generic converters
protected:
// below funciton should be replaced wiht converter
template<typename T>
void buildVariable(T & V, ecl::PushAndPop<unsigned char> & buffer)
{
if (buffer.size() < sizeof(T))
return;
V = static_cast<unsigned char>(buffer.pop_front());
unsigned int size_value(sizeof(T));
for (unsigned int i = 1; i < size_value; i++)
{
V |= ((static_cast<unsigned char>(buffer.pop_front())) << (8 * i));
}
}
template<typename T>
void buildBytes(const T & V, ecl::PushAndPop<unsigned char> & buffer)
{
unsigned int size_value(sizeof(T));
for (unsigned int i = 0; i < size_value; i++)
{
buffer.push_back(static_cast<unsigned char>((V >> (i * 8)) & 0xff));
}
}
};
}
// namespace packet_handler
#endif /* ROBOT_DATA_HPP_ */