/*************************************************************************/ /* File : CKParameter.h */ /* Author : Nicolas Galinotti */ /* */ /* Virtools SDK */ /* Copyright (c) Virtools 2000, All Rights Reserved. */ /*************************************************************************/ #ifndef CKParameter_H #define CKParameter_H #include "CKObject.h" /************************************************************************** {filename:CKParameter} Name: CKParameter Summary: Base class for output and local parameter Remarks: + The type of the parameter defines the type of the data provided. These types are maintained by the parameter manager. It defines the size of the buffer to use, and also decides what can be plugged onto the output parameter. To have the list and definition of predefined parameter types see CKParameterManager. + The class id of CKParameter is CKCID_PARAMETER. See also: CKBehavior, CKParameterIn, CKParameterOperation **********************************************************************************/ class CKParameter : public CKObject { friend class CKParameterIn; friend class CKParameterManager; public : //-------------------------------------------- // Value CKObject* GetValueObject(CKBOOL update = TRUE); virtual CKERROR GetValue(void *buf, CKBOOL update = TRUE); virtual CKERROR SetValue(const void *buf,int size = 0); virtual CKERROR CopyValue(CKParameter *param,CKBOOL UpdateParam=TRUE); CKBOOL IsCompatibleWith(CKParameter *param); //-------------------------------------------- // Data pointer int GetDataSize(); virtual void * GetReadDataPtr(CKBOOL update = TRUE); virtual void * GetWriteDataPtr(); //-------------------------------------------- // Convertion from / to string virtual CKERROR SetStringValue(CKSTRING Value); virtual int GetStringValue(CKSTRING Value,CKBOOL update = TRUE); //-------------------------------------------- // Type CKParameterType GetType(); void SetType(CKParameterType type); CKGUID GetGUID(); void SetGUID(CKGUID guid); CK_CLASSID GetParameterClassID(); //-------------------------------------------- // Owner virtual void SetOwner(CKObject *o); CKObject * GetOwner(); // Virtual added for Fixed Size parameter support virtual void CheckClass(CKParameterTypeDesc* iType); //-------------------------------------------- // Disabled parameters in behaviors //------------------------------------------------------------------- #ifdef DOCJETDUMMY // Docjet secret macro #else void Enable(CKBOOL act=TRUE); CKBOOL IsEnabled(); //-------------------------------------------- // Virtual functions CKParameter(CKContext *Context,CKSTRING name = NULL); virtual ~CKParameter(); virtual CK_CLASSID GetClassID(); virtual void PreSave(CKFile *file,CKDWORD flags); virtual CKStateChunk *Save(CKFile *file,CKDWORD flags); virtual CKERROR Load(CKStateChunk *chunk,CKFile* file); virtual void CheckPostDeletion(); virtual int GetMemoryOccupation(); virtual int IsObjectUsed(CKObject* o,CK_CLASSID cid); //-------------------------------------------- // Dependencies Functions virtual CKERROR PrepareDependencies(CKDependenciesContext& context, CKBOOL iCaller = TRUE); virtual CKERROR RemapDependencies(CKDependenciesContext& context); virtual CKERROR Copy(CKObject& o,CKDependenciesContext& context); //-------------------------------------------- // Class Registering static CKSTRING GetClassName(); static int GetDependenciesCount(int mode); static CKSTRING GetDependencies(int i,int mode); static void Register(); static CKParameter* CreateInstance(CKContext *Context); static void ReleaseInstance(CKContext* iContext,CKParameter*); static CK_CLASSID m_ClassID; // Dynamic Cast method (returns NULL if the object can't be casted) static CKParameter* Cast(CKObject* iO) { return CKIsChildClassOf(iO,CKCID_PARAMETER)?(CKParameter*)iO:NULL; } CKERROR CreateDefaultValue(); void MessageDeleteAfterUse(CKBOOL act); CKParameterTypeDesc* GetParameterType() { return m_ParamType; } CKBOOL IsCandidateForFixedSize(CKParameterTypeDesc* iType); protected: CKObject* m_Owner; CKParameterTypeDesc* m_ParamType; #ifdef PSP unsigned short m_DataSize; unsigned short m_AllocatedSize; #else union{ int m_DataSize; int m_AllocatedSize; }; #endif union { CKBYTE* m_Buffer; CKDWORD m_Value; }; friend void CK_ParameterCopier_Memcpy(CKParameter* Dst,CKParameter* Src); friend void CK_ParameterCopier_SaveLoad(CKParameter* Dst,CKParameter* Src); friend void CK_ParameterCopier_SetValue(CKParameter* Dst,CKParameter* Src); friend void CK_ParameterCopier_Dword(CKParameter* Dst,CKParameter* Src); friend void CK_ParameterCopier_BufferCompatibleWithDWORD(CKParameter* Dst,CKParameter* Src); friend void CKObjectArrayRemapfunc (CKParameter *param,CKDependenciesContext&); friend void CKObjectRemapFunc (CKParameter *param,CKDependenciesContext&); friend void CKStructRemapFunc (CKParameter *param,CKDependenciesContext&); #endif // docjet secret macro }; #endif