root/headers/private/debugger/value/value_nodes/AddressValueNode.h
/*
 * Copyright 2015, Rene Gollent, rene@gollent.com.
 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */
#ifndef ADDRESS_VALUE_NODE_H
#define ADDRESS_VALUE_NODE_H


#include "ValueNode.h"


class AddressValueNodeChild;
class AddressType;


class AddressValueNode : public ValueNode {
public:
                                                                AddressValueNode(ValueNodeChild* nodeChild,
                                                                        AddressType* type);
        virtual                                         ~AddressValueNode();

        virtual Type*                           GetType() const;

        virtual status_t                        ResolvedLocationAndValue(
                                                                        ValueLoader* valueLoader,
                                                                        ValueLocation*& _location,
                                                                        Value*& _value);

                        // locking required

        virtual status_t                        CreateChildren(TeamTypeInformation* info);
        virtual int32                           CountChildren() const;
        virtual ValueNodeChild*         ChildAt(int32 index) const;

private:
                        AddressType*            fType;
                        AddressValueNodeChild* fChild;
};


class AddressValueNodeChild : public ValueNodeChild {
public:
                                                                AddressValueNodeChild(AddressValueNode* parent,
                                                                        const BString& name, Type* type);
        virtual                                         ~AddressValueNodeChild();

        virtual const BString&          Name() const;
        virtual Type*                           GetType() const;
        virtual ValueNode*                      Parent() const;

        virtual status_t                        ResolveLocation(ValueLoader* valueLoader,
                                                                        ValueLocation*& _location);

private:
                        AddressValueNode*       fParent;
                        BString                         fName;
                        Type*                           fType;
};


#endif  // ADDRESS_VALUE_NODE_H