This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch debian/master in repository colobot.
commit c624d65649c24cf79958c92f7ee27cfc5bab588f Author: Grunaka <d...@romainbreton.fr> Date: Sun Nov 15 19:25:35 2015 +0100 Moving CBotVarClass class in its own header and source files. --- src/CBot/CBot.h | 59 ----------- src/CBot/CBotDefParam.cpp | 2 + src/CBot/CBotInstr/CBotClassInst.cpp | 1 + src/CBot/CBotInstr/CBotFieldExpr.cpp | 2 + src/CBot/CBotStack.cpp | 1 + src/CBot/CBotVar.cpp | 92 +---------------- src/CBot/CBotVar/CBotVarArray.cpp | 1 + src/CBot/CBotVar/CBotVarClass.cpp | 110 ++++++++++++++++++++ src/CBot/CBotVar/CBotVarClass.h | 194 +++++++++++++++++++++++++++++++++++ src/CBot/CBotVar/CBotVarPointer.cpp | 2 +- src/CBot/CMakeLists.txt | 1 + 11 files changed, 314 insertions(+), 151 deletions(-) diff --git a/src/CBot/CBot.h b/src/CBot/CBot.h index a2d083a..8c5f411 100644 --- a/src/CBot/CBot.h +++ b/src/CBot/CBot.h @@ -373,65 +373,6 @@ public: }; -// class management class instances -class CBotVarClass : public CBotVar -{ -private: - static - CBotVarClass* m_ExClass; // list of existing instances at some point - CBotVarClass* m_ExNext; // for this general list - CBotVarClass* m_ExPrev; // for this general list - -private: - CBotClass* m_pClass; // the class definition - CBotVarClass* m_pParent; // the instance of a parent class - CBotVar* m_pVar; // contents - friend class CBotVar; // my daddy is a buddy WHAT? :D(\TODO mon papa est un copain ) - friend class CBotVarPointer; // and also the pointer - int m_CptUse; // counter usage - long m_ItemIdent; // identifier (unique) of an instance - bool m_bConstructor; // set if a constructor has been called - -public: - CBotVarClass( const CBotToken* name, const CBotTypResult& type ); -// CBotVarClass( const CBotToken* name, CBotTypResult& type, int &nIdent ); - ~CBotVarClass(); -// void InitCBotVarClass( const CBotToken* name, CBotTypResult& type, int &nIdent ); - - void Copy(CBotVar* pSrc, bool bName=true) override; - void SetClass(CBotClass* pClass) override; //, int &nIdent); - CBotClass* GetClass() override; - CBotVar* GetItem(const char* name) override; // return an element of a class according to its name (*) - CBotVar* GetItemRef(int nIdent) override; - - CBotVar* GetItem(int n, bool bExtend) override; - CBotVar* GetItemList() override; - - CBotString GetValString() override; - - bool Save1State(FILE* pf) override; - void Maj(void* pUser, bool bContinue) override; - - void IncrementUse(); // a reference to incrementation - void DecrementUse(); // a reference to decrementation - - CBotVarClass* - GetPointer() override; - void SetItemList(CBotVar* pVar); - - void SetIdent(long n) override; - - static CBotVarClass* Find(long id); - - -// CBotVar* GetMyThis(); - - bool Eq(CBotVar* left, CBotVar* right) override; - bool Ne(CBotVar* left, CBotVar* right) override; - - void ConstructorSet() override; -}; - extern CBotInstr* CompileParams(CBotToken* &p, CBotCStack* pStack, CBotVar** ppVars); extern bool TypeCompatible( CBotTypResult& type1, CBotTypResult& type2, int op = 0 ); diff --git a/src/CBot/CBotDefParam.cpp b/src/CBot/CBotDefParam.cpp index 3a91f60..601e567 100644 --- a/src/CBot/CBotDefParam.cpp +++ b/src/CBot/CBotDefParam.cpp @@ -24,6 +24,8 @@ #include "CBotUtils.h" +#include "CBotVar/CBotVarClass.h" + // Local include // Global include diff --git a/src/CBot/CBotInstr/CBotClassInst.cpp b/src/CBot/CBotInstr/CBotClassInst.cpp index d473188..8426422 100644 --- a/src/CBot/CBotInstr/CBotClassInst.cpp +++ b/src/CBot/CBotInstr/CBotClassInst.cpp @@ -27,6 +27,7 @@ #include "CBotClass.h" #include "CBotVar/CBotVarPointer.h" +#include "CBotVar/CBotVarClass.h" // Local include diff --git a/src/CBot/CBotInstr/CBotFieldExpr.cpp b/src/CBot/CBotInstr/CBotFieldExpr.cpp index 592d4a7..bad06d9 100644 --- a/src/CBot/CBotInstr/CBotFieldExpr.cpp +++ b/src/CBot/CBotInstr/CBotFieldExpr.cpp @@ -23,6 +23,8 @@ #include "CBotStack.h" #include "CBotClass.h" +#include "CBotVar/CBotVarClass.h" + // Local include // Global include diff --git a/src/CBot/CBotStack.cpp b/src/CBot/CBotStack.cpp index 5678c8f..1a21dd2 100644 --- a/src/CBot/CBotStack.cpp +++ b/src/CBot/CBotStack.cpp @@ -24,6 +24,7 @@ #include "CBotInstr/CBotFunction.h" #include "CBotVar/CBotVarPointer.h" +#include "CBotVar/CBotVarClass.h" // Local include diff --git a/src/CBot/CBotVar.cpp b/src/CBot/CBotVar.cpp index ad73639..dc2517d 100644 --- a/src/CBot/CBotVar.cpp +++ b/src/CBot/CBotVar.cpp @@ -29,6 +29,7 @@ #include "CBotVar/CBotVarArray.h" #include "CBotVar/CBotVarPointer.h" +#include "CBotVar/CBotVarClass.h" #include "CBotDefines.h" #include "CBotClass.h" @@ -117,97 +118,6 @@ CBotVarBoolean::CBotVarBoolean( const CBotToken* name ) m_val = 0; } -CBotVarClass* CBotVarClass::m_ExClass = nullptr; - -CBotVarClass::CBotVarClass( const CBotToken* name, const CBotTypResult& type) -{ -/* -// int nIdent = 0; - InitCBotVarClass( name, type ) //, nIdent ); -} - -CBotVarClass::CBotVarClass( const CBotToken* name, CBotTypResult& type) //, int &nIdent ) -{ - InitCBotVarClass( name, type ); //, nIdent ); -} - -void CBotVarClass::InitCBotVarClass( const CBotToken* name, CBotTypResult& type ) //, int &nIdent ) -{*/ - if ( !type.Eq(CBotTypClass) && - !type.Eq(CBotTypIntrinsic) && // by convenience there accepts these types - !type.Eq(CBotTypPointer) && - !type.Eq(CBotTypArrayPointer) && - !type.Eq(CBotTypArrayBody)) assert(0); - - m_token = new CBotToken(name); - m_next = nullptr; - m_pMyThis = nullptr; - m_pUserPtr = OBJECTCREATED;//nullptr; - m_InitExpr = nullptr; - m_LimExpr = nullptr; - m_pVar = nullptr; - m_type = type; - if ( type.Eq(CBotTypArrayPointer) ) m_type.SetType( CBotTypArrayBody ); - else if ( !type.Eq(CBotTypArrayBody) ) m_type.SetType( CBotTypClass ); - // officel type for this object - - m_pClass = nullptr; - m_pParent = nullptr; - m_binit = InitType::UNDEF; - m_bStatic = false; - m_mPrivate = 0; - m_bConstructor = false; - m_CptUse = 0; - m_ItemIdent = type.Eq(CBotTypIntrinsic) ? 0 : CBotVar::NextUniqNum(); - - // se place tout seul dans la liste - // TODO stands alone in the list (stands only in a list) - if (m_ExClass) m_ExClass->m_ExPrev = this; - m_ExNext = m_ExClass; - m_ExPrev = nullptr; - m_ExClass = this; - - CBotClass* pClass = type.GetClass(); - CBotClass* pClass2 = pClass->GetParent(); - if ( pClass2 != nullptr ) - { - // also creates an instance of the parent class - m_pParent = new CBotVarClass(name, CBotTypResult(type.GetType(),pClass2) ); //, nIdent); - } - - SetClass( pClass ); //, nIdent ); - -} - -CBotVarClass::~CBotVarClass( ) -{ - if ( m_CptUse != 0 ) - assert(0); - - if ( m_pParent ) delete m_pParent; - m_pParent = nullptr; - - // frees the indirect object if necessary -// if ( m_Indirect != nullptr ) -// m_Indirect->DecrementUse(); - - // removes the class list - if ( m_ExPrev ) m_ExPrev->m_ExNext = m_ExNext; - else m_ExClass = m_ExNext; - - if ( m_ExNext ) m_ExNext->m_ExPrev = m_ExPrev; - m_ExPrev = nullptr; - m_ExNext = nullptr; - - delete m_pVar; -} - -void CBotVarClass::ConstructorSet() -{ - m_bConstructor = true; -} - - CBotVar::~CBotVar( ) { delete m_token; diff --git a/src/CBot/CBotVar/CBotVarArray.cpp b/src/CBot/CBotVar/CBotVarArray.cpp index 35f55a5..b030e7a 100644 --- a/src/CBot/CBotVar/CBotVarArray.cpp +++ b/src/CBot/CBotVar/CBotVarArray.cpp @@ -19,6 +19,7 @@ // Modules inlcude #include "CBotVarArray.h" +#include "CBotVarClass.h" // Local include diff --git a/src/CBot/CBotVar/CBotVarClass.cpp b/src/CBot/CBotVar/CBotVarClass.cpp new file mode 100644 index 0000000..73d14ac --- /dev/null +++ b/src/CBot/CBotVar/CBotVarClass.cpp @@ -0,0 +1,110 @@ +/* + * This file is part of the Colobot: Gold Edition source code + * Copyright (C) 2001-2015, Daniel Roux, EPSITEC SA & TerranovaTeam + * http://epsitec.ch; http://colobot.info; http://github.com/colobot + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://gnu.org/licenses + */ + +// Modules inlcude +#include "CBotVarClass.h" + +#include "CBotClass.h" + +// Local include + +// Global include +#include <cassert> + +//////////////////////////////////////////////////////////////////////////////// +CBotVarClass* CBotVarClass::m_ExClass = nullptr; + +//////////////////////////////////////////////////////////////////////////////// +CBotVarClass::CBotVarClass( const CBotToken* name, const CBotTypResult& type) +{ + if ( !type.Eq(CBotTypClass) && + !type.Eq(CBotTypIntrinsic) && // by convenience there accepts these types + !type.Eq(CBotTypPointer) && + !type.Eq(CBotTypArrayPointer) && + !type.Eq(CBotTypArrayBody)) assert(0); + + m_token = new CBotToken(name); + m_next = nullptr; + m_pMyThis = nullptr; + m_pUserPtr = OBJECTCREATED;//nullptr; + m_InitExpr = nullptr; + m_LimExpr = nullptr; + m_pVar = nullptr; + m_type = type; + if ( type.Eq(CBotTypArrayPointer) ) m_type.SetType( CBotTypArrayBody ); + else if ( !type.Eq(CBotTypArrayBody) ) m_type.SetType( CBotTypClass ); + // officel type for this object + + m_pClass = nullptr; + m_pParent = nullptr; + m_binit = InitType::UNDEF; + m_bStatic = false; + m_mPrivate = 0; + m_bConstructor = false; + m_CptUse = 0; + m_ItemIdent = type.Eq(CBotTypIntrinsic) ? 0 : CBotVar::NextUniqNum(); + + // se place tout seul dans la liste + // TODO stands alone in the list (stands only in a list) + if (m_ExClass) m_ExClass->m_ExPrev = this; + m_ExNext = m_ExClass; + m_ExPrev = nullptr; + m_ExClass = this; + + CBotClass* pClass = type.GetClass(); + CBotClass* pClass2 = pClass->GetParent(); + if ( pClass2 != nullptr ) + { + // also creates an instance of the parent class + m_pParent = new CBotVarClass(name, CBotTypResult(type.GetType(),pClass2) ); //, nIdent); + } + + SetClass( pClass ); //, nIdent ); + +} + +//////////////////////////////////////////////////////////////////////////////// +CBotVarClass::~CBotVarClass( ) +{ + if ( m_CptUse != 0 ) + assert(0); + + if ( m_pParent ) delete m_pParent; + m_pParent = nullptr; + + // frees the indirect object if necessary +// if ( m_Indirect != nullptr ) +// m_Indirect->DecrementUse(); + + // removes the class list + if ( m_ExPrev ) m_ExPrev->m_ExNext = m_ExNext; + else m_ExClass = m_ExNext; + + if ( m_ExNext ) m_ExNext->m_ExPrev = m_ExPrev; + m_ExPrev = nullptr; + m_ExNext = nullptr; + + delete m_pVar; +} + +//////////////////////////////////////////////////////////////////////////////// +void CBotVarClass::ConstructorSet() +{ + m_bConstructor = true; +} diff --git a/src/CBot/CBotVar/CBotVarClass.h b/src/CBot/CBotVar/CBotVarClass.h new file mode 100644 index 0000000..b6a256f --- /dev/null +++ b/src/CBot/CBotVar/CBotVarClass.h @@ -0,0 +1,194 @@ +/* + * This file is part of the Colobot: Gold Edition source code + * Copyright (C) 2001-2015, Daniel Roux, EPSITEC SA & TerranovaTeam + * http://epsitec.ch; http://colobot.info; http://github.com/colobot + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://gnu.org/licenses + */ + +#pragma once + +// Modules inlcude +#include "CBot.h" + +// Local include + +// Global include + + +/*! + * \brief The CBotVarClass class Class management class instances. + */ +class CBotVarClass : public CBotVar +{ +public: + + /*! + * \brief CBotVarClass + * \param name + * \param type + */ + CBotVarClass( const CBotToken* name, const CBotTypResult& type ); + + /*! + * \brief ~CBotVarClass + */ + ~CBotVarClass(); + + /*! + * \brief Copy + * \param pSrc + * \param bName + */ + void Copy(CBotVar* pSrc, bool bName=true) override; + + /*! + * \brief SetClass + * \param pClass + */ + void SetClass(CBotClass* pClass) override; + + /*! + * \brief GetClass + * \return + */ + CBotClass* GetClass() override; + + /*! + * \brief GetItem Return an element of a class according to its name (*). + * \param name + * \return + */ + CBotVar* GetItem(const char* name) override; + + /*! + * \brief GetItemRef + * \param nIdent + * \return + */ + CBotVar* GetItemRef(int nIdent) override; + + /*! + * \brief GetItem + * \param n + * \param bExtend + * \return + */ + CBotVar* GetItem(int n, bool bExtend) override; + + /*! + * \brief GetItemList + * \return + */ + CBotVar* GetItemList() override; + + /*! + * \brief GetValString + * \return + */ + CBotString GetValString() override; + + /*! + * \brief Save1State + * \param pf + * \return + */ + bool Save1State(FILE* pf) override; + + /*! + * \brief Maj + * \param pUser + * \param bContinue + */ + void Maj(void* pUser, bool bContinue) override; + + /*! + * \brief IncrementUse A reference to incrementation. + */ + void IncrementUse(); + + /*! + * \brief DecrementUse A reference to decrementation. + */ + void DecrementUse(); + + /*! + * \brief GetPointer + * \return + */ + CBotVarClass* GetPointer() override; + + /*! + * \brief SetItemList + * \param pVar + */ + void SetItemList(CBotVar* pVar); + + /*! + * \brief SetIdent + * \param n + */ + void SetIdent(long n) override; + + /*! + * \brief Find + * \param id + * \return + */ + static CBotVarClass* Find(long id); + + /*! + * \brief Eq + * \param left + * \param right + * \return + */ + bool Eq(CBotVar* left, CBotVar* right) override; + + /*! + * \brief Ne + * \param left + * \param right + * \return + */ + bool Ne(CBotVar* left, CBotVar* right) override; + + /*! + * \brief ConstructorSet + */ + void ConstructorSet() override; + +private: + //! List of existing instances at some point. + static CBotVarClass* m_ExClass; + //! For this general list. + CBotVarClass* m_ExNext; + //! For this general list. + CBotVarClass* m_ExPrev; + //! The class definition. + CBotClass* m_pClass; + //! The instance of a parent class. + CBotVarClass* m_pParent; + //! Contents. + CBotVar* m_pVar; + //! Counter usage. + int m_CptUse; + //! Identifier (unique) of an instance. + long m_ItemIdent; + //! Set if a constructor has been called. + bool m_bConstructor; + + friend class CBotVar; + friend class CBotVarPointer; +}; diff --git a/src/CBot/CBotVar/CBotVarPointer.cpp b/src/CBot/CBotVar/CBotVarPointer.cpp index c669a2a..df33322 100644 --- a/src/CBot/CBotVar/CBotVarPointer.cpp +++ b/src/CBot/CBotVar/CBotVarPointer.cpp @@ -22,7 +22,7 @@ #include "CBotToken.h" #include "CBot.h" #include "CBotClass.h" - +#include "CBotVarClass.h" // Local include // Global include diff --git a/src/CBot/CMakeLists.txt b/src/CBot/CMakeLists.txt index a8ce7ac..098868e 100644 --- a/src/CBot/CMakeLists.txt +++ b/src/CBot/CMakeLists.txt @@ -57,6 +57,7 @@ set(SOURCES CBotInstr/CBotFunction.cpp CBotVar/CBotVarArray.cpp CBotVar/CBotVarPointer.cpp + CBotVar/CBotVarClass.cpp ) # Includes -- 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