1/* 2 * Copyright 2012-2015, Rene Gollent, rene@gollent.com. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef BLIST_VALUE_NODE_H 6#define BLIST_VALUE_NODE_H 7 8 9#include <List.h> 10#include <Variant.h> 11 12#include <ObjectList.h> 13 14#include "ValueLocation.h" 15#include "ValueNode.h" 16 17 18class CompoundType; 19 20 21class BListValueNode : public ValueNode { 22public: 23 BListValueNode(ValueNodeChild* nodeChild, 24 Type* type); 25 virtual ~BListValueNode(); 26 27 virtual Type* GetType() const; 28 virtual status_t ResolvedLocationAndValue( 29 ValueLoader* valueLoader, 30 ValueLocation*& _location, 31 Value*& _value); 32 33 virtual bool ChildCreationNeedsValue() const 34 { return true; } 35 virtual status_t CreateChildren(TeamTypeInformation* info); 36 virtual int32 CountChildren() const; 37 virtual ValueNodeChild* ChildAt(int32 index) const; 38 39 virtual bool IsRangedContainer() const; 40 virtual bool IsContainerRangeFixed() const; 41 virtual void ClearChildren(); 42 virtual status_t CreateChildrenInRange( 43 TeamTypeInformation* info, 44 int32 lowIndex, int32 highIndex); 45 virtual status_t SupportedChildRange(int32& lowIndex, 46 int32& highIndex) const; 47private: 48 class BListElementNodeChild; 49 class BListItemCountNodeChild; 50 51 // for GCC2 52 friend class BListElementNodeChild; 53 friend class BListItemCountNodeChild; 54 55 typedef BObjectList<ValueNodeChild> ChildNodeList; 56 57private: 58 59 Type* fType; 60 ChildNodeList fChildren; 61 BVariant fDataLocation; 62 BVariant fItemCountLocation; 63 Type* fItemCountType; 64 int32 fItemCount; 65 bool fCountChildCreated; 66}; 67 68 69#endif // BLIST_VALUE_NODE_H 70