Debugger: Extend ExpressionInfo.
- Add setters for the individual subcomponents. - Add listener interface. This will supplant the one currently attached to Team.
This commit is contained in:
parent
e646545b60
commit
329dd0af0b
@ -29,8 +29,7 @@ ExpressionInfo::ExpressionInfo(const ExpressionInfo& other)
|
|||||||
|
|
||||||
ExpressionInfo::~ExpressionInfo()
|
ExpressionInfo::~ExpressionInfo()
|
||||||
{
|
{
|
||||||
if (fResultType != NULL)
|
SetResultType(NULL);
|
||||||
fResultType->ReleaseReference();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -46,8 +45,22 @@ ExpressionInfo::ExpressionInfo(const BString& expression, Type* resultType)
|
|||||||
|
|
||||||
void
|
void
|
||||||
ExpressionInfo::SetTo(const BString& expression, Type* resultType)
|
ExpressionInfo::SetTo(const BString& expression, Type* resultType)
|
||||||
|
{
|
||||||
|
SetExpression(expression);
|
||||||
|
SetResultType(resultType);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ExpressionInfo::SetExpression(const BString& expression)
|
||||||
{
|
{
|
||||||
fExpression = expression;
|
fExpression = expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ExpressionInfo::SetResultType(Type* resultType)
|
||||||
|
{
|
||||||
if (fResultType != NULL)
|
if (fResultType != NULL)
|
||||||
fResultType->ReleaseReference();
|
fResultType->ReleaseReference();
|
||||||
|
|
||||||
@ -55,3 +68,35 @@ ExpressionInfo::SetTo(const BString& expression, Type* resultType)
|
|||||||
if (fResultType != NULL)
|
if (fResultType != NULL)
|
||||||
fResultType->AcquireReference();
|
fResultType->AcquireReference();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ExpressionInfo::AddListener(Listener* listener)
|
||||||
|
{
|
||||||
|
fListeners.Add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ExpressionInfo::RemoveListener(Listener* listener)
|
||||||
|
{
|
||||||
|
fListeners.Remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ExpressionInfo::NotifyExpressionEvaluated(status_t result, Value* value)
|
||||||
|
{
|
||||||
|
for (ListenerList::Iterator it = fListeners.GetIterator();
|
||||||
|
Listener* listener = it.Next();) {
|
||||||
|
listener->ExpressionEvaluated(this, result, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// #pragma mark - ExpressionInfo::Listener
|
||||||
|
|
||||||
|
|
||||||
|
ExpressionInfo::Listener::~Listener()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
@ -9,12 +9,16 @@
|
|||||||
#include <String.h>
|
#include <String.h>
|
||||||
|
|
||||||
#include <Referenceable.h>
|
#include <Referenceable.h>
|
||||||
|
#include <util/DoublyLinkedList.h>
|
||||||
|
|
||||||
class Type;
|
class Type;
|
||||||
|
class Value;
|
||||||
|
|
||||||
|
|
||||||
class ExpressionInfo : public BReferenceable {
|
class ExpressionInfo : public BReferenceable {
|
||||||
|
public:
|
||||||
|
class Listener;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ExpressionInfo();
|
ExpressionInfo();
|
||||||
ExpressionInfo(const ExpressionInfo& other);
|
ExpressionInfo(const ExpressionInfo& other);
|
||||||
@ -26,11 +30,33 @@ public:
|
|||||||
Type* resultType);
|
Type* resultType);
|
||||||
|
|
||||||
const BString& Expression() const { return fExpression; }
|
const BString& Expression() const { return fExpression; }
|
||||||
|
void SetExpression(const BString& expression);
|
||||||
|
|
||||||
Type* ResultType() const { return fResultType; }
|
Type* ResultType() const { return fResultType; }
|
||||||
|
void SetResultType(Type* resultType);
|
||||||
|
|
||||||
|
void AddListener(Listener* listener);
|
||||||
|
void RemoveListener(Listener* listener);
|
||||||
|
|
||||||
|
void NotifyExpressionEvaluated(status_t result,
|
||||||
|
Value* value);
|
||||||
|
|
||||||
|
private:
|
||||||
|
typedef DoublyLinkedList<Listener> ListenerList;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BString fExpression;
|
BString fExpression;
|
||||||
Type* fResultType;
|
Type* fResultType;
|
||||||
|
ListenerList fListeners;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class ExpressionInfo::Listener : public DoublyLinkedListLinkImpl<Listener> {
|
||||||
|
public:
|
||||||
|
virtual ~Listener();
|
||||||
|
|
||||||
|
virtual void ExpressionEvaluated(ExpressionInfo* info,
|
||||||
|
status_t result, Value* value) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user