Program Listing for File token.h#
↰ Return to documentation for file (sdv_idl_compiler\token.h)
#ifndef LOCATION_H
#define LOCATION_H
#include "constvariant.h"
#include "lexerbase.h"
#include "parsecontext.h"
#include <cstdint>
#include <string>
#include <limits>
#include <cerrno>
#include <cstring>
#include <list>
#include <memory>
// Forward declaration
class CCodePos;
class CToken
{
friend CCodePos;
public:
CToken() = default;
CToken(const std::string& rssText, ETokenType eType = ETokenType::token_identifier);
CToken(const std::string& rssText, ETokenLiteralType eLiteralType);
CToken(const std::string& rssText, ETokenMetaType eMetaType);
void MoveStart(int32_t iOffset);
void MoveEnd(int32_t iOffset);
bool operator==(const CToken& rtoken) const;
bool operator!=(const CToken& rtoken) const;
uint32_t GetLine() const;
uint32_t GetCol() const;
uint32_t GetEndLine() const;
uint32_t GetEndCol() const;
uint32_t GetLength() const;
ETokenType GetType() const;
ETokenLiteralType GetLiteralType() const;
ETokenMetaType GetMetaType() const;
operator bool() const;
operator const std::string&() const;
const char* c_str() const;
std::string Left(uint32_t uiLen) const;
std::string Right(uint32_t uiLen) const;
bool operator==(const char* szString) const;
bool operator!=(const char* szString) const;
bool operator==(const std::string& rssString) const;
bool operator!=(const std::string& rssString) const;
bool IsLiteral() const;
bool IsInteger() const;
bool IsSigned() const;
bool IsUnsigned() const;
bool IsLong() const;
bool IsLongLong() const;
bool IsDecimal() const;
bool IsHexadecimal() const;
bool IsOctal() const;
bool IsBinary() const;
bool IsFloatingPoint() const;
bool IsFixedPoint() const;
bool IsCharacter() const;
bool IsCharacterSequence() const;
bool IsString() const;
bool IsAscii() const;
bool IsUtf8() const;
bool IsUtf16() const;
bool IsUtf32() const;
bool IsWide() const;
bool IsRawString() const;
bool IsBoolean() const;
bool IsNullptr() const;
CConstVariant ValueRef() const;
void SetContext(const CContextPtr& rptrContext) { m_ptrContext = rptrContext; }
CContextPtr GetContext() const { return m_ptrContext; }
private:
template <typename... TChar>
bool Contains(char c, TChar... tChars) const;
template <typename... TString>
bool Contains(const char* sz, TString... tStrings) const;
bool Contains() const { return false; }
CConstVariant ValueSignedInteger() const;
CConstVariant ValueUnsignedInteger() const;
CConstVariant ValueFloat() const;
CConstVariant ValueBoolean() const;
CConstVariant ValueNullptr() const;
CConstVariant ValueString() const;
private:
CContextPtr m_ptrContext;
const char* m_szCode = nullptr;
uint32_t m_uiLen = 0xffffffff;
uint32_t m_uiLine = 0;
uint32_t m_uiCol = 0;
ETokenType m_eType = ETokenType::token_none;
ETokenLiteralType m_eLiteralType = ETokenLiteralType::token_undefined;
ETokenMetaType m_eMetaType = ETokenMetaType::token_undefined;
mutable std::string m_ssCache;
};
#endif // !defined LOCATION_H