CObjectHookGuardBase::CObjectHookGuardBase(const CObjectTypeInfo& info, const string& id, CWriteChoiceVariantHook& hook, CObjectOStream* stream) : m_Hook(&hook), m_HookMode(eHook_Write), m_HookType(eHook_Variant), m_Id(id) { m_Stream.m_OStream = stream; CObjectTypeInfoVI variant = info.FindVariant(id); if ( stream ) { variant.SetLocalWriteHook(*stream, &hook); } else { variant.SetGlobalWriteHook(&hook); } }
int main(int argc, char** argv) { auto_ptr<CObjectIStream> in(CObjectIStream::Open(eSerial_AsnText, "if")); auto_ptr<CObjectOStream> out(CObjectOStream::Open(eSerial_AsnText, "of")); CObjectTypeInfo typeInfo = CType<CAuth_list>(); CObjectTypeInfoMI memberInfo = typeInfo.FindMember("names"); CObjectTypeInfoVI variantInfo = (*memberInfo).GetPointedType() .FindVariant("std"); variantInfo.SetLocalWriteHook(*out, new CDemoHook); (*CObjectTypeInfo(CType<CAuth_list>()).FindMember("names")) .GetPointedType() .FindVariant("std") .SetLocalWriteHook(*out, new CDemoHook); CCit_art article; *in >> article; *out << article; return 0; }