1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
#ifndef CXXVARIABLE_H
#define CXXVARIABLE_H
#include "CxxLexerAPI.h"
#include "codelite_exports.h"
#include "macros.h"
#include "smart_ptr.h"
#include <map>
#include <set>
#include <unordered_map>
#include <vector>
#include <wx/string.h>
#include <wxStringHash.h>
class WXDLLIMPEXP_CL CxxVariable
{
public:
struct LexerToken {
int type;
int _depth;
wxString text;
wxString comment;
LexerToken()
: type(0)
, _depth(0)
{
}
LexerToken(const CxxLexerToken& token, int depth)
{
FromCxxLexerToken(token);
this->_depth = depth;
}
int GetType() const { return type; }
void FromCxxLexerToken(const CxxLexerToken& token)
{
this->type = token.GetType();
this->comment = token.GetWXComment();
this->text = token.GetWXString();
}
typedef std::vector<CxxVariable::LexerToken> Vec_t;
};
enum eFlags {
kToString_None = 0,
// Include the variable name
kToString_Name = (1 << 0),
// Include the default value
kToString_DefaultValue = (1 << 1),
kToString_Default = kToString_Name,
// Revert back type->macro (e.g. wxWindowMSW -> wxWindow)
kToString_ReverseMacros = (1 << 2),
};
protected:
wxString m_name;
CxxVariable::LexerToken::Vec_t m_type;
wxString m_defaultValue;
eCxxStandard m_standard;
wxString m_pointerOrReference;
bool m_isAuto = false;
int m_lineNumber = wxNOT_FOUND;
public:
typedef SmartPtr<CxxVariable> Ptr_t;
typedef std::vector<CxxVariable::Ptr_t> Vec_t;
typedef std::unordered_map<wxString, CxxVariable::Ptr_t> Map_t;
public:
CxxVariable(eCxxStandard standard);
CxxVariable()
: m_standard(eCxxStandard::kCxx11)
, m_isAuto(false)
{
}
virtual ~CxxVariable();
void SetName(const wxString& name) { this->m_name = name; }
void SetType(const CxxVariable::LexerToken::Vec_t& type) { this->m_type = type; }
const wxString& GetName() const { return m_name; }
const CxxVariable::LexerToken::Vec_t& GetType() const { return m_type; }
// @see ToString() for description about 'table'
wxString GetTypeAsString(const wxStringTable_t& table = wxStringTable_t()) const;
// @see ToString() for description about 'table'
wxString GetTypeAsCxxString(const wxStringTable_t& table = wxStringTable_t()) const;
static wxString PackType(const CxxVariable::LexerToken::Vec_t& type, eCxxStandard standard,
bool omitClassKeyword = false, const wxStringTable_t& table = wxStringTable_t());
/**
* @brief return true if this variable was constructed from a statement like:
* using MyInt = int;
*/
bool IsUsing() const { return GetTypeAsString() == "using" && !m_defaultValue.IsEmpty(); }
/**
* @brief is this a valid variable?
*/
bool IsOk() const { return !m_name.IsEmpty() && !m_type.empty(); }
/**
* @brief is this an "auto" variable?
*/
bool IsAuto() const { return m_isAuto; }
void SetLine(int l) { m_lineNumber = l; }
int GetLineNumber() const { return m_lineNumber; }
void SetIsAuto(bool b) { m_isAuto = b; }
/**
* @brief return a string representation for this variable
* @param flags see values in eFlags
* @param table macros table - reversed. i.e. the actual type is the key and the value is the macro name
* this table is used when the flag kToString_ReverseMacros is passed
*/
wxString ToString(size_t flags = CxxVariable::kToString_Default,
const wxStringTable_t& table = wxStringTable_t()) const;
void SetDefaultValue(const wxString& defaultValue) { this->m_defaultValue = defaultValue; }
const wxString& GetDefaultValue() const { return m_defaultValue; }
void SetPointerOrReference(const wxString& pointerOrReference) { this->m_pointerOrReference = pointerOrReference; }
const wxString& GetPointerOrReference() const { return m_pointerOrReference; }
};
#endif // CXXVARIABLE_H
|