jsonsax.hpp
author Fabien Ninoles <fabien@tzone.org>
Sun, 07 Oct 2012 14:30:52 -0400
changeset 1 ef7abb48573b
parent 0 d187e7fc9970
permissions -rw-r--r--
Convert to C api.

#ifndef _JSONSAX_HPP_
#define _JSONSAX_HPP_

class IJSLXBackend
{
public:
    virtual bool Eof() = 0;
    virtual char GetChar() = 0;

    virtual bool OnStartObject()
    {
        return true;
    }
    virtual bool OnStopObject()
    {
        return true;
    }
    virtual bool OnStartArray()
    {
        return true;
    }
    virtual bool OnStopArray()
    {
        return true;
    }
    virtual bool OnStartNumber()
    {
        return true;
    }
    virtual bool OnStopNumber()
    {
        return true;
    }
    virtual bool OnStartString()
    {
        return true;
    }
    virtual bool OnStopString()
    {
        return true;
    }
    virtual bool OnNull()
    {
        return true;
    }
    virtual bool OnTrue()
    {
        return true;
    }
    virtual bool OnFalse()
    {
        return true;
    }
    virtual void OnError(const char* err)
    {
        (void)err;
    }
};

class JSLXParser
{
public:
    JSLXParser(IJSLXBackend* pBackend);
    bool Parse();
protected:
    bool _GetNextChar();
    bool TrimWhiteSpace();
    bool GetNextChar(bool trim = true);
    bool ParseValue();
    bool ParseObject();
    bool ParsePair();
    bool ParseArray();
    bool ParseString();
    bool ParseNumber();
    bool ParseNull();
    bool ParseTrue();
    bool ParseFalse();
    bool ParseConstant(const char* constant);
private:
    IJSLXBackend* m_pBackend;
    char          m_lastChar;
};

#endif