mirror of
https://github.com/scummvm/scummvm.git
synced 2025-04-02 10:52:32 -04:00
160 lines
3.9 KiB
C++
160 lines
3.9 KiB
C++
|
|
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* 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://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#ifndef BAGEL_BAGLIB_VAR_H
|
|
#define BAGEL_BAGLIB_VAR_H
|
|
|
|
#include "bagel/baglib/parse_object.h"
|
|
#include "bagel/boflib/string.h"
|
|
#include "bagel/boflib/list.h"
|
|
|
|
namespace Bagel {
|
|
|
|
class CBagVar : public CBagParseObject, public CBofObject {
|
|
public:
|
|
enum VARTYPE { STRING = 0, NUMBER = 1, BOOLEAN = 2 };
|
|
|
|
private:
|
|
CBofString _sVarName; // Name of the variable
|
|
CBofString _sVarValue; // Value of the variable if not a reference
|
|
VARTYPE _xVarType; // Type of variable, string
|
|
bool _bGlobal : 1; // Is the variable a constant
|
|
bool _bConstant : 1; // Is the variable a constant
|
|
bool _bReference : 1; // Is the variable a reference to an objects state date
|
|
bool _bTimer : 1; // Is the variable updated on object timer events
|
|
bool _bRandom : 1; // Is the variable updated as a random number
|
|
bool _freeze = false;
|
|
|
|
public:
|
|
CBagVar();
|
|
CBagVar(const CBofString &sName, const CBofString &sValue, bool bAddToList);
|
|
virtual ~CBagVar();
|
|
|
|
ParseCodes setInfo(CBagIfstream &) override;
|
|
|
|
const CBofString &getName() {
|
|
return _sVarName;
|
|
}
|
|
// const CBofString& getValue() { return _sVarValue; }
|
|
const CBofString &getValue();
|
|
int getNumValue();
|
|
bool isGlobal() {
|
|
return _bGlobal;
|
|
}
|
|
bool isConstant() {
|
|
return _bConstant;
|
|
}
|
|
bool isNumeric() {
|
|
return _xVarType == NUMBER;
|
|
}
|
|
bool isBoolean() {
|
|
return _xVarType == BOOLEAN;
|
|
}
|
|
bool isString() {
|
|
return _xVarType == STRING;
|
|
}
|
|
bool isReference() {
|
|
return _bReference;
|
|
}
|
|
bool isTimer() {
|
|
return _bTimer;
|
|
}
|
|
bool isRandom() {
|
|
return _bRandom;
|
|
}
|
|
bool isFrozen() const {
|
|
return _freeze;
|
|
}
|
|
VARTYPE getType() {
|
|
return _xVarType;
|
|
}
|
|
|
|
// Whenever setting the name, add this object to the hash table.
|
|
void setName(const CBofString &s);
|
|
void setValue(const CBofString &s);
|
|
void setValue(int nVal);
|
|
void setBoolValue(bool bVal);
|
|
void setGlobal(bool bVal = true) {
|
|
_bGlobal = bVal;
|
|
}
|
|
void setConstant(bool bVal = true) {
|
|
_bConstant = bVal;
|
|
}
|
|
void setReference(bool bVal = true) {
|
|
_bReference = bVal;
|
|
}
|
|
void setTimer(bool bVal = true) {
|
|
_bTimer = bVal;
|
|
}
|
|
void setRandom(bool bVal = true) {
|
|
_bRandom = bVal;
|
|
}
|
|
void setFreeze(bool bVal = true) {
|
|
_freeze = bVal;
|
|
}
|
|
void setString() {
|
|
_xVarType = STRING;
|
|
}
|
|
void setNumeric() {
|
|
_xVarType = NUMBER;
|
|
}
|
|
void setBoolean() {
|
|
_xVarType = BOOLEAN;
|
|
}
|
|
|
|
void increment();
|
|
};
|
|
|
|
// This could be templated with the storage device manager
|
|
#define VAR_HASH_TABLE_SIZE 131
|
|
|
|
class CBagVarManager : public CBagParseObject, public CBofObject {
|
|
private:
|
|
static int nVarMngrs;
|
|
CBofList<CBagVar *> _xVarList;
|
|
|
|
public:
|
|
CBagVarManager();
|
|
virtual ~CBagVarManager();
|
|
static void initialize();
|
|
|
|
ErrorCode registerVariable(CBagVar *pVar);
|
|
ErrorCode unRegisterVariable(CBagVar *pVar);
|
|
ErrorCode updateRegistration();
|
|
ErrorCode releaseVariables(bool bIncludeGlobals = true);
|
|
|
|
ErrorCode incrementTimers();
|
|
CBagVar *getVariable(const CBofString &sName);
|
|
CBagVar *getVariable(int i) {
|
|
return _xVarList[i];
|
|
}
|
|
int getNumVars() {
|
|
return _xVarList.getCount();
|
|
}
|
|
|
|
// Use a hash table to lookup variables.
|
|
CBofList<CBagVar *> _xVarHashList[VAR_HASH_TABLE_SIZE];
|
|
};
|
|
|
|
} // namespace Bagel
|
|
|
|
#endif
|