This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch debian/master in repository colobot.
commit 3008e18fc680af81f9f02928b2a84f25d0894c81 Author: krzys-h <krzy...@interia.pl> Date: Wed Dec 23 23:33:40 2015 +0100 Extracted most of linked list logic into a template class --- src/CBot/CBotCall.cpp | 9 ---- src/CBot/CBotCall.h | 15 +----- src/CBot/CBotCallMethode.cpp | 18 ------- src/CBot/CBotCallMethode.h | 20 +------- src/CBot/CBotClass.cpp | 12 ----- src/CBot/CBotClass.h | 10 +--- src/CBot/CBotDefParam.cpp | 17 ------- src/CBot/CBotDefParam.h | 22 +-------- src/CBot/CBotInstr/CBotFunction.cpp | 2 +- src/CBot/CBotToken.cpp | 47 ++++--------------- src/CBot/CBotToken.h | 24 ++-------- src/CBot/CBotUtils.h | 94 +++++++++++++++++++++++++++++++++++-- src/CBot/CBotVar/CBotVar.cpp | 17 ------- src/CBot/CBotVar/CBotVar.h | 24 +--------- 14 files changed, 114 insertions(+), 217 deletions(-) diff --git a/src/CBot/CBotCall.cpp b/src/CBot/CBotCall.cpp index d1e7232..2d1ffe7 100644 --- a/src/CBot/CBotCall.cpp +++ b/src/CBot/CBotCall.cpp @@ -47,15 +47,12 @@ CBotCall::CBotCall(const std::string& name, m_name = name; m_rExec = rExec; m_rComp = rCompile; - m_next = nullptr; m_nFuncIdent = CBotVar::NextUniqNum(); } //////////////////////////////////////////////////////////////////////////////// CBotCall::~CBotCall() { - if (m_next) delete m_next; - m_next = nullptr; } //////////////////////////////////////////////////////////////////////////////// @@ -156,12 +153,6 @@ std::string CBotCall::GetName() } //////////////////////////////////////////////////////////////////////////////// -CBotCall* CBotCall::Next() -{ - return m_next; -} - -//////////////////////////////////////////////////////////////////////////////// int CBotCall::DoCall(long& nIdent, CBotToken* token, CBotVar** ppVar, CBotStack* pStack, CBotTypResult& rettype) { CBotCall* pt = m_ListCalls; diff --git a/src/CBot/CBotCall.h b/src/CBot/CBotCall.h index 3dcb3aa..26789aa 100644 --- a/src/CBot/CBotCall.h +++ b/src/CBot/CBotCall.h @@ -19,14 +19,10 @@ #pragma once -// Modules inlcude +#include "CBot/CBotUtils.h" -// Local include - -// Global include #include <string> -// Forward declaration class CBotStack; class CBotCStack; class CBotVar; @@ -38,7 +34,7 @@ class CBotToken; /*! * \brief The CBotCall class. Class for routine calls (external). */ -class CBotCall +class CBotCall : public CBotLinkedList<CBotCall> { public: @@ -124,12 +120,6 @@ public: std::string GetName(); /*! - * \brief Next - * \return - */ - CBotCall* Next(); - - /*! * \brief SetPUser * \param pUser */ @@ -149,5 +139,4 @@ private: std::string m_name; bool (*m_rExec) (CBotVar* pVar, CBotVar* pResult, int& Exception, void* pUser); CBotTypResult (*m_rComp) (CBotVar* &pVar, void* pUser); - CBotCall* m_next; }; diff --git a/src/CBot/CBotCallMethode.cpp b/src/CBot/CBotCallMethode.cpp index 39b6084..a947dee 100644 --- a/src/CBot/CBotCallMethode.cpp +++ b/src/CBot/CBotCallMethode.cpp @@ -39,15 +39,12 @@ CBotCallMethode::CBotCallMethode(const std::string& name, m_name = name; m_rExec = rExec; m_rComp = rCompile; - m_next = nullptr; m_nFuncIdent = CBotVar::NextUniqNum(); } //////////////////////////////////////////////////////////////////////////////// CBotCallMethode::~CBotCallMethode() { - delete m_next; - m_next = nullptr; } //////////////////////////////////////////////////////////////////////////////// @@ -88,21 +85,6 @@ std::string CBotCallMethode::GetName() } //////////////////////////////////////////////////////////////////////////////// -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, const std::string& name, CBotVar* pThis, diff --git a/src/CBot/CBotCallMethode.h b/src/CBot/CBotCallMethode.h index bdccbb9..6eefd3f 100644 --- a/src/CBot/CBotCallMethode.h +++ b/src/CBot/CBotCallMethode.h @@ -19,12 +19,9 @@ #pragma once -// Modules inlcude #include "CBot/CBotTypResult.h" +#include "CBot/CBotUtils.h" -// Local include - -// Global include class CBotVar; class CBotCStack; class CBotStack; @@ -34,7 +31,7 @@ class CBotToken; * \brief The CBotCallMethode class Class managing the methods declared by * AddFunction on a class. */ -class CBotCallMethode +class CBotCallMethode : public CBotLinkedList<CBotCallMethode> { public: @@ -94,23 +91,10 @@ public: */ std::string GetName(); - /*! - * \brief Next - * \return - */ - CBotCallMethode* Next(); - - /*! - * \brief AddNext - * \param p - */ - void AddNext(CBotCallMethode* p); - private: std::string m_name; bool (*m_rExec) (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception, void* user); CBotTypResult (*m_rComp) (CBotVar* pThis, CBotVar* &pVar); - CBotCallMethode* m_next; friend class CBotClass; long m_nFuncIdent; diff --git a/src/CBot/CBotClass.cpp b/src/CBot/CBotClass.cpp index 07d8f35..7694742 100644 --- a/src/CBot/CBotClass.cpp +++ b/src/CBot/CBotClass.cpp @@ -53,7 +53,6 @@ CBotClass::CBotClass(const std::string& name, m_pParent = pPapa; m_name = name; m_pVar = nullptr; - m_next = nullptr; m_pCalls = nullptr; m_pMethod = nullptr; m_rMaj = nullptr; @@ -91,8 +90,6 @@ CBotClass::~CBotClass() delete m_pVar; delete m_pCalls; delete m_pMethod; - - delete m_next; // releases all of them on this level } //////////////////////////////////////////////////////////////////////////////// @@ -245,15 +242,6 @@ bool CBotClass::AddItem(CBotVar* pVar) } //////////////////////////////////////////////////////////////////////////////// -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() { return m_name; diff --git a/src/CBot/CBotClass.h b/src/CBot/CBotClass.h index c924281..262369a 100644 --- a/src/CBot/CBotClass.h +++ b/src/CBot/CBotClass.h @@ -97,7 +97,7 @@ class CBotCStack; * float y = var->GetValFloat(); * \endcode */ -class CBotClass +class CBotClass : public CBotLinkedList<CBotClass> { public: //! Mark if is set or not @@ -171,12 +171,6 @@ public: bool AddItem(CBotVar* pVar); /*! - * \brief AddNext - * \param pClass - */ - void AddNext(CBotClass* pClass); - - /*! * \brief GetName Gives the name of the class. * \return */ @@ -380,8 +374,6 @@ private: CBotVar* m_pVar; //! Intrinsic class. bool m_bIntrinsic; - //! The string class. - CBotClass* m_next; //! List of methods defined in external. CBotCallMethode* m_pCalls; //! Compiled list of methods. diff --git a/src/CBot/CBotDefParam.cpp b/src/CBot/CBotDefParam.cpp index df0ff96..6718326 100644 --- a/src/CBot/CBotDefParam.cpp +++ b/src/CBot/CBotDefParam.cpp @@ -33,14 +33,12 @@ //////////////////////////////////////////////////////////////////////////////// CBotDefParam::CBotDefParam() { - m_next = nullptr; m_nIdent = 0; } //////////////////////////////////////////////////////////////////////////////// CBotDefParam::~CBotDefParam() { - delete m_next; } //////////////////////////////////////////////////////////////////////////////// @@ -104,15 +102,6 @@ CBotDefParam* CBotDefParam::Compile(CBotToken* &p, CBotCStack* pStack) } //////////////////////////////////////////////////////////////////////////////// -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) { int i = 0; @@ -190,12 +179,6 @@ CBotTypResult CBotDefParam::GetTypResult() } //////////////////////////////////////////////////////////////////////////////// -CBotDefParam* CBotDefParam::GetNext() -{ - return m_next; -} - -//////////////////////////////////////////////////////////////////////////////// std::string CBotDefParam::GetParamString() { std::string param; diff --git a/src/CBot/CBotDefParam.h b/src/CBot/CBotDefParam.h index 7006964..61ca27c 100644 --- a/src/CBot/CBotDefParam.h +++ b/src/CBot/CBotDefParam.h @@ -19,13 +19,9 @@ #pragma once -// Modules inlcude #include "CBot/CBotToken.h" #include "CBot/CBotStack.h" - -// Local include - -// Global include +#include "CBot/CBotUtils.h" class CBotCStack; class CBotStack; @@ -34,7 +30,7 @@ class CBotVar; /*! * \brief The CBotDefParam class A list of parameters. */ -class CBotDefParam +class CBotDefParam : public CBotLinkedList<CBotDefParam> { public: @@ -72,12 +68,6 @@ public: void RestoreState(CBotStack* &pj, bool bMain); /*! - * \brief AddNext - * \param p - */ - void AddNext(CBotDefParam* p); - - /*! * \brief GetType * \return */ @@ -90,12 +80,6 @@ public: CBotTypResult GetTypResult(); /*! - * \brief GetNext - * \return - */ - CBotDefParam* GetNext(); - - /*! * \brief GetParamString * \return */ @@ -108,7 +92,5 @@ private: std::string m_typename; //! Type of paramteter. CBotTypResult m_type; - //! Next parameter. - CBotDefParam* m_next; long m_nIdent; }; diff --git a/src/CBot/CBotInstr/CBotFunction.cpp b/src/CBot/CBotInstr/CBotFunction.cpp index fb74930..5df2212 100644 --- a/src/CBot/CBotInstr/CBotFunction.cpp +++ b/src/CBot/CBotInstr/CBotFunction.cpp @@ -236,7 +236,7 @@ CBotFunction* CBotFunction::Compile(CBotToken* &p, CBotCStack* pStack, CBotFunct // and compiles the following instruction block func->m_openblk = *p; 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 ( func->m_bPublic ) // public function, return known for all diff --git a/src/CBot/CBotToken.cpp b/src/CBot/CBotToken.cpp index 4e1c31d..cec1bed 100644 --- a/src/CBot/CBotToken.cpp +++ b/src/CBot/CBotToken.cpp @@ -137,6 +137,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) { m_type = pSrc.m_type; @@ -150,31 +160,8 @@ CBotToken::CBotToken(const CBotToken& pSrc) } //////////////////////////////////////////////////////////////////////////////// -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() { - assert(m_prev == nullptr); - - if (m_next != nullptr) - { - m_next->m_prev = nullptr; - - delete m_next; // recursive - m_next = nullptr; - } } //////////////////////////////////////////////////////////////////////////////// @@ -220,20 +207,6 @@ long CBotToken::GetKeywordId() } //////////////////////////////////////////////////////////////////////////////// -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() { return m_text; diff --git a/src/CBot/CBotToken.h b/src/CBot/CBotToken.h index a2b836f..cb3c6a9 100644 --- a/src/CBot/CBotToken.h +++ b/src/CBot/CBotToken.h @@ -19,13 +19,14 @@ #pragma once +#include "CBot/CBotEnums.h" +#include "CBot/CBotUtils.h" + #include <vector> #include <string> #include <map> #include <memory> -#include "CBot/CBotEnums.h" - /** * \brief Class representing one token of a program. * @@ -73,7 +74,7 @@ * \endcode */ -class CBotToken +class CBotToken : public CBotDoublyLinkedList<CBotToken> { public: /** @@ -135,18 +136,6 @@ public: 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 * \param start The start position of the token * \param end The end position of the token @@ -198,11 +187,6 @@ private: static CBotToken* NextToken(const char*& program, bool first); 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 TokenType m_type = TokenTypVar; //! The id of the keyword diff --git a/src/CBot/CBotUtils.h b/src/CBot/CBotUtils.h index 74914ca..259b034 100644 --- a/src/CBot/CBotUtils.h +++ b/src/CBot/CBotUtils.h @@ -19,14 +19,11 @@ #pragma once -// Modules inlcude #include "CBot/CBotTypResult.h" -// Local include - -// Global include #include <cstdio> #include <string> +#include <cassert> // Forward declaration class CBotVar; @@ -97,3 +94,92 @@ long GetNumInt(const std::string& p); */ 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; +}; \ No newline at end of file diff --git a/src/CBot/CBotVar/CBotVar.cpp b/src/CBot/CBotVar/CBotVar.cpp index 847509f..8499f11 100644 --- a/src/CBot/CBotVar/CBotVar.cpp +++ b/src/CBot/CBotVar/CBotVar.cpp @@ -50,7 +50,6 @@ long CBotVar::m_identcpt = 0; //////////////////////////////////////////////////////////////////////////////// CBotVar::CBotVar( ) { - m_next = nullptr; m_pMyThis = nullptr; m_pUserPtr = nullptr; m_InitExpr = nullptr; @@ -66,7 +65,6 @@ CBotVar::CBotVar( ) CBotVar::~CBotVar( ) { delete m_token; - delete m_next; } //////////////////////////////////////////////////////////////////////////////// @@ -453,21 +451,6 @@ CBotVar* CBotVar::GetStaticVar() } //////////////////////////////////////////////////////////////////////////////// -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) { switch (var->GetType()) diff --git a/src/CBot/CBotVar/CBotVar.h b/src/CBot/CBotVar/CBotVar.h index c2616ff..22cc222 100644 --- a/src/CBot/CBotVar/CBotVar.h +++ b/src/CBot/CBotVar/CBotVar.h @@ -22,6 +22,7 @@ #include "CBot/CBotDefines.h" #include "CBot/CBotTypResult.h" #include "CBot/CBotEnums.h" +#include "CBot/CBotUtils.h" #include <string> @@ -35,7 +36,7 @@ class CBotToken; * * \nosubgrouping */ -class CBotVar +class CBotVar : public CBotLinkedList<CBotVar> { public: //! \name Creation / destruction @@ -411,24 +412,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 * @@ -637,13 +620,10 @@ public: //@} protected: - //! The corresponding token, defines the variable name CBotToken* m_token; //! Type of value. CBotTypResult m_type; - //! Next variable in a linked list - CBotVar* m_next; //! Initialization status InitType m_binit; //! Corresponding this element (TODO: ?) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits