aboutsummaryrefslogtreecommitdiff
path: root/engines/wintermute/Base/scriptables/ScValue.h
blob: fedf3572f39610cf6b0a1a6a286c0b84e7de8a61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/* 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 2
 * 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, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

/*
 * This file is based on WME Lite.
 * http://dead-code.org/redir.php?target=wmelite
 * Copyright (c) 2011 Jan Nedoma
 */

#ifndef WINTERMUTE_SCVALUE_H
#define WINTERMUTE_SCVALUE_H


#include "engines/wintermute/Base/BBase.h"
#include "engines/wintermute/persistent.h"
#include "engines/wintermute/dcscript.h"   // Added by ClassView
//#include <map>
//#include <string>
#include "engines/wintermute/wme_debugger.h"
#include "common/str.h"

namespace WinterMute {

class CScScript;
class CBScriptable;

class CScValue : public CBBase, public IWmeDebugProp {
public:
	HRESULT DbgSendVariables(IWmeDebugClient *Client, EWmeDebuggerVariableType Type, CScScript *Script, unsigned int ScopeID);

	static int Compare(CScValue *Val1, CScValue *Val2);
	static int CompareStrict(CScValue *Val1, CScValue *Val2);
	TValType GetTypeTolerant();
	void Cleanup(bool IgnoreNatives = false);
	DECLARE_PERSISTENT(CScValue, CBBase)

	bool _isConstVar;
	HRESULT SaveAsText(CBDynBuffer *Buffer, int Indent);
	void SetValue(CScValue *Val);
	bool _persistent;
	bool PropExists(const char *Name);
	void Copy(CScValue *orig, bool CopyWhole = false);
	void SetStringVal(const char *Val);
	TValType GetType();
	bool GetBool(bool Default = false);
	int GetInt(int Default = 0);
	double GetFloat(double Default = 0.0f);
	const char *GetString();
	void *GetMemBuffer();
	CBScriptable *GetNative();
	HRESULT DeleteProp(const char *Name);
	void DeleteProps();
	void CleanProps(bool IncludingNatives);
	void SetBool(bool Val);
	void SetInt(int Val);
	void SetFloat(double Val);
	void SetString(const char *Val);
	void SetNULL();
	void SetNative(CBScriptable *Val, bool Persistent = false);
	void SetObject();
	void SetReference(CScValue *Val);
	bool IsNULL();
	bool IsNative();
	bool IsString();
	bool IsBool();
	bool IsFloat();
	bool IsInt();
	bool IsObject();
	HRESULT SetProp(const char *Name, CScValue *Val, bool CopyWhole = false, bool SetAsConst = false);
	CScValue *GetProp(const char *Name);
	CBScriptable *_valNative;
	CScValue *_valRef;
protected:
	bool _valBool;
	int _valInt;
	double _valFloat;
	char *_valString;
public:
	TValType _type;
	CScValue(CBGame *inGame);
	CScValue(CBGame *inGame, bool Val);
	CScValue(CBGame *inGame, int Val);
	CScValue(CBGame *inGame, double Val);
	CScValue(CBGame *inGame, const char *Val);
	virtual ~CScValue();
	Common::HashMap<Common::String, CScValue *> _valObject;
	Common::HashMap<Common::String, CScValue *>::iterator _valIter;

	bool SetProperty(const char *PropName, int Value);
	bool SetProperty(const char *PropName, const char *Value);
	bool SetProperty(const char *PropName, double Value);
	bool SetProperty(const char *PropName, bool Value);
	bool SetProperty(const char *PropName);


// IWmeDebugProp interface implementation
public:
	virtual EWmeDebuggerPropType DbgGetType();

	// getters
	virtual int DbgGetValInt();
	virtual double DbgGetValFloat();
	virtual bool DbgGetValBool();
	virtual const char *DbgGetValString();
	virtual IWmeDebugObject *DbgGetValNative();

	// setters
	virtual bool DbgSetVal(int Value);
	virtual bool DbgSetVal(double Value);
	virtual bool DbgSetVal(bool Value);
	virtual bool DbgSetVal(const char *Value);
	virtual bool DbgSetVal();

	// properties
	virtual int DbgGetNumProperties();
	virtual bool DbgGetProperty(int Index, const char **Name, IWmeDebugProp **Value);

	virtual bool DbgGetDescription(char *Buf, int BufSize);
};

} // end of namespace WinterMute

#endif