PIP 5.6.1
Platform-Independent Primitives
Открытые члены | Полный список членов класса
Шаблон класса PIParseHelper< Key >

Связывает ключи пакетов с обработчиками и десериализует полезную нагрузку перед вызовом. Подробнее...

#include <piparsehelper.h>

Открытые члены

 PIParseHelper ()
 Создает пустой вспомогательный парсер.
 
void assign (Key key, std::function< void()> func)
 Связывает ключ "key" с callback-функцией "func" без аргументов полезной нагрузки.
 
template<typename T >
void assign (Key key, std::function< void(const T &)> func)
 Связывает ключ "key" с callback-функцией "func" с одним десериализуемым аргументом.
 
template<typename O >
void assign (Key key, O *obj, void(O::*member_func)())
 Связывает ключ "key" с методом объекта "obj" без аргументов.
 
template<typename T , typename O >
void assign (Key key, O *obj, void(O::*member_func)(const T &))
 Связывает ключ "key" с методом объекта "obj" с одним десериализуемым аргументом.
 
template<typename L >
void assign (Key key, L func)
 Связывает ключ "key" с функтором или lambda с нулем или одним аргументом.
 
void parse (Key key, PIByteArray ba)
 Десериализует полезную нагрузку "ba" и вызывает обработчики, назначенные ключу "key".
 

Подробное описание

template<typename Key>
class PIParseHelper< Key >

Связывает ключи пакетов с обработчиками и десериализует полезную нагрузку перед вызовом.

PIParseHelper помогает заменить ручную диспетчеризацию пакетов через switch набором вызовов assign(). Обработчиками могут быть обычные callback-функции, функторы или методы объекта. Тип полезной нагрузки восстанавливается из PIByteArray по сигнатуре выбранного обработчика.

Пример:

enum Header {
hInt = 1,
hString,
hVoid
};
class MyObj: public PIObject, public PIParseHelper<uchar> {
PIOBJECT(MyObj);
public:
MyObj(): PIParseHelper<uchar>(this) {
// Keys with 1 argument
assign(hInt, std::function<void(int)>([this](int i){piCout << "lambda type Int" << i;}));
assign(hInt, HANDLER(methodI));
assign(hString, HANDLER(methodS));
// hVoid key, without arguments
assign(hVoid, [](){piCout << "type void";});
assign(hVoid, HANDLER(method));
}
EVENT_HANDLER1(void, methodI, int, i) {piCout << "methodI" << i;}
EVENT_HANDLER1(void, methodS, PIString, s) {piCout << "methodS" << s;}
EVENT_HANDLER0(void, method) {piCout << "method";}
};
int main() {
MyObj o;
data.clear();
data << 11;
o.parse(hInt, data);
// lambda type Int 11
// methodI 11
data.clear();
data << PIString("text");
o.parse(hString, data);
// methodS text
data.clear();
o.parse(hVoid, data);
// type void
// method
}
Класс PIByteArray предоставляет массив байтов с эффективным управлением памятью и различными операция...
Definition: pibytearray.h:42
Базовый класс для объектов, которые объявляют события, обработчики событий и зарегистрированные метод...
Definition: piobject.h:56
Связывает ключи пакетов с обработчиками и десериализует полезную нагрузку перед вызовом.
Definition: piparsehelper.h:54
void assign(Key key, std::function< void()> func)
Связывает ключ "key" с callback-функцией "func" без аргументов полезной нагрузки.
Definition: piparsehelper.h:63
Класс строки.
Definition: pistring.h:42
return s
Оператор сохранения.
Definition: pisystemmonitor.h:312
#define piCout
Definition: picout.h:36
enum Header {
hInt = 1,
hString,
hVoid
};
class MyObj: public PIObject {
PIOBJECT(MyObj);
public:
EVENT_HANDLER1(void, methodI, int, i) {piCout << "methodI" << i;}
EVENT_HANDLER1(void, methodS, PIString, s) {piCout << "methodS" << s;}
EVENT_HANDLER0(void, method) {piCout << "method";}
};
int main() {
MyObj obj;
PIParseHelper<int> parser(&obj);
parser.assign(hInt, obj.HANDLER(methodI));
parser.assign(hString, obj.HANDLER(methodS));
parser.assign(hVoid, obj.HANDLER(method));
data.clear();
data << 11;
parser.parse(hInt, data);
// methodI 11
data.clear();
data << PIString("text");
parser.parse(hString, data);
// methodS text
data.clear();
parser.parse(hVoid, data);
// method
}