ui属性系统(1)VSProperty

#define VS_NEW new
#define VS_DELETE delete

class VSProperty
{
    
    
public:
enum	//Property Type
{
    
    
  PT_VALUE,
  PT_ENUM,
  PT_DATA,//数据
  PT_ARRAY,//容器
  PT_MAP,//容器
  PT_MAX
};
enum	// Flag
{
    
    
  F_NONE = 0X00,
  F_SAVE_LOAD = 0X01,
  F_CLONE = 0X02,
  F_COPY = 0X04,
  F_SAVE_LOAD_CLONE = 0X03,
  F_SAVE_LOAD_COPY = 0X05,
  F_REFLECT_NAME = 0X08,
  F_NO_USE_GC = 0X10,
  F_MAX
};
VSProperty()
{
    
    
  m_pRttiOwner = NULL;
  m_pFuntionOwner = NULL;
  m_uiFlag = 0;
  m_uiElementOffset = 0;
}
VSProperty(VSRtti & Owner,const VSUsedName & Name,unsigned int uiElementOffset,unsigned int uiFlag)
:m_pRttiOwner(&Owner)
{
    
    
  m_Name = Name;
  m_uiElementOffset = uiElementOffset;
  m_uiFlag = uiFlag;
  m_pFuntionOwner = NULL;
}
VSProperty(VSFunction & Owner, const VSUsedName & Name, unsigned int uiElementOffset, unsigned int uiFlag)
:m_pFuntionOwner(&Owner)
{
    
    
m_Name = Name;
m_uiElementOffset = uiElementOffset;
m_uiFlag = uiFlag;
m_pRttiOwner = NULL;
}
virtual ~VSProperty()
{
    
    
	}
	virtual unsigned int GetPropertyType()const = 0;
	FORCEINLINE VSRtti * GetRtti()const
	{
    
    
		return m_pRttiOwner;
	}
	FORCEINLINE VSFunction * GetFunction()const
	{
    
    
		return m_pFuntionOwner;
	}
	FORCEINLINE const VSUsedName & GetName()const
	{
    
    
		return m_Name;
	}
	virtual void* GetValueAddress(void* pObj)const
	{
    
    
		return (void*)(((unsigned char*)pObj) + m_uiElementOffset);
	}
	virtual bool Archive(VSStream &Stream,void* pObj) = 0;
	virtual VSProperty * GetInstance() = 0;
	virtual void CloneData(void* pSrcObj,void* pDestObj,VSMap<VSObject *,VSObject*>& CloneMap) = 0;
	virtual void CopyData(void* pSrcObj,void* pDestObj) = 0;
	virtual void AddEditorElement(void * pSrcObj,VSECollection * pParent,VSString &Name) = 0;
	virtual bool Clone(VSProperty * p)
	{
    
    
		if ((p->GetRtti() == GetRtti() && GetRtti()) || (p->GetFunction() == GetFunction() && GetFunction()))
		{
    
    
			m_Name = p->m_Name;
			m_uiFlag = p->m_uiFlag;
			m_uiElementOffset = p->m_uiElementOffset;
			return true;		
		}
		
		return false;
	}
	void SetOwner(VSRtti & Owner)
	{
    
    
		m_pRttiOwner = &Owner;
	}
	void SetOwner(VSFunction & Function)
	{
    
    
		m_pFuntionOwner = &Function;
	}
	unsigned int GetFlag()const
	{
    
    
		return m_uiFlag;
	}
	void SetFlag(unsigned int uiFlag)
	{
    
    
		m_uiFlag = uiFlag;
	}
protected:
	VSRtti * m_pRttiOwner;
	VSFunction * m_pFuntionOwner;
	VSUsedName m_Name;
	unsigned int m_uiFlag;
	unsigned int m_uiElementOffset;
};
 

猜你喜欢

转载自blog.csdn.net/thefist11cc/article/details/125612607
UI1