This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch debian/master in repository colobot.
commit 63ab9d730149bcd12e586321382e5437cd3d5c47 Author: Grunaka <d...@romainbreton.fr> Date: Sun Nov 15 17:04:27 2015 +0100 Moving CBotVarArray class in its own header and source files. --- src/CBot/CBot.h | 33 --------- src/CBot/CBotDefines.h | 28 +++++++ src/CBot/CBotInstr/CBotExprVar.cpp | 2 + src/CBot/CBotInstr/CBotIndexExpr.cpp | 2 + src/CBot/CBotInstr/CBotInstArray.cpp | 2 + src/CBot/CBotInstr/CBotLeftExpr.cpp | 2 + src/CBot/CBotVar.cpp | 115 +--------------------------- src/CBot/CBotVar/CBotVarArray.cpp | 140 +++++++++++++++++++++++++++++++++++ src/CBot/CBotVar/CBotVarArray.h | 102 +++++++++++++++++++++++++ src/CBot/CMakeLists.txt | 1 + 10 files changed, 283 insertions(+), 144 deletions(-) diff --git a/src/CBot/CBot.h b/src/CBot/CBot.h index 5e944d1..c5fc9de 100644 --- a/src/CBot/CBot.h +++ b/src/CBot/CBot.h @@ -468,39 +468,6 @@ public: bool Ne(CBotVar* left, CBotVar* right) override; }; - -// classe pour les tableaux - -#define MAXARRAYSIZE 9999 - -class CBotVarArray : public CBotVar -{ -private: - CBotVarClass* - m_pInstance; // instance manager of table - - friend class CBotVar; // my daddy is a buddy - -public: - CBotVarArray( const CBotToken* name, CBotTypResult& type ); - ~CBotVarArray(); - - void SetPointer(CBotVar* p) override; - CBotVarClass* - GetPointer() override; - - void Copy(CBotVar* pSrc, bool bName=true) override; - CBotVar* GetItem(int n, bool bGrow=false) override; // makes an element according to its numeric index - // enlarged the table if necessary if bExtend -// CBotVar* GetItem(const char* name); // makes a element by literal index - CBotVar* GetItemList() override; // gives the first item in the list - - CBotString GetValString() override; // gets the contents of the array into a string - - bool Save1State(FILE* pf) 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/CBotDefines.h b/src/CBot/CBotDefines.h new file mode 100644 index 0000000..2c6e34d --- /dev/null +++ b/src/CBot/CBotDefines.h @@ -0,0 +1,28 @@ +/* + * 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 + +// Local include + +// Global include + +#define MAXARRAYSIZE 9999 diff --git a/src/CBot/CBotInstr/CBotExprVar.cpp b/src/CBot/CBotInstr/CBotExprVar.cpp index 0e531fa..344ce85 100644 --- a/src/CBot/CBotInstr/CBotExprVar.cpp +++ b/src/CBot/CBotInstr/CBotExprVar.cpp @@ -26,6 +26,8 @@ #include "CBotStack.h" +#include "CBotVar/CBotVarArray.h" + // Local include // Global include diff --git a/src/CBot/CBotInstr/CBotIndexExpr.cpp b/src/CBot/CBotInstr/CBotIndexExpr.cpp index f4882c0..2bc37f1 100644 --- a/src/CBot/CBotInstr/CBotIndexExpr.cpp +++ b/src/CBot/CBotInstr/CBotIndexExpr.cpp @@ -22,6 +22,8 @@ #include "CBotStack.h" +#include "CBotVar/CBotVarArray.h" + // Local include // Global include diff --git a/src/CBot/CBotInstr/CBotInstArray.cpp b/src/CBot/CBotInstr/CBotInstArray.cpp index e1327a5..4bf2fd1 100644 --- a/src/CBot/CBotInstr/CBotInstArray.cpp +++ b/src/CBot/CBotInstr/CBotInstArray.cpp @@ -27,6 +27,8 @@ #include "CBotStack.h" +#include "CBotDefines.h" + // Local include // Global include diff --git a/src/CBot/CBotInstr/CBotLeftExpr.cpp b/src/CBot/CBotInstr/CBotLeftExpr.cpp index 84c7b73..0785dd2 100644 --- a/src/CBot/CBotInstr/CBotLeftExpr.cpp +++ b/src/CBot/CBotInstr/CBotLeftExpr.cpp @@ -25,6 +25,8 @@ #include "CBotStack.h" +#include "CBotVar/CBotVarArray.h" + // Local include // Global include diff --git a/src/CBot/CBotVar.cpp b/src/CBot/CBotVar.cpp index 75e26e6..490af3f 100644 --- a/src/CBot/CBotVar.cpp +++ b/src/CBot/CBotVar.cpp @@ -27,6 +27,10 @@ #include "CBotStack.h" +#include "CBotVar/CBotVarArray.h" + +#include "CBotDefines.h" + #include <cassert> #include <cmath> #include <cstdio> @@ -1775,117 +1779,6 @@ bool CBotVarClass::Ne(CBotVar* left, CBotVar* right) } ///////////////////////////////////////////////////////////////////////////// -// management of arrays - -CBotVarArray::CBotVarArray(const CBotToken* name, CBotTypResult& type ) -{ - if ( !type.Eq(CBotTypArrayPointer) && - !type.Eq(CBotTypArrayBody)) assert(0); - - m_token = new CBotToken(name); - m_next = nullptr; - m_pMyThis = nullptr; - m_pUserPtr = nullptr; - - m_type = type; - m_type.SetType(CBotTypArrayPointer); - m_binit = CBotVar::InitType::UNDEF; - - m_pInstance = nullptr; // the list of the array elements -} - -CBotVarArray::~CBotVarArray() -{ - if ( m_pInstance != nullptr ) m_pInstance->DecrementUse(); // the lowest reference -} - -// copy a variable into another -void CBotVarArray::Copy(CBotVar* pSrc, bool bName) -{ - if ( pSrc->GetType() != CBotTypArrayPointer ) - assert(0); - - CBotVarArray* p = static_cast<CBotVarArray*>(pSrc); - - if ( bName) *m_token = *p->m_token; - m_type = p->m_type; - m_pInstance = p->GetPointer(); - - if ( m_pInstance != nullptr ) - m_pInstance->IncrementUse(); // a reference increase - - m_binit = p->m_binit; -//- m_bStatic = p->m_bStatic; - m_pMyThis = nullptr;//p->m_pMyThis; - m_pUserPtr = p->m_pUserPtr; - - // keeps indentificator the same (by default) - if (m_ident == 0 ) m_ident = p->m_ident; -} - -void CBotVarArray::SetPointer(CBotVar* pVarClass) -{ - m_binit = CBotVar::InitType::DEF; // init, even on a null pointer - - if ( m_pInstance == pVarClass) return; // Special, not decrement and reincrement - // because the decrement can destroy the object - - if ( pVarClass != nullptr ) - { - if ( pVarClass->GetType() == CBotTypArrayPointer ) - pVarClass = pVarClass->GetPointer(); // the real pointer to the object - - if ( !pVarClass->m_type.Eq(CBotTypClass) && - !pVarClass->m_type.Eq(CBotTypArrayBody)) - assert(0); - - (static_cast<CBotVarClass*>(pVarClass))->IncrementUse(); // incement the reference - } - - if ( m_pInstance != nullptr ) m_pInstance->DecrementUse(); - m_pInstance = static_cast<CBotVarClass*>(pVarClass); -} - - -CBotVarClass* CBotVarArray::GetPointer() -{ - if ( m_pInstance == nullptr ) return nullptr; - return m_pInstance->GetPointer(); -} - -CBotVar* CBotVarArray::GetItem(int n, bool bExtend) -{ - if ( m_pInstance == nullptr ) - { - if ( !bExtend ) return nullptr; - // creates an instance of the table - - CBotVarClass* instance = new CBotVarClass(nullptr, m_type); - SetPointer( instance ); - } - return m_pInstance->GetItem(n, bExtend); -} - -CBotVar* CBotVarArray::GetItemList() -{ - if ( m_pInstance == nullptr) return nullptr; - return m_pInstance->GetItemList(); -} - -CBotString CBotVarArray::GetValString() -{ - if ( m_pInstance == nullptr ) return ( CBotString( "Null pointer" ) ) ; - return m_pInstance->GetValString(); -} - -bool CBotVarArray::Save1State(FILE* pf) -{ - if ( !WriteType(pf, m_type) ) return false; - return SaveVar(pf, m_pInstance); // saves the instance that manages the table -} - - -///////////////////////////////////////////////////////////////////////////// // gestion des pointeurs à une instance donnée // TODO management of pointers to a given instance diff --git a/src/CBot/CBotVar/CBotVarArray.cpp b/src/CBot/CBotVar/CBotVarArray.cpp new file mode 100644 index 0000000..35f55a5 --- /dev/null +++ b/src/CBot/CBotVar/CBotVarArray.cpp @@ -0,0 +1,140 @@ +/* + * 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 "CBotVarArray.h" + +// Local include + +// Global include +#include <cassert> + +//////////////////////////////////////////////////////////////////////////////// +CBotVarArray::CBotVarArray(const CBotToken* name, CBotTypResult& type ) +{ + if ( !type.Eq(CBotTypArrayPointer) && + !type.Eq(CBotTypArrayBody)) assert(0); + + m_token = new CBotToken(name); + m_next = nullptr; + m_pMyThis = nullptr; + m_pUserPtr = nullptr; + + m_type = type; + m_type.SetType(CBotTypArrayPointer); + m_binit = CBotVar::InitType::UNDEF; + + m_pInstance = nullptr; // the list of the array elements +} + +//////////////////////////////////////////////////////////////////////////////// +CBotVarArray::~CBotVarArray() +{ + if ( m_pInstance != nullptr ) m_pInstance->DecrementUse(); // the lowest reference +} + +//////////////////////////////////////////////////////////////////////////////// +void CBotVarArray::Copy(CBotVar* pSrc, bool bName) +{ + if ( pSrc->GetType() != CBotTypArrayPointer ) + assert(0); + + CBotVarArray* p = static_cast<CBotVarArray*>(pSrc); + + if ( bName) *m_token = *p->m_token; + m_type = p->m_type; + m_pInstance = p->GetPointer(); + + if ( m_pInstance != nullptr ) + m_pInstance->IncrementUse(); // a reference increase + + m_binit = p->m_binit; +//- m_bStatic = p->m_bStatic; + m_pMyThis = nullptr;//p->m_pMyThis; + m_pUserPtr = p->m_pUserPtr; + + // keeps indentificator the same (by default) + if (m_ident == 0 ) m_ident = p->m_ident; +} + +//////////////////////////////////////////////////////////////////////////////// +void CBotVarArray::SetPointer(CBotVar* pVarClass) +{ + m_binit = CBotVar::InitType::DEF; // init, even on a null pointer + + if ( m_pInstance == pVarClass) return; // Special, not decrement and reincrement + // because the decrement can destroy the object + + if ( pVarClass != nullptr ) + { + if ( pVarClass->GetType() == CBotTypArrayPointer ) + pVarClass = pVarClass->GetPointer(); // the real pointer to the object + + if ( !pVarClass->m_type.Eq(CBotTypClass) && + !pVarClass->m_type.Eq(CBotTypArrayBody)) + assert(0); + + (static_cast<CBotVarClass*>(pVarClass))->IncrementUse(); // incement the reference + } + + if ( m_pInstance != nullptr ) m_pInstance->DecrementUse(); + m_pInstance = static_cast<CBotVarClass*>(pVarClass); +} + +//////////////////////////////////////////////////////////////////////////////// +CBotVarClass* CBotVarArray::GetPointer() +{ + if ( m_pInstance == nullptr ) return nullptr; + return m_pInstance->GetPointer(); +} + +//////////////////////////////////////////////////////////////////////////////// +CBotVar* CBotVarArray::GetItem(int n, bool bExtend) +{ + if ( m_pInstance == nullptr ) + { + if ( !bExtend ) return nullptr; + // creates an instance of the table + + CBotVarClass* instance = new CBotVarClass(nullptr, m_type); + SetPointer( instance ); + } + return m_pInstance->GetItem(n, bExtend); +} + +//////////////////////////////////////////////////////////////////////////////// +CBotVar* CBotVarArray::GetItemList() +{ + if ( m_pInstance == nullptr) return nullptr; + return m_pInstance->GetItemList(); +} + +//////////////////////////////////////////////////////////////////////////////// +CBotString CBotVarArray::GetValString() +{ + if ( m_pInstance == nullptr ) return ( CBotString( "Null pointer" ) ) ; + return m_pInstance->GetValString(); +} + +//////////////////////////////////////////////////////////////////////////////// +bool CBotVarArray::Save1State(FILE* pf) +{ + if ( !WriteType(pf, m_type) ) return false; + return SaveVar(pf, m_pInstance); // saves the instance that manages the table +} diff --git a/src/CBot/CBotVar/CBotVarArray.h b/src/CBot/CBotVar/CBotVarArray.h new file mode 100644 index 0000000..158cdf8 --- /dev/null +++ b/src/CBot/CBotVar/CBotVarArray.h @@ -0,0 +1,102 @@ +/* + * 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" +#include "CBotDefines.h" + +// Local include + +// Global include + + +/*! + * \brief The CBotVarArray class Classe pour les tableaux. + */ +class CBotVarArray : public CBotVar +{ +public: + + /*! + * \brief CBotVarArray + * \param name + * \param type + */ + CBotVarArray( const CBotToken* name, CBotTypResult& type ); + + /*! + * \brief ~CBotVarArray + */ + ~CBotVarArray(); + + /*! + * \brief SetPointer + * \param p + */ + void SetPointer(CBotVar* p) override; + + /*! + * \brief GetPointer + * \return + */ + CBotVarClass* GetPointer() override; + + /*! + * \brief Copy Copy a variable into another. + * \param pSrc + * \param bName + */ + void Copy(CBotVar* pSrc, bool bName=true) override; + + /*! + * \brief GetItem Makes an element according to its numeric index enlarged + * the table if necessary if bExtend. + * \param n + * \param bGrow + * \return + */ + CBotVar* GetItem(int n, bool bGrow=false) override; + + /*! + * \brief GetItemList Gives the first item in the list. + * \return + */ + CBotVar* GetItemList() override; + + /*! + * \brief GetValString Gets the contents of the array into a string. + * \return + */ + CBotString GetValString() override; + + /*! + * \brief Save1State + * \param pf + * \return + */ + bool Save1State(FILE* pf) override; + +private: + //! Instance manager of table. + CBotVarClass* m_pInstance; + //! My daddy is a buddy. + friend class CBotVar; +}; diff --git a/src/CBot/CMakeLists.txt b/src/CBot/CMakeLists.txt index bf7deef..5bb6ad7 100644 --- a/src/CBot/CMakeLists.txt +++ b/src/CBot/CMakeLists.txt @@ -53,6 +53,7 @@ set(SOURCES CBotInstr/CBotListArray.cpp CBotInstr/CBotInstArray.cpp CBotInstr/CBotInt.cpp + CBotVar/CBotVarArray.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