/*
Copyright (C) 2004 T. Scott Dattalo
This file is part of gpsim.
gpsim 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, or (at your option)
any later version.
gpsim 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 gpsim; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef __GPSIM_OBJECT_H__
#define __GPSIM_OBJECT_H__
#include <string>
using namespace std;
class BreakType;
class Expression;
/// gpsimObject - base class for most of gpsim's objects
///
class gpsimObject {
public:
gpsimObject();
gpsimObject(const char *_name, const char *desc=0);
virtual ~gpsimObject();
/// Get the name of the object
virtual string &name(void) const;
/// copy the name to a user char array
virtual char *name(char *, int len);
/// copy the object value to a user char array
virtual char *toString(char *, int len);
virtual char *toBitStr(char *, int len);
/// Assign a new name to the object
virtual void new_name(const char *);
virtual void new_name(string &);
/// description - get a description of this object. If the object has
/// a name, then 'help value_name' at the command line will display
/// the description.
virtual string description();
void set_description(const char *);
/// Access object-specific information
string show();
string showType();
virtual string toString();
// Breakpoint types supported by Value
enum ObjectBreakTypes {
eBreakAny,
eBreakWrite,
eBreakRead,
eBreakExecute
};
// Breakpoint types supported by Value
enum ObjectActionTypes {
eActionHalt,
eActionLog,
};
/// breakpoints
/// set a break point on a gpsim object. The BreakType specifies the
/// the condition for which the break will trigger when this value
/// is accessed. In addition, the optional expr is a boolean expression
/// that is evaluated when the Object is accessed. The expression must
/// evaluate to true for the break to trigger. If the break is successfully
/// set then a non-negative number (the break point number) will be returned.
/// If the break fails, then -1 is returned.
/// The ActionType specifies the action to take when the break is triggered.
virtual int set_break(ObjectBreakTypes bt=eBreakAny, ObjectActionTypes at=eActionHalt, Expression *expr=0);
virtual int clear_break();
protected:
string name_str; // A unique name to describe the object
const char *cpDescription; // A desciption of the object
};
//------------------------------------------------------------------------
// BreakTypes
//
class BreakType
{
public:
BreakType(int _type)
: m_type(_type)
{
}
virtual int type()
{
return m_type;
}
protected:
int m_type;
};
#endif // __GPSIM_OBJECT_H__
syntax highlighted by Code2HTML, v. 0.9.1