QRedis/src/parser.h

62 lines
1.1 KiB
C
Raw Normal View History

#ifndef PARSER_H
#define PARSER_H
#include <QList>
#include <QObject>
#include <QVariant>
#include <QVariantList>
#include <qredis/reply.h>
#include "lexer.h"
class Parser : public QObject
{
Q_OBJECT
public:
Parser(Lexer *, QObject * = 0);
virtual ~Parser();
Q_SIGNALS:
void reply(QRedis::Reply &);
private Q_SLOTS:
void readCharacter(char);
void readUnsafeString(const QString &);
void readSafeString(const QByteArray &);
private:
void descend();
class Task
{
public:
enum Action {
ReadStatus,
ReadError,
ReadInteger,
ReadBulk,
ReadMultiBulk
};
enum { Unknown = -2 };
Task(Action action) : action(action), count(Unknown) {}
Action action;
int count;
QVariant value;
};
QList<Task> stack;
inline Task & tos() { return stack.last(); }
};
#endif // PARSER_H