Program Listing for File codepos.h#

Return to documentation for file (sdv_idl_compiler\codepos.h)

#ifndef CODEPOS_H
#define CODEPOS_H

#include "lexerbase.h"
#include <cstdint>
#include <list>
#include <string>

// Forward declaration
class CToken;

class CCodePos
{
public:
    CCodePos();

    CCodePos(const char* szCode);

    CCodePos(const CCodePos& rCode);

    CCodePos(CCodePos&& rCode) noexcept;

    bool IsValid() const;
    operator bool() const;
    void Reset();

    uint32_t GetLine() const;

    uint32_t GetCol() const;

    bool HasEOF() const;

    bool HasEOL() const;

    CToken GetLocation(ETokenType eTokenType = ETokenType::token_none) const;

    void UpdateLocation(CToken& rtoken) const;

    void UpdateLocation(CToken& rtoken, ETokenLiteralType eLiteralType) const;

    void UpdateLocation(CToken& rtoken, ETokenMetaType eMetaType) const;

    void PrependCode(const std::string& rssCode);

    bool CurrentPositionInMacroExpansion() const;

    CCodePos& operator=(const CCodePos& rCode);

    CCodePos& operator=(CCodePos&& rCode) noexcept;

    char operator[](uint32_t uiOffset /*= 0*/) const;

    char operator*() const;

    operator const char*() const;

    CCodePos operator++(int);

    CCodePos& operator++();

    CCodePos& operator+=(uint32_t uiOffset);

 private:
    const char*                     m_szCode = nullptr;
    const char*                     m_szCurrent = nullptr;
    const char*                     m_szPrependedPos = nullptr;
    const char*                     m_szPrependedCode = nullptr;
    const char*                     m_szPrependedCurrent = nullptr;
    std::string                     m_ssPrependedCode;
    mutable std::list<std::string>  m_lstCodeChunks;
    uint32_t                        m_uiLine = 0;
    uint32_t                        m_uiCol = 0;
};

#endif // !defined CODEPOS_H