#ifndef mslk_utility_h_12345
#define mslk_utility_h_12345
#include
#include
#include
#include
#include
Namespace detail {/// support smart_ptr
Template
Struct serialzeelem // Pointer
{
Template
Static Void Do_write (CARCHIVE & AR, T Const & OP)
{
COBJECT * POB = Dynamic_cast
askERT (NULL! = POB);
Ar << POB;
}
Template
Static Void Do_read (Carchive & Ar, T & OP)
{
COBJECT * POB = NULL;
AR >> POB;
Op = Dynamic_cast
Assert (null! = OP);
}
}
Template <>
Struct serialzeelem
{
Template
Static Void Do_write (CARCHIVE & AR, T Const & SP)
{
COBJECT * POB = Dynamic_cast
askERT (NULL! = POB);
Ar << POB;
}
Template
Static Void Do_read (Carchive & Ar, T & SP)
{
COBJECT * POB = NULL;
AR >> POB;
T :: Element_Type * P = Dynamic_cast
Assert (null! = p);
SP = T (P);
}
}
} // end: detail
// 10.26 Update: Add feature, support element type set for smart_ptr
// universal object pointer Serialize
Template
Void CommonObjectPointercollectSerialize (CARCHIVE & Ar, T & Refanydatacolect)
{
DWORD DWCOUNT;
IF (ar.isstoring ())
{
DWCount = refanydatacollect.size ();
Ar << dwcount;
Assert (dwcount> = 0);
T :: Iterator itbeg (Refanydatacolect.begin ()), ITEND (Refanydatacolect.end ()); for (; itbeg! = Ity; iTBEG)
{
SW :: Detail :: Serialzeelem
}
}
Else
{
DWCOUNT;
Assert (dwcount> = 0);
While (dwcount--)
{
T :: value_type v;
Sw :: detail :: serialzeelem
REFANYDATACOLLECT.PUSH_BACK (V);
}
}
}
#ENDIF / / MSLK_UTILITY_H_12345