CBotVar::ProtectionLevel enum

dev-time-step
krzys-h 2015-12-21 23:07:40 +01:00
parent fa77dd5414
commit 2519825104
17 changed files with 56 additions and 59 deletions

View File

@ -211,7 +211,7 @@ void CBotClass::FreeLock(CBotProgram* p)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool CBotClass::AddItem(std::string name, bool CBotClass::AddItem(std::string name,
CBotTypResult type, CBotTypResult type,
int mPrivate) CBotVar::ProtectionLevel mPrivate)
{ {
CBotClass* pClass = type.GetClass(); CBotClass* pClass = type.GetClass();
@ -589,7 +589,7 @@ CBotClass* CBotClass::Compile1(CBotToken* &p, CBotCStack* pStack)
bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond) bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond)
{ {
bool bStatic = false; bool bStatic = false;
int mProtect = PR_PUBLIC; CBotVar::ProtectionLevel mProtect = CBotVar::ProtectionLevel::Public;
bool bSynchro = false; bool bSynchro = false;
while (IsOfType(p, ID_SEP)) ; while (IsOfType(p, ID_SEP)) ;
@ -600,9 +600,9 @@ bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond)
CBotToken* pBase = p; CBotToken* pBase = p;
if ( IsOfType(p, ID_STATIC) ) bStatic = true; if ( IsOfType(p, ID_STATIC) ) bStatic = true;
if ( IsOfType(p, ID_PUBLIC) ) mProtect = PR_PUBLIC; if ( IsOfType(p, ID_PUBLIC) ) mProtect = CBotVar::ProtectionLevel::Public;
if ( IsOfType(p, ID_PRIVATE) ) mProtect = PR_PRIVATE; if ( IsOfType(p, ID_PRIVATE) ) mProtect = CBotVar::ProtectionLevel::Private;
if ( IsOfType(p, ID_PROTECTED) ) mProtect = PR_PROTECT; if ( IsOfType(p, ID_PROTECTED) ) mProtect = CBotVar::ProtectionLevel::Protected;
if ( IsOfType(p, ID_STATIC) ) bStatic = true; if ( IsOfType(p, ID_STATIC) ) bStatic = true;
// CBotClass* pClass = nullptr; // CBotClass* pClass = nullptr;

View File

@ -21,8 +21,8 @@
// Modules inlcude // Modules inlcude
#include "CBot/CBotDefines.h" #include "CBot/CBotDefines.h"
#include "CBot/CBotTypResult.h" #include "CBot/CBotTypResult.h"
#include "CBot/CBotVar/CBotVar.h"
// Local include // Local include
@ -30,7 +30,6 @@
#include <string> #include <string>
// Forward declaration // Forward declaration
class CBotVar;
class CBotClass; class CBotClass;
class CBotCallMethode; class CBotCallMethode;
class CBotFunction; class CBotFunction;
@ -107,7 +106,8 @@ public:
* \param mPrivate * \param mPrivate
* \return * \return
*/ */
bool AddItem(std::string name, CBotTypResult type, int mPrivate = PR_PUBLIC); bool AddItem(std::string name, CBotTypResult type,
CBotVar::ProtectionLevel mPrivate = CBotVar::ProtectionLevel::Public);
/*! /*!
* \brief AddItem Adds an item by passing the pointer to an instance of a * \brief AddItem Adds an item by passing the pointer to an instance of a

View File

@ -19,13 +19,6 @@
#pragma once #pragma once
// Modules inlcude
// Local include
// Global include
#define STACKMEM 1 /// \def preserve memory for the execution stack #define STACKMEM 1 /// \def preserve memory for the execution stack
#define MAXSTACK 990 /// \def stack size reserved #define MAXSTACK 990 /// \def stack size reserved
@ -33,12 +26,6 @@
#define MAXARRAYSIZE 9999 #define MAXARRAYSIZE 9999
// variable type SetPrivate / IsPrivate
#define PR_PUBLIC 0 // public variable
#define PR_READ 1 // read only
#define PR_PROTECT 2 // protected (inheritance)
#define PR_PRIVATE 3 // strictly private
//! Define the current CBot version //! Define the current CBot version
#define CBOTVERSION 104 #define CBOTVERSION 104

View File

@ -46,7 +46,7 @@ CBotExprVar::~CBotExprVar()
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
CBotInstr* CBotExprVar::Compile(CBotToken* &p, CBotCStack* pStack, int privat) CBotInstr* CBotExprVar::Compile(CBotToken*& p, CBotCStack* pStack, CBotVar::ProtectionLevel privat)
{ {
// CBotToken* pDebut = p; // CBotToken* pDebut = p;
CBotCStack* pStk = pStack->TokenStack(); CBotCStack* pStk = pStack->TokenStack();

View File

@ -23,6 +23,7 @@
#include "CBot/CBotDefines.h" #include "CBot/CBotDefines.h"
#include "CBot/CBotInstr/CBotInstr.h" #include "CBot/CBotInstr/CBotInstr.h"
#include "CBot/CBotVar/CBotVar.h"
// Local include // Local include
@ -54,7 +55,8 @@ public:
* \param privat * \param privat
* \return * \return
*/ */
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack, int privat=PR_PROTECT); static CBotInstr* Compile(CBotToken*& p, CBotCStack* pStack,
CBotVar::ProtectionLevel privat = CBotVar::ProtectionLevel::Protected);
/*! /*!
* \brief CompileMethode * \brief CompileMethode

View File

@ -67,7 +67,7 @@ CBotLeftExpr* CBotLeftExpr::Compile(CBotToken* &p, CBotCStack* pStack)
inst->m_nIdent = var->GetUniqNum(); inst->m_nIdent = var->GetUniqNum();
if (inst->m_nIdent > 0 && inst->m_nIdent < 9000) if (inst->m_nIdent > 0 && inst->m_nIdent < 9000)
{ {
if ( var->IsPrivate(PR_READ) && if ( var->IsPrivate(CBotVar::ProtectionLevel::ReadOnly) &&
!pStk->GetBotCall()->m_bCompileClass) !pStk->GetBotCall()->m_bCompileClass)
{ {
pStk->SetError(CBotErrPrivate, p); pStk->SetError(CBotErrPrivate, p);
@ -131,7 +131,7 @@ CBotLeftExpr* CBotLeftExpr::Compile(CBotToken* &p, CBotCStack* pStack)
var = var->GetItem(p->GetString()); // get item correspondent var = var->GetItem(p->GetString()); // get item correspondent
if (var != nullptr) if (var != nullptr)
{ {
if ( var->IsPrivate(PR_READ) && if ( var->IsPrivate(CBotVar::ProtectionLevel::ReadOnly) &&
!pStk->GetBotCall()->m_bCompileClass) !pStk->GetBotCall()->m_bCompileClass)
{ {
pStk->SetError(CBotErrPrivate, pp); pStk->SetError(CBotErrPrivate, pp);

View File

@ -102,7 +102,7 @@ CBotInstr* CBotParExpr::Compile(CBotToken* &p, CBotCStack* pStack)
// recompile the variable for read-only // recompile the variable for read-only
delete inst; delete inst;
p = pvar; p = pvar;
inst = CBotExprVar::Compile(p, pStk, PR_READ); inst = CBotExprVar::Compile(p, pStk, CBotVar::ProtectionLevel::ReadOnly);
p = p->GetNext(); p = p->GetNext();
CBotPostIncExpr* i = new CBotPostIncExpr(); CBotPostIncExpr* i = new CBotPostIncExpr();
@ -122,7 +122,7 @@ CBotInstr* CBotParExpr::Compile(CBotToken* &p, CBotCStack* pStack)
if (p->GetType() == TokenTypVar) if (p->GetType() == TokenTypVar)
{ {
if (nullptr != (i->m_Instr = CBotExprVar::Compile(p, pStk, PR_READ))) if (nullptr != (i->m_Instr = CBotExprVar::Compile(p, pStk, CBotVar::ProtectionLevel::ReadOnly)))
{ {
if (pStk->GetType() >= CBotTypBoolean) if (pStk->GetType() >= CBotTypBoolean)
{ {

View File

@ -943,7 +943,7 @@ bool CBotStack::RestoreState(FILE* pf, CBotStack* &pStack)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool CBotVar::Save0State(FILE* pf) bool CBotVar::Save0State(FILE* pf)
{ {
if (!WriteWord(pf, 100+m_mPrivate))return false; // private variable? if (!WriteWord(pf, 100+static_cast<int>(m_mPrivate)))return false; // private variable?
if (!WriteWord(pf, m_bStatic))return false; // static variable? if (!WriteWord(pf, m_bStatic))return false; // static variable?
if (!WriteWord(pf, m_type.GetType()))return false; // saves the type (always non-zero) if (!WriteWord(pf, m_type.GetType()))return false; // saves the type (always non-zero)
if (!WriteWord(pf, static_cast<unsigned short>(m_binit))) return false; // variable defined? if (!WriteWord(pf, static_cast<unsigned short>(m_binit))) return false; // variable defined?
@ -1106,7 +1106,7 @@ bool CBotVar::RestoreState(FILE* pf, CBotVar* &pVar)
pNew->m_binit = initType; // pNew->SetInit(wi); pNew->m_binit = initType; // pNew->SetInit(wi);
pNew->SetStatic(st); pNew->SetStatic(st);
pNew->SetPrivate(prv-100); pNew->SetPrivate(static_cast<ProtectionLevel>(prv-100));
pPrev = pNew; pPrev = pNew;
} }
return true; return true;

View File

@ -58,7 +58,7 @@ CBotVar::CBotVar( )
m_binit = InitType::UNDEF; m_binit = InitType::UNDEF;
m_ident = 0; m_ident = 0;
m_bStatic = false; m_bStatic = false;
m_mPrivate = 0; m_mPrivate = ProtectionLevel::Public;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -509,7 +509,7 @@ void CBotVar::SetStatic(bool bStatic)
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void CBotVar::SetPrivate(int mPrivate) void CBotVar::SetPrivate(ProtectionLevel mPrivate)
{ {
m_mPrivate = mPrivate; m_mPrivate = mPrivate;
} }
@ -521,13 +521,13 @@ bool CBotVar::IsStatic()
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool CBotVar::IsPrivate(int mode) bool CBotVar::IsPrivate(ProtectionLevel mode)
{ {
return m_mPrivate >= mode; return static_cast<int>(m_mPrivate) >= static_cast<int>(mode);
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int CBotVar::GetPrivate() CBotVar::ProtectionLevel CBotVar::GetPrivate()
{ {
return m_mPrivate; return m_mPrivate;
} }

View File

@ -219,24 +219,32 @@ public:
*/ */
bool IsStatic(); bool IsStatic();
enum class ProtectionLevel
{
Public = 0, //!< public variable
ReadOnly = 1, //!< read only (can't be set from CBot, only from the engine)
Protected = 2, //!< protected (inheritance)
Private = 3 //!< private
};
/*! /*!
* \brief SetPrivate * \brief SetPrivate
* \param mPrivate * \param mPrivate
*/ */
void SetPrivate(int mPrivate); void SetPrivate(ProtectionLevel mPrivate);
/*! /*!
* \brief IsPrivate * \brief IsPrivate
* \param mode * \param mode
* \return * \return
*/ */
bool IsPrivate(int mode = PR_PROTECT); bool IsPrivate(ProtectionLevel mode = ProtectionLevel::Protected);
/*! /*!
* \brief GetPrivate * \brief GetPrivate
* \return * \return
*/ */
int GetPrivate(); ProtectionLevel GetPrivate();
/*! /*!
* \brief ConstructorSet * \brief ConstructorSet
@ -590,7 +598,7 @@ protected:
//! Static element (in class). //! Static element (in class).
bool m_bStatic; bool m_bStatic;
//! Element public, protected or private. //! Element public, protected or private.
int m_mPrivate; ProtectionLevel m_mPrivate;
//! Expression for the original content. //! Expression for the original content.
CBotInstr* m_InitExpr; CBotInstr* m_InitExpr;
//! List of limits for a table. //! List of limits for a table.

View File

@ -41,7 +41,7 @@ CBotVarBoolean::CBotVarBoolean( const CBotToken* name )
m_type = CBotTypBoolean; m_type = CBotTypBoolean;
m_binit = InitType::UNDEF; m_binit = InitType::UNDEF;
m_bStatic = false; m_bStatic = false;
m_mPrivate = 0; m_mPrivate = ProtectionLevel::Public;
m_val = 0; m_val = 0;
} }

View File

@ -61,7 +61,7 @@ CBotVarClass::CBotVarClass( const CBotToken* name, const CBotTypResult& type)
m_pParent = nullptr; m_pParent = nullptr;
m_binit = InitType::UNDEF; m_binit = InitType::UNDEF;
m_bStatic = false; m_bStatic = false;
m_mPrivate = 0; m_mPrivate = ProtectionLevel::Public;
m_bConstructor = false; m_bConstructor = false;
m_CptUse = 0; m_CptUse = 0;
m_ItemIdent = type.Eq(CBotTypIntrinsic) ? 0 : CBotVar::NextUniqNum(); m_ItemIdent = type.Eq(CBotTypIntrinsic) ? 0 : CBotVar::NextUniqNum();

View File

@ -43,7 +43,7 @@ CBotVarFloat::CBotVarFloat( const CBotToken* name )
m_type = CBotTypFloat; m_type = CBotTypFloat;
m_binit = InitType::UNDEF; m_binit = InitType::UNDEF;
m_bStatic = false; m_bStatic = false;
m_mPrivate = 0; m_mPrivate = ProtectionLevel::Public;
m_val = 0; m_val = 0;
} }

View File

@ -42,7 +42,7 @@ CBotVarInt::CBotVarInt( const CBotToken* name )
m_type = CBotTypInt; m_type = CBotTypInt;
m_binit = InitType::UNDEF; m_binit = InitType::UNDEF;
m_bStatic = false; m_bStatic = false;
m_mPrivate = 0; m_mPrivate = ProtectionLevel::Public;
m_val = 0; m_val = 0;
} }

View File

@ -41,7 +41,7 @@ CBotVarString::CBotVarString( const CBotToken* name )
m_type = CBotTypString; m_type = CBotTypString;
m_binit = InitType::UNDEF; m_binit = InitType::UNDEF;
m_bStatic = false; m_bStatic = false;
m_mPrivate = 0; m_mPrivate = ProtectionLevel::Public;
m_val.clear(); m_val.clear();
} }

View File

@ -348,7 +348,7 @@ void InitFileFunctions()
// adds the component ".filename" // adds the component ".filename"
bc->AddItem("filename", CBotTypString); bc->AddItem("filename", CBotTypString);
// adds the component ".handle" // adds the component ".handle"
bc->AddItem("handle", CBotTypInt, PR_PRIVATE); bc->AddItem("handle", CBotTypInt, CBotVar::ProtectionLevel::Private);
// define a constructor and a destructor // define a constructor and a destructor
bc->AddFunction("file", rfconstruct, cfconstruct); bc->AddFunction("file", rfconstruct, cfconstruct);

View File

@ -3183,21 +3183,21 @@ void CScriptFunctions::Init()
// Adds the class Object. // Adds the class Object.
bc = CBotClass::Create("object", nullptr); bc = CBotClass::Create("object", nullptr);
bc->AddItem("category", CBotTypResult(CBotTypInt), PR_READ); bc->AddItem("category", CBotTypResult(CBotTypInt), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("position", CBotTypResult(CBotTypClass, "point"), PR_READ); bc->AddItem("position", CBotTypResult(CBotTypClass, "point"), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("orientation", CBotTypResult(CBotTypFloat), PR_READ); bc->AddItem("orientation", CBotTypResult(CBotTypFloat), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("pitch", CBotTypResult(CBotTypFloat), PR_READ); bc->AddItem("pitch", CBotTypResult(CBotTypFloat), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("roll", CBotTypResult(CBotTypFloat), PR_READ); bc->AddItem("roll", CBotTypResult(CBotTypFloat), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("energyLevel", CBotTypResult(CBotTypFloat), PR_READ); bc->AddItem("energyLevel", CBotTypResult(CBotTypFloat), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("shieldLevel", CBotTypResult(CBotTypFloat), PR_READ); bc->AddItem("shieldLevel", CBotTypResult(CBotTypFloat), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("temperature", CBotTypResult(CBotTypFloat), PR_READ); bc->AddItem("temperature", CBotTypResult(CBotTypFloat), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("altitude", CBotTypResult(CBotTypFloat), PR_READ); bc->AddItem("altitude", CBotTypResult(CBotTypFloat), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("lifeTime", CBotTypResult(CBotTypFloat), PR_READ); bc->AddItem("lifeTime", CBotTypResult(CBotTypFloat), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("energyCell", CBotTypResult(CBotTypPointer, "object"), PR_READ); bc->AddItem("energyCell", CBotTypResult(CBotTypPointer, "object"), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("load", CBotTypResult(CBotTypPointer, "object"), PR_READ); bc->AddItem("load", CBotTypResult(CBotTypPointer, "object"), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("id", CBotTypResult(CBotTypInt), PR_READ); bc->AddItem("id", CBotTypResult(CBotTypInt), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("team", CBotTypResult(CBotTypInt), PR_READ); bc->AddItem("team", CBotTypResult(CBotTypInt), CBotVar::ProtectionLevel::ReadOnly);
bc->AddItem("velocity", CBotTypResult(CBotTypClass, "point"), PR_READ); bc->AddItem("velocity", CBotTypResult(CBotTypClass, "point"), CBotVar::ProtectionLevel::ReadOnly);
bc->AddFunction("busy", rBusy, cBusy); bc->AddFunction("busy", rBusy, cBusy);
bc->AddFunction("factory", rFactory, cFactory); bc->AddFunction("factory", rFactory, cFactory);
bc->AddFunction("research", rResearch, cClassOneFloat); bc->AddFunction("research", rResearch, cClassOneFloat);