23 const size_t sz =
sizeof(T);
24 assert(cursor.pack + sz <
b.
size);
25 memcpy(
b.buf+cursor.pack, &value, sz);
36 const size_t sz =
sizeof(T);
37 assert(cursor.unpack + sz <
b.
size);
38 memcpy(&value,
b.buf + cursor.unpack, sz);
47 const size_t sz =
sizeof(T);
48 assert(cursor.unpack + sz <
b.
size);
50 memcpy(&ret,
b.buf + cursor.unpack, sz);
65 virtual void handle(
Frame &f)=0;
69 typedef void (*Func)(
Frame &f);
72 void handle(
Frame &f)
override {
79 typedef void(T::*Method)(
Frame &f);
83 void handle(
Frame &f)
override {
84 return (base->*method)(f);
92 assert(
list[
id] ==
nullptr);
99 assert(
list[
id] ==
nullptr);
113 for (
auto &entry:
list) {
dynamically allocated, but fixed-size buffer template
Definition buffer.h:18
size_t size
total capacity of buffer
Definition buffer.h:23
size_t len
number of items stored in buffer
Definition buffer.h:21
Virtual Base for a callable Frame handler.
Definition frameregistry.h:63
pure function FrameHandler
Definition frameregistry.h:68
class method FrameHandler
Definition frameregistry.h:78
Registry for dispatching frames to their registered destinations.
Definition frameregistry.h:61
FrameHandler * list[64]
list of registered handlers
Definition frameregistry.h:89
void setHandler(uint8_t id, T &base, typename MethodHandler< T >::Method method)
register class method FrameHandler for given id
Definition frameregistry.h:97
void handle(Frame &&f)
handle given Frame and consume it
Definition frameregistry.h:108
void setHandler(uint8_t id, FuncHandler::Func f)
register pure function FrameHandler for given id
Definition frameregistry.h:91
pyWisp communication frame
Definition frameregistry.h:10
Frame & pack(T value)
pack value into Frame
Definition frameregistry.h:22
Frame(uint8_t id=0)
construct Frame with given id
Definition frameregistry.h:16
Buffer< uint8_t > b
buffer containing the Frame payload
Definition frameregistry.h:12
uint8_t id
buffer id: [0..63]
Definition frameregistry.h:14
T unpack()
return unpacked value from Frame
Definition frameregistry.h:46
void unPack(T &value)
unpack into value from Frame
Definition frameregistry.h:35