Removed CBotStringArray

dev-time-step
krzys-h 2015-12-20 14:49:30 +01:00
parent 6832c91496
commit 3eeab0f9b7
12 changed files with 33 additions and 183 deletions

View File

@ -26,7 +26,6 @@
// Modules inlcude // Modules inlcude
#include "CBot/CBotFileUtils.h" #include "CBot/CBotFileUtils.h"
#include "CBot/CBotString.h" #include "CBot/CBotString.h"
#include "CBot/CBotStringArray.h"
#include "CBot/CBotClass.h" #include "CBot/CBotClass.h"
#include "CBot/CBotToken.h" #include "CBot/CBotToken.h"
#include "CBot/CBotProgram.h" #include "CBot/CBotProgram.h"

View File

@ -50,7 +50,7 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int CBotInstr::m_LoopLvl = 0; int CBotInstr::m_LoopLvl = 0;
CBotStringArray CBotInstr::m_labelLvl = CBotStringArray(); std::vector<CBotString> CBotInstr::m_labelLvl = std::vector<CBotString>();
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
CBotInstr::CBotInstr() CBotInstr::CBotInstr()
@ -74,7 +74,7 @@ CBotInstr::~CBotInstr()
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void CBotInstr::IncLvl(CBotString& label) void CBotInstr::IncLvl(CBotString& label)
{ {
m_labelLvl.SetSize(m_LoopLvl+1); m_labelLvl.resize(m_LoopLvl+1);
m_labelLvl[m_LoopLvl] = label; m_labelLvl[m_LoopLvl] = label;
m_LoopLvl++; m_LoopLvl++;
} }
@ -82,7 +82,7 @@ void CBotInstr::IncLvl(CBotString& label)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void CBotInstr::IncLvl() void CBotInstr::IncLvl()
{ {
m_labelLvl.SetSize(m_LoopLvl+1); m_labelLvl.resize(m_LoopLvl+1);
m_labelLvl[m_LoopLvl] = "#SWITCH"; m_labelLvl[m_LoopLvl] = "#SWITCH";
m_LoopLvl++; m_LoopLvl++;
} }

View File

@ -19,14 +19,10 @@
#pragma once #pragma once
// Modules inlcude
#include "CBot/CBotToken.h" #include "CBot/CBotToken.h"
#include "CBot/CBotCStack.h" #include "CBot/CBotCStack.h"
// Local include #include <vector>
// Global include
/* /*
for example, the following program for example, the following program
@ -262,5 +258,5 @@ protected:
private: private:
//! List of labels used. //! List of labels used.
static CBotStringArray m_labelLvl; static std::vector<CBotString> m_labelLvl;
}; };

View File

@ -80,7 +80,7 @@ CBotProgram::~CBotProgram()
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool CBotProgram::Compile( const char* program, CBotStringArray& ListFonctions, void* pUser ) bool CBotProgram::Compile( const char* program, std::vector<CBotString>& ListFonctions, void* pUser )
{ {
int error = 0; int error = 0;
Stop(); Stop();
@ -91,7 +91,7 @@ bool CBotProgram::Compile( const char* program, CBotStringArray& ListFonctions,
m_pClass = nullptr; m_pClass = nullptr;
delete m_Prog; m_Prog= nullptr; delete m_Prog; m_Prog= nullptr;
ListFonctions.SetSize(0); ListFonctions.clear();
m_ErrorCode = 0; m_ErrorCode = 0;
// transforms the program in Tokens // transforms the program in Tokens
@ -152,7 +152,7 @@ bool CBotProgram::Compile( const char* program, CBotStringArray& ListFonctions,
{ {
m_bCompileClass = false; m_bCompileClass = false;
CBotFunction::Compile(p, pStack, next); CBotFunction::Compile(p, pStack, next);
if (next->IsExtern()) ListFonctions.Add(next->GetName()/* + next->GetParams()*/); if (next->IsExtern()) ListFonctions.push_back(next->GetName()/* + next->GetParams()*/);
next->m_pProg = this; // keeps pointers to the module next->m_pProg = this; // keeps pointers to the module
next = next->Next(); next = next->Next();
} }

View File

@ -22,13 +22,13 @@
// Modules inlcude // Modules inlcude
#include "CBot/CBotTypResult.h" #include "CBot/CBotTypResult.h"
#include "CBot/CBotString.h" #include "CBot/CBotString.h"
#include "CBot/CBotStringArray.h"
#include "CBot/CBotEnums.h" #include "CBot/CBotEnums.h"
// Local include // Local include
// Global include // Global include
#include <vector>
// Forward declaration // Forward declaration
class CBotFunction; class CBotFunction;
@ -84,7 +84,7 @@ public:
* \return false if an error at compile. * \return false if an error at compile.
* \see GetCompileError() to retrieve the error. * \see GetCompileError() to retrieve the error.
*/ */
bool Compile( const char* program, CBotStringArray& ListFonctions, void* pUser = nullptr); bool Compile( const char* program, std::vector<CBotString>& ListFonctions, void* pUser = nullptr);
/*! /*!
* \brief SetIdent Associates an identifier with the instance CBotProgram. * \brief SetIdent Associates an identifier with the instance CBotProgram.

View File

@ -1,61 +0,0 @@
/*
* 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
*/
#include "CBot/CBotStringArray.h"
////////////////////////////////////////////////////////////////////////////////
CBotStringArray::CBotStringArray()
{
}
////////////////////////////////////////////////////////////////////////////////
CBotStringArray::~CBotStringArray()
{
m_data.clear(); // destroys data !
}
////////////////////////////////////////////////////////////////////////////////
int CBotStringArray::GetSize()
{
return m_data.size();
}
////////////////////////////////////////////////////////////////////////////////
void CBotStringArray::Add(const CBotString& str)
{
m_data.push_back(str);
}
////////////////////////////////////////////////////////////////////////////////
void CBotStringArray::SetSize(int nNewSize)
{
m_data.resize(nNewSize);
}
////////////////////////////////////////////////////////////////////////////////
CBotString& CBotStringArray::operator[](int nIndex)
{
return ElementAt(nIndex);
}
////////////////////////////////////////////////////////////////////////////////
CBotString& CBotStringArray::ElementAt(int nIndex)
{
return m_data[nIndex];
}

View File

@ -1,79 +0,0 @@
/*
* 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
#include "CBot/CBotString.h"
#include <vector>
/*!
* \brief The CBotStringArray class Class used to arrays of strings management.
* TODO: refactor code to use std::vector instead
*/
class CBotStringArray : public CBotString
{
public:
/*!
* \brief CBotStringArray
*/
CBotStringArray();
/*!
* \brief ~CBotStringArray
*/
~CBotStringArray();
/*!
* \brief SetSize Set the array size.
* \param nb
*/
void SetSize(int nb);
/*!
* \brief GetSize
* \return
*/
int GetSize();
/*!
* \brief Add
* \param str
*/
void Add(const CBotString& str);
/*!
* \brief operator []
* \param nIndex
* \return
*/
CBotString& operator[](int nIndex);
/*!
* \brief ElementAt
* \param nIndex
* \return
*/
CBotString& ElementAt(int nIndex);
private:
std::vector<CBotString> m_data;
};

View File

@ -26,9 +26,9 @@
#include <cstdarg> #include <cstdarg>
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
CBotStringArray CBotToken::m_ListKeyWords; std::vector<CBotString> CBotToken::m_ListKeyWords;
int CBotToken::m_ListIdKeyWords[200]; int CBotToken::m_ListIdKeyWords[200];
CBotStringArray CBotToken::m_ListKeyDefine; std::vector<CBotString> CBotToken::m_ListKeyDefine;
long CBotToken::m_ListKeyNums[MAXDEFNUM]; long CBotToken::m_ListKeyNums[MAXDEFNUM];
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -104,7 +104,7 @@ CBotToken::~CBotToken()
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void CBotToken::Free() void CBotToken::Free()
{ {
m_ListKeyDefine.SetSize(0); m_ListKeyDefine.clear();
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -438,12 +438,12 @@ void CBotToken::Delete(CBotToken* pToken)
int CBotToken::GetKeyWords(const char* w) int CBotToken::GetKeyWords(const char* w)
{ {
int i; int i;
int l = m_ListKeyWords.GetSize(); int l = m_ListKeyWords.size();
if (l == 0) if (l == 0)
{ {
LoadKeyWords(); // takes the list for the first time LoadKeyWords(); // takes the list for the first time
l = m_ListKeyWords.GetSize(); l = m_ListKeyWords.size();
} }
for (i = 0; i < l; i++) for (i = 0; i < l; i++)
@ -458,7 +458,7 @@ int CBotToken::GetKeyWords(const char* w)
bool CBotToken::GetKeyDefNum(const char* w, CBotToken* &token) bool CBotToken::GetKeyDefNum(const char* w, CBotToken* &token)
{ {
int i; int i;
int l = m_ListKeyDefine.GetSize(); int l = m_ListKeyDefine.size();
for (i = 0; i < l; i++) for (i = 0; i < l; i++)
{ {
@ -482,14 +482,14 @@ void CBotToken::LoadKeyWords()
i = TokenKeyWord; //start with keywords of the language i = TokenKeyWord; //start with keywords of the language
while (s.LoadString(i)) while (s.LoadString(i))
{ {
m_ListKeyWords.Add(s); m_ListKeyWords.push_back(s);
m_ListIdKeyWords[n++] = i++; m_ListIdKeyWords[n++] = i++;
} }
i = TokenKeyDeclare; //keywords of declarations i = TokenKeyDeclare; //keywords of declarations
while (s.LoadString(i)) while (s.LoadString(i))
{ {
m_ListKeyWords.Add(s); m_ListKeyWords.push_back(s);
m_ListIdKeyWords[n++] = i++; m_ListIdKeyWords[n++] = i++;
} }
@ -497,14 +497,14 @@ void CBotToken::LoadKeyWords()
i = TokenKeyVal; //keywords of values i = TokenKeyVal; //keywords of values
while (s.LoadString(i)) while (s.LoadString(i))
{ {
m_ListKeyWords.Add(s); m_ListKeyWords.push_back(s);
m_ListIdKeyWords[n++] = i++; m_ListIdKeyWords[n++] = i++;
} }
i = TokenKeyOp; //operators i = TokenKeyOp; //operators
while (s.LoadString(i)) while (s.LoadString(i))
{ {
m_ListKeyWords.Add(s); m_ListKeyWords.push_back(s);
m_ListIdKeyWords[n++] = i++; m_ListIdKeyWords[n++] = i++;
} }
} }
@ -513,7 +513,7 @@ void CBotToken::LoadKeyWords()
bool CBotToken::DefineNum(const char* name, long val) bool CBotToken::DefineNum(const char* name, long val)
{ {
int i; int i;
int l = m_ListKeyDefine.GetSize(); int l = m_ListKeyDefine.size();
for (i = 0; i < l; i++) for (i = 0; i < l; i++)
{ {
@ -521,7 +521,7 @@ bool CBotToken::DefineNum(const char* name, long val)
} }
if ( i == MAXDEFNUM ) return false; if ( i == MAXDEFNUM ) return false;
m_ListKeyDefine.Add( name ); m_ListKeyDefine.push_back( name );
m_ListKeyNums[i] = val; m_ListKeyNums[i] = val;
return true; return true;
} }

View File

@ -19,12 +19,9 @@
#pragma once #pragma once
// Modules inlcude #include "CBot/CBotString.h"
#include "CBot/CBotStringArray.h"
// Local include #include <vector>
// Global include
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
// Token management (tokens) // Token management (tokens)
@ -248,7 +245,7 @@ private:
static void LoadKeyWords(); static void LoadKeyWords();
//! List of keywords of the CBot language (if, +, for, while, case, extern ...) //! List of keywords of the CBot language (if, +, for, while, case, extern ...)
static CBotStringArray m_ListKeyWords; static std::vector<CBotString> m_ListKeyWords;
//! List of id correponding to the keywords of the CBot language //! List of id correponding to the keywords of the CBot language
static int m_ListIdKeyWords[200]; static int m_ListIdKeyWords[200];
@ -256,7 +253,7 @@ private:
//! This keywords are defined in : //! This keywords are defined in :
//! - void CScriptFunctions::Init() //! - void CScriptFunctions::Init()
//! - void CBotProgram::Init() //! - void CBotProgram::Init()
static CBotStringArray m_ListKeyDefine; static std::vector<CBotString> m_ListKeyDefine;
//! List of id correponding to the defined words //! List of id correponding to the defined words
static long m_ListKeyNums[MAXDEFNUM]; static long m_ListKeyNums[MAXDEFNUM];

View File

@ -10,7 +10,6 @@ set(SOURCES
CBotCall.cpp CBotCall.cpp
CBotDefParam.cpp CBotDefParam.cpp
CBotCallMethode.cpp CBotCallMethode.cpp
CBotStringArray.cpp
CBotTypResult.cpp CBotTypResult.cpp
StringFunctions.cpp StringFunctions.cpp
CBotInstr/CBotInstr.cpp CBotInstr/CBotInstr.cpp

View File

@ -228,7 +228,7 @@ bool CScript::CheckToken()
bool CScript::Compile() bool CScript::Compile()
{ {
CBotStringArray liste; std::vector<CBotString> functionList;
int i; int i;
const char* p; const char* p;
@ -250,16 +250,16 @@ bool CScript::Compile()
m_botProg = MakeUnique<CBotProgram>(m_object->GetBotVar()); m_botProg = MakeUnique<CBotProgram>(m_object->GetBotVar());
} }
if ( m_botProg->Compile(m_script.get(), liste, this) ) if ( m_botProg->Compile(m_script.get(), functionList, this) )
{ {
if ( liste.GetSize() == 0 ) if (functionList.empty())
{ {
strcpy(m_title, "<extern missing>"); strcpy(m_title, "<extern missing>");
m_mainFunction[0] = 0; m_mainFunction[0] = 0;
} }
else else
{ {
p = liste[0]; p = functionList[0];
i = 0; i = 0;
bool titleDone = false; bool titleDone = false;
while ( true ) while ( true )

View File

@ -44,7 +44,7 @@ int main(int argc, char* argv[])
CBotProgram::AddFunction("message", rMessage, cMessage); CBotProgram::AddFunction("message", rMessage, cMessage);
// Compile the program // Compile the program
CBotStringArray externFunctions; std::vector<CBotString> externFunctions;
std::unique_ptr<CBotProgram> program{new CBotProgram(nullptr)}; std::unique_ptr<CBotProgram> program{new CBotProgram(nullptr)};
if (!program->Compile(code.c_str(), externFunctions, nullptr)) if (!program->Compile(code.c_str(), externFunctions, nullptr))
{ {
@ -57,15 +57,14 @@ int main(int argc, char* argv[])
} }
// Execute all compiled functions marked as "extern" // Execute all compiled functions marked as "extern"
if (externFunctions.GetSize() == 0) if (externFunctions.empty())
{ {
std::cerr << "NO EXTERN FUNCTIONS FOUND"; std::cerr << "NO EXTERN FUNCTIONS FOUND";
return 2; return 2;
} }
bool runErrors = false; bool runErrors = false;
for (int i = 0; i < externFunctions.GetSize(); i++) for (const char* func : externFunctions)
{ {
const char* func = externFunctions[i];
if (!program->Start(func)) if (!program->Start(func))
{ {
std::cerr << "FAILED TO START: " << func << std::endl; std::cerr << "FAILED TO START: " << func << std::endl;