00001 #ifndef __UPF_CXX_ARGS_OBJ_H__
00002 #define __UPF_CXX_ARGS_OBJ_H__
00003
00004
00005 namespace upf
00006 {
00007
00008
00009 inline Arguments& operator<<(Arguments& holder, IObject* obj)
00010 {
00011 upf_Object *value = obj ? obj->_upf_getABIObject() : NULL;
00012 holder.write(&value, sizeof(value));
00013
00014
00015 if (value) value->refCnt++;
00016 return holder;
00017 }
00018
00019 template<class T>
00020 inline Arguments& operator>>(Arguments& holder, ::upf::Ptr<T>& obj)
00021 {
00022 upf_Object *value;
00023 holder.read(&value, sizeof(value));
00024 obj = value ? _makeCxxObject<T>(value) : (T*)NULL;
00025
00026 if (value) value->refCnt--;
00027 return holder;
00028 }
00029
00030 }
00031
00032
00033 #endif