Files
haiku-beta6/headers/private/debugger/model/ExpressionInfo.h
T

98 lines
2.1 KiB
C++
Raw Normal View History

/*
* Copyright 2014, Rene Gollent, [email protected].
* Distributed under the terms of the MIT License.
*/
#ifndef EXPRESSION_INFO_H
#define EXPRESSION_INFO_H
#include <String.h>
#include <Referenceable.h>
2014-11-08 18:15:31 -05:00
#include <util/DoublyLinkedList.h>
2014-11-15 00:31:17 -05:00
#include <Variant.h>
class Type;
2014-11-08 18:15:31 -05:00
class Value;
2014-11-15 00:31:17 -05:00
class ValueNodeChild;
enum expression_result_kind {
EXPRESSION_RESULT_KIND_UNKNOWN = 0,
EXPRESSION_RESULT_KIND_PRIMITIVE,
EXPRESSION_RESULT_KIND_VALUE_NODE,
EXPRESSION_RESULT_KIND_TYPE
2014-11-15 00:31:17 -05:00
};
class ExpressionResult : public BReferenceable {
public:
ExpressionResult();
virtual ~ExpressionResult();
expression_result_kind Kind() const { return fResultKind; }
2014-11-15 00:31:17 -05:00
Value* PrimitiveValue() const
{ return fPrimitiveValue; }
ValueNodeChild* ValueNodeValue() const
{ return fValueNodeValue; }
Type* GetType() const
{ return fTypeResult; }
2014-11-15 00:31:17 -05:00
void SetToPrimitive(Value* value);
void SetToValueNode(ValueNodeChild* child);
void SetToType(Type* type);
2014-11-15 00:31:17 -05:00
private:
void _Unset();
2014-11-15 00:31:17 -05:00
private:
expression_result_kind fResultKind;
Value* fPrimitiveValue;
ValueNodeChild* fValueNodeValue;
Type* fTypeResult;
2014-11-15 00:31:17 -05:00
};
class ExpressionInfo : public BReferenceable {
2014-11-08 18:15:31 -05:00
public:
class Listener;
public:
ExpressionInfo();
ExpressionInfo(const ExpressionInfo& other);
2014-11-15 00:31:17 -05:00
ExpressionInfo(const BString& expression);
virtual ~ExpressionInfo();
2014-11-15 00:31:17 -05:00
void SetTo(const BString& expression);
const BString& Expression() const { return fExpression; }
2014-11-08 18:15:31 -05:00
void AddListener(Listener* listener);
void RemoveListener(Listener* listener);
void NotifyExpressionEvaluated(status_t result,
2014-11-15 00:31:17 -05:00
ExpressionResult* value);
2014-11-08 18:15:31 -05:00
private:
typedef DoublyLinkedList<Listener> ListenerList;
private:
BString fExpression;
2014-11-08 18:15:31 -05:00
ListenerList fListeners;
};
class ExpressionInfo::Listener : public DoublyLinkedListLinkImpl<Listener> {
public:
virtual ~Listener();
virtual void ExpressionEvaluated(ExpressionInfo* info,
2014-11-15 00:31:17 -05:00
status_t result,
ExpressionResult* value) = 0;
};
#endif // EXPRESSION_INFO_H