Extracted most of linked list logic into a template class
parent
d82b5ef746
commit
3008e18fc6
|
@ -47,15 +47,12 @@ CBotCall::CBotCall(const std::string& name,
|
||||||
m_name = name;
|
m_name = name;
|
||||||
m_rExec = rExec;
|
m_rExec = rExec;
|
||||||
m_rComp = rCompile;
|
m_rComp = rCompile;
|
||||||
m_next = nullptr;
|
|
||||||
m_nFuncIdent = CBotVar::NextUniqNum();
|
m_nFuncIdent = CBotVar::NextUniqNum();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotCall::~CBotCall()
|
CBotCall::~CBotCall()
|
||||||
{
|
{
|
||||||
if (m_next) delete m_next;
|
|
||||||
m_next = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -155,12 +152,6 @@ std::string CBotCall::GetName()
|
||||||
return m_name;
|
return m_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotCall* CBotCall::Next()
|
|
||||||
{
|
|
||||||
return m_next;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
int CBotCall::DoCall(long& nIdent, CBotToken* token, CBotVar** ppVar, CBotStack* pStack, CBotTypResult& rettype)
|
int CBotCall::DoCall(long& nIdent, CBotToken* token, CBotVar** ppVar, CBotStack* pStack, CBotTypResult& rettype)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,14 +19,10 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// Modules inlcude
|
#include "CBot/CBotUtils.h"
|
||||||
|
|
||||||
// Local include
|
|
||||||
|
|
||||||
// Global include
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
// Forward declaration
|
|
||||||
class CBotStack;
|
class CBotStack;
|
||||||
class CBotCStack;
|
class CBotCStack;
|
||||||
class CBotVar;
|
class CBotVar;
|
||||||
|
@ -38,7 +34,7 @@ class CBotToken;
|
||||||
/*!
|
/*!
|
||||||
* \brief The CBotCall class. Class for routine calls (external).
|
* \brief The CBotCall class. Class for routine calls (external).
|
||||||
*/
|
*/
|
||||||
class CBotCall
|
class CBotCall : public CBotLinkedList<CBotCall>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -123,12 +119,6 @@ public:
|
||||||
*/
|
*/
|
||||||
std::string GetName();
|
std::string GetName();
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Next
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
CBotCall* Next();
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief SetPUser
|
* \brief SetPUser
|
||||||
* \param pUser
|
* \param pUser
|
||||||
|
@ -149,5 +139,4 @@ private:
|
||||||
std::string m_name;
|
std::string m_name;
|
||||||
bool (*m_rExec) (CBotVar* pVar, CBotVar* pResult, int& Exception, void* pUser);
|
bool (*m_rExec) (CBotVar* pVar, CBotVar* pResult, int& Exception, void* pUser);
|
||||||
CBotTypResult (*m_rComp) (CBotVar* &pVar, void* pUser);
|
CBotTypResult (*m_rComp) (CBotVar* &pVar, void* pUser);
|
||||||
CBotCall* m_next;
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -39,15 +39,12 @@ CBotCallMethode::CBotCallMethode(const std::string& name,
|
||||||
m_name = name;
|
m_name = name;
|
||||||
m_rExec = rExec;
|
m_rExec = rExec;
|
||||||
m_rComp = rCompile;
|
m_rComp = rCompile;
|
||||||
m_next = nullptr;
|
|
||||||
m_nFuncIdent = CBotVar::NextUniqNum();
|
m_nFuncIdent = CBotVar::NextUniqNum();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotCallMethode::~CBotCallMethode()
|
CBotCallMethode::~CBotCallMethode()
|
||||||
{
|
{
|
||||||
delete m_next;
|
|
||||||
m_next = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -87,21 +84,6 @@ std::string CBotCallMethode::GetName()
|
||||||
return m_name;
|
return m_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotCallMethode* CBotCallMethode::Next()
|
|
||||||
{
|
|
||||||
return m_next;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
void CBotCallMethode::AddNext(CBotCallMethode* pt)
|
|
||||||
{
|
|
||||||
CBotCallMethode* p = this;
|
|
||||||
while ( p->m_next != nullptr ) p = p->m_next;
|
|
||||||
|
|
||||||
p->m_next = pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
int CBotCallMethode::DoCall(long& nIdent,
|
int CBotCallMethode::DoCall(long& nIdent,
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
|
|
|
@ -19,12 +19,9 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// Modules inlcude
|
|
||||||
#include "CBot/CBotTypResult.h"
|
#include "CBot/CBotTypResult.h"
|
||||||
|
#include "CBot/CBotUtils.h"
|
||||||
|
|
||||||
// Local include
|
|
||||||
|
|
||||||
// Global include
|
|
||||||
class CBotVar;
|
class CBotVar;
|
||||||
class CBotCStack;
|
class CBotCStack;
|
||||||
class CBotStack;
|
class CBotStack;
|
||||||
|
@ -34,7 +31,7 @@ class CBotToken;
|
||||||
* \brief The CBotCallMethode class Class managing the methods declared by
|
* \brief The CBotCallMethode class Class managing the methods declared by
|
||||||
* AddFunction on a class.
|
* AddFunction on a class.
|
||||||
*/
|
*/
|
||||||
class CBotCallMethode
|
class CBotCallMethode : public CBotLinkedList<CBotCallMethode>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -94,23 +91,10 @@ public:
|
||||||
*/
|
*/
|
||||||
std::string GetName();
|
std::string GetName();
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Next
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
CBotCallMethode* Next();
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief AddNext
|
|
||||||
* \param p
|
|
||||||
*/
|
|
||||||
void AddNext(CBotCallMethode* p);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_name;
|
std::string m_name;
|
||||||
bool (*m_rExec) (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception, void* user);
|
bool (*m_rExec) (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception, void* user);
|
||||||
CBotTypResult (*m_rComp) (CBotVar* pThis, CBotVar* &pVar);
|
CBotTypResult (*m_rComp) (CBotVar* pThis, CBotVar* &pVar);
|
||||||
CBotCallMethode* m_next;
|
|
||||||
friend class CBotClass;
|
friend class CBotClass;
|
||||||
long m_nFuncIdent;
|
long m_nFuncIdent;
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,6 @@ CBotClass::CBotClass(const std::string& name,
|
||||||
m_pParent = pPapa;
|
m_pParent = pPapa;
|
||||||
m_name = name;
|
m_name = name;
|
||||||
m_pVar = nullptr;
|
m_pVar = nullptr;
|
||||||
m_next = nullptr;
|
|
||||||
m_pCalls = nullptr;
|
m_pCalls = nullptr;
|
||||||
m_pMethod = nullptr;
|
m_pMethod = nullptr;
|
||||||
m_rMaj = nullptr;
|
m_rMaj = nullptr;
|
||||||
|
@ -91,8 +90,6 @@ CBotClass::~CBotClass()
|
||||||
delete m_pVar;
|
delete m_pVar;
|
||||||
delete m_pCalls;
|
delete m_pCalls;
|
||||||
delete m_pMethod;
|
delete m_pMethod;
|
||||||
|
|
||||||
delete m_next; // releases all of them on this level
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -244,15 +241,6 @@ bool CBotClass::AddItem(CBotVar* pVar)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
void CBotClass::AddNext(CBotClass* pClass)
|
|
||||||
{
|
|
||||||
CBotClass* p = this;
|
|
||||||
while (p->m_next != nullptr) p = p->m_next;
|
|
||||||
|
|
||||||
p->m_next = pClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
std::string CBotClass::GetName()
|
std::string CBotClass::GetName()
|
||||||
{
|
{
|
||||||
|
|
|
@ -97,7 +97,7 @@ class CBotCStack;
|
||||||
* float y = var->GetValFloat();
|
* float y = var->GetValFloat();
|
||||||
* \endcode
|
* \endcode
|
||||||
*/
|
*/
|
||||||
class CBotClass
|
class CBotClass : public CBotLinkedList<CBotClass>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Mark if is set or not
|
//! Mark if is set or not
|
||||||
|
@ -170,12 +170,6 @@ public:
|
||||||
*/
|
*/
|
||||||
bool AddItem(CBotVar* pVar);
|
bool AddItem(CBotVar* pVar);
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief AddNext
|
|
||||||
* \param pClass
|
|
||||||
*/
|
|
||||||
void AddNext(CBotClass* pClass);
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief GetName Gives the name of the class.
|
* \brief GetName Gives the name of the class.
|
||||||
* \return
|
* \return
|
||||||
|
@ -380,8 +374,6 @@ private:
|
||||||
CBotVar* m_pVar;
|
CBotVar* m_pVar;
|
||||||
//! Intrinsic class.
|
//! Intrinsic class.
|
||||||
bool m_bIntrinsic;
|
bool m_bIntrinsic;
|
||||||
//! The string class.
|
|
||||||
CBotClass* m_next;
|
|
||||||
//! List of methods defined in external.
|
//! List of methods defined in external.
|
||||||
CBotCallMethode* m_pCalls;
|
CBotCallMethode* m_pCalls;
|
||||||
//! Compiled list of methods.
|
//! Compiled list of methods.
|
||||||
|
|
|
@ -33,14 +33,12 @@
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotDefParam::CBotDefParam()
|
CBotDefParam::CBotDefParam()
|
||||||
{
|
{
|
||||||
m_next = nullptr;
|
|
||||||
m_nIdent = 0;
|
m_nIdent = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotDefParam::~CBotDefParam()
|
CBotDefParam::~CBotDefParam()
|
||||||
{
|
{
|
||||||
delete m_next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -103,15 +101,6 @@ CBotDefParam* CBotDefParam::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
void CBotDefParam::AddNext(CBotDefParam* p)
|
|
||||||
{
|
|
||||||
CBotDefParam* pp = this;
|
|
||||||
while (pp->m_next != nullptr) pp = pp->m_next;
|
|
||||||
|
|
||||||
pp->m_next = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotDefParam::Execute(CBotVar** ppVars, CBotStack* &pj)
|
bool CBotDefParam::Execute(CBotVar** ppVars, CBotStack* &pj)
|
||||||
{
|
{
|
||||||
|
@ -189,12 +178,6 @@ CBotTypResult CBotDefParam::GetTypResult()
|
||||||
return m_type;
|
return m_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotDefParam* CBotDefParam::GetNext()
|
|
||||||
{
|
|
||||||
return m_next;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
std::string CBotDefParam::GetParamString()
|
std::string CBotDefParam::GetParamString()
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,13 +19,9 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// Modules inlcude
|
|
||||||
#include "CBot/CBotToken.h"
|
#include "CBot/CBotToken.h"
|
||||||
#include "CBot/CBotStack.h"
|
#include "CBot/CBotStack.h"
|
||||||
|
#include "CBot/CBotUtils.h"
|
||||||
// Local include
|
|
||||||
|
|
||||||
// Global include
|
|
||||||
|
|
||||||
class CBotCStack;
|
class CBotCStack;
|
||||||
class CBotStack;
|
class CBotStack;
|
||||||
|
@ -34,7 +30,7 @@ class CBotVar;
|
||||||
/*!
|
/*!
|
||||||
* \brief The CBotDefParam class A list of parameters.
|
* \brief The CBotDefParam class A list of parameters.
|
||||||
*/
|
*/
|
||||||
class CBotDefParam
|
class CBotDefParam : public CBotLinkedList<CBotDefParam>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -71,12 +67,6 @@ public:
|
||||||
*/
|
*/
|
||||||
void RestoreState(CBotStack* &pj, bool bMain);
|
void RestoreState(CBotStack* &pj, bool bMain);
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief AddNext
|
|
||||||
* \param p
|
|
||||||
*/
|
|
||||||
void AddNext(CBotDefParam* p);
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief GetType
|
* \brief GetType
|
||||||
* \return
|
* \return
|
||||||
|
@ -89,12 +79,6 @@ public:
|
||||||
*/
|
*/
|
||||||
CBotTypResult GetTypResult();
|
CBotTypResult GetTypResult();
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief GetNext
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
CBotDefParam* GetNext();
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief GetParamString
|
* \brief GetParamString
|
||||||
* \return
|
* \return
|
||||||
|
@ -108,7 +92,5 @@ private:
|
||||||
std::string m_typename;
|
std::string m_typename;
|
||||||
//! Type of paramteter.
|
//! Type of paramteter.
|
||||||
CBotTypResult m_type;
|
CBotTypResult m_type;
|
||||||
//! Next parameter.
|
|
||||||
CBotDefParam* m_next;
|
|
||||||
long m_nIdent;
|
long m_nIdent;
|
||||||
};
|
};
|
||||||
|
|
|
@ -236,7 +236,7 @@ CBotFunction* CBotFunction::Compile(CBotToken* &p, CBotCStack* pStack, CBotFunct
|
||||||
// and compiles the following instruction block
|
// and compiles the following instruction block
|
||||||
func->m_openblk = *p;
|
func->m_openblk = *p;
|
||||||
func->m_Block = CBotBlock::Compile(p, pStk, false);
|
func->m_Block = CBotBlock::Compile(p, pStk, false);
|
||||||
func->m_closeblk = p->GetPrev() != nullptr ? *(p->GetPrev()) : CBotToken();
|
func->m_closeblk = (p != nullptr && p->GetPrev() != nullptr) ? *(p->GetPrev()) : CBotToken();
|
||||||
if ( pStk->IsOk() )
|
if ( pStk->IsOk() )
|
||||||
{
|
{
|
||||||
if ( func->m_bPublic ) // public function, return known for all
|
if ( func->m_bPublic ) // public function, return known for all
|
||||||
|
|
|
@ -136,6 +136,16 @@ CBotToken::CBotToken()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
CBotToken::CBotToken(const std::string& text, const std::string& sep, int start, int end)
|
||||||
|
{
|
||||||
|
m_text = text;
|
||||||
|
m_sep = sep;
|
||||||
|
|
||||||
|
m_start = start;
|
||||||
|
m_end = end;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotToken::CBotToken(const CBotToken& pSrc)
|
CBotToken::CBotToken(const CBotToken& pSrc)
|
||||||
{
|
{
|
||||||
|
@ -149,32 +159,9 @@ CBotToken::CBotToken(const CBotToken& pSrc)
|
||||||
m_end = pSrc.m_end;
|
m_end = pSrc.m_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotToken::CBotToken(const std::string& text, const std::string& sep, int start, int end)
|
|
||||||
{
|
|
||||||
m_text = text; // word (mot) found as token
|
|
||||||
m_sep = sep; // separator
|
|
||||||
m_next = nullptr;
|
|
||||||
m_prev = nullptr;
|
|
||||||
m_start = start;
|
|
||||||
m_end = end;
|
|
||||||
|
|
||||||
m_type = TokenTypVar; // at the beginning a default variable type
|
|
||||||
m_keywordId = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotToken::~CBotToken()
|
CBotToken::~CBotToken()
|
||||||
{
|
{
|
||||||
assert(m_prev == nullptr);
|
|
||||||
|
|
||||||
if (m_next != nullptr)
|
|
||||||
{
|
|
||||||
m_next->m_prev = nullptr;
|
|
||||||
|
|
||||||
delete m_next; // recursive
|
|
||||||
m_next = nullptr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -219,20 +206,6 @@ long CBotToken::GetKeywordId()
|
||||||
return m_keywordId;
|
return m_keywordId;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotToken* CBotToken::GetNext()
|
|
||||||
{
|
|
||||||
if (this == nullptr) return nullptr;
|
|
||||||
return m_next;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotToken* CBotToken::GetPrev()
|
|
||||||
{
|
|
||||||
if (this == nullptr) return nullptr;
|
|
||||||
return m_prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
std::string CBotToken::GetString()
|
std::string CBotToken::GetString()
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,13 +19,14 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "CBot/CBotEnums.h"
|
||||||
|
#include "CBot/CBotUtils.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include "CBot/CBotEnums.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Class representing one token of a program.
|
* \brief Class representing one token of a program.
|
||||||
*
|
*
|
||||||
|
@ -73,7 +74,7 @@
|
||||||
* \endcode
|
* \endcode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class CBotToken
|
class CBotToken : public CBotDoublyLinkedList<CBotToken>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -134,18 +135,6 @@ public:
|
||||||
*/
|
*/
|
||||||
int GetEnd();
|
int GetEnd();
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Return the next token in the linked list
|
|
||||||
* \return The next CBotToken in the list, of nullptr if this is the last one
|
|
||||||
*/
|
|
||||||
CBotToken* GetNext();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Return the previous token in the linked list
|
|
||||||
* \return The previous CBotToken in the list, of nullptr if this is the first one
|
|
||||||
*/
|
|
||||||
CBotToken* GetPrev();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief SetPos Set the token position in the CBot program
|
* \brief SetPos Set the token position in the CBot program
|
||||||
* \param start The start position of the token
|
* \param start The start position of the token
|
||||||
|
@ -198,11 +187,6 @@ private:
|
||||||
static CBotToken* NextToken(const char*& program, bool first);
|
static CBotToken* NextToken(const char*& program, bool first);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
//! The next token in the linked list
|
|
||||||
CBotToken* m_next = nullptr;
|
|
||||||
//! The previous token in the linked list
|
|
||||||
CBotToken* m_prev = nullptr;
|
|
||||||
//! The token type
|
//! The token type
|
||||||
TokenType m_type = TokenTypVar;
|
TokenType m_type = TokenTypVar;
|
||||||
//! The id of the keyword
|
//! The id of the keyword
|
||||||
|
|
|
@ -19,14 +19,11 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// Modules inlcude
|
|
||||||
#include "CBot/CBotTypResult.h"
|
#include "CBot/CBotTypResult.h"
|
||||||
|
|
||||||
// Local include
|
|
||||||
|
|
||||||
// Global include
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
// Forward declaration
|
// Forward declaration
|
||||||
class CBotVar;
|
class CBotVar;
|
||||||
|
@ -97,3 +94,92 @@ long GetNumInt(const std::string& p);
|
||||||
*/
|
*/
|
||||||
float GetNumFloat(const std::string& str);
|
float GetNumFloat(const std::string& str);
|
||||||
|
|
||||||
|
template<typename T> class CBotLinkedList {
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* \brief Destructor. Be careful, destroys the whole linked list!
|
||||||
|
*/
|
||||||
|
virtual ~CBotLinkedList()
|
||||||
|
{
|
||||||
|
if (m_next != nullptr)
|
||||||
|
{
|
||||||
|
delete m_next;
|
||||||
|
m_next = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Returns the next variable in the linked list
|
||||||
|
* \return Next element in the list, or nullptr if this was the last element
|
||||||
|
*/
|
||||||
|
T* GetNext()
|
||||||
|
{
|
||||||
|
return m_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Appends a new element at the end of the linked list
|
||||||
|
* \param elem Element to add
|
||||||
|
*/
|
||||||
|
void AddNext(T* elem)
|
||||||
|
{
|
||||||
|
CBotLinkedList<T>* p = this;
|
||||||
|
while (p->m_next != nullptr) p = p->m_next;
|
||||||
|
p->m_next = elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
T* m_next = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename T> class CBotDoublyLinkedList {
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* \brief Destructor. Be careful, destroys the whole linked list!
|
||||||
|
*/
|
||||||
|
virtual ~CBotDoublyLinkedList()
|
||||||
|
{
|
||||||
|
assert(m_prev == nullptr);
|
||||||
|
|
||||||
|
if (m_next != nullptr)
|
||||||
|
{
|
||||||
|
m_next->m_prev = nullptr;
|
||||||
|
delete m_next;
|
||||||
|
m_next = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Returns the next variable in the linked list
|
||||||
|
* \return Next element in the list, or nullptr if this was the last element
|
||||||
|
*/
|
||||||
|
T* GetNext()
|
||||||
|
{
|
||||||
|
return m_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Returns the previous variable in the linked list
|
||||||
|
* \return Previous element in the list, or nullptr if this was the last element
|
||||||
|
*/
|
||||||
|
T* GetPrev()
|
||||||
|
{
|
||||||
|
return m_prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Appends a new element at the end of the linked list
|
||||||
|
* \param elem Element to add
|
||||||
|
*/
|
||||||
|
void AddNext(T* elem)
|
||||||
|
{
|
||||||
|
CBotDoublyLinkedList<T>* p = this;
|
||||||
|
while (p->m_next != nullptr) p = p->m_next;
|
||||||
|
p->m_next = elem;
|
||||||
|
elem->m_prev = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
T* m_next = nullptr;
|
||||||
|
T* m_prev = nullptr;
|
||||||
|
};
|
|
@ -50,7 +50,6 @@ long CBotVar::m_identcpt = 0;
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotVar::CBotVar( )
|
CBotVar::CBotVar( )
|
||||||
{
|
{
|
||||||
m_next = nullptr;
|
|
||||||
m_pMyThis = nullptr;
|
m_pMyThis = nullptr;
|
||||||
m_pUserPtr = nullptr;
|
m_pUserPtr = nullptr;
|
||||||
m_InitExpr = nullptr;
|
m_InitExpr = nullptr;
|
||||||
|
@ -66,7 +65,6 @@ CBotVar::CBotVar( )
|
||||||
CBotVar::~CBotVar( )
|
CBotVar::~CBotVar( )
|
||||||
{
|
{
|
||||||
delete m_token;
|
delete m_token;
|
||||||
delete m_next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -452,21 +450,6 @@ CBotVar* CBotVar::GetStaticVar()
|
||||||
return pClass->GetItem( m_token->GetString() );
|
return pClass->GetItem( m_token->GetString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotVar* CBotVar::GetNext()
|
|
||||||
{
|
|
||||||
return m_next;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
void CBotVar::AddNext(CBotVar* pVar)
|
|
||||||
{
|
|
||||||
CBotVar* p = this;
|
|
||||||
while (p->m_next != nullptr) p = p->m_next;
|
|
||||||
|
|
||||||
p->m_next = pVar;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotVar::SetVal(CBotVar* var)
|
void CBotVar::SetVal(CBotVar* var)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "CBot/CBotDefines.h"
|
#include "CBot/CBotDefines.h"
|
||||||
#include "CBot/CBotTypResult.h"
|
#include "CBot/CBotTypResult.h"
|
||||||
#include "CBot/CBotEnums.h"
|
#include "CBot/CBotEnums.h"
|
||||||
|
#include "CBot/CBotUtils.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -35,7 +36,7 @@ class CBotToken;
|
||||||
*
|
*
|
||||||
* \nosubgrouping
|
* \nosubgrouping
|
||||||
*/
|
*/
|
||||||
class CBotVar
|
class CBotVar : public CBotLinkedList<CBotVar>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! \name Creation / destruction
|
//! \name Creation / destruction
|
||||||
|
@ -410,24 +411,6 @@ public:
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//! \name Linked list
|
|
||||||
//@{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Returns the next variable if this CBotVar is used as a linked list
|
|
||||||
* \return Next element in the list, or nullptr if this was the last element
|
|
||||||
*/
|
|
||||||
CBotVar* GetNext();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Appends a new element at the end of the linked list
|
|
||||||
* \param pVar Element to add
|
|
||||||
*/
|
|
||||||
void AddNext(CBotVar* pVar);
|
|
||||||
|
|
||||||
//@}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/**
|
/**
|
||||||
* \name Value management
|
* \name Value management
|
||||||
|
@ -637,13 +620,10 @@ public:
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! The corresponding token, defines the variable name
|
//! The corresponding token, defines the variable name
|
||||||
CBotToken* m_token;
|
CBotToken* m_token;
|
||||||
//! Type of value.
|
//! Type of value.
|
||||||
CBotTypResult m_type;
|
CBotTypResult m_type;
|
||||||
//! Next variable in a linked list
|
|
||||||
CBotVar* m_next;
|
|
||||||
//! Initialization status
|
//! Initialization status
|
||||||
InitType m_binit;
|
InitType m_binit;
|
||||||
//! Corresponding this element (TODO: ?)
|
//! Corresponding this element (TODO: ?)
|
||||||
|
|
Loading…
Reference in New Issue