objhook.cpp

来自「ncbi源码」· C++ 代码 · 共 608 行 · 第 1/2 页

CPP
608
字号
{    m_Stream.m_Copier = stream;    if ( stream ) {        info.SetLocalCopyHook(*stream, &hook);    }    else {        info.SetGlobalCopyHook(&hook);    }}CObjectHookGuardBase::CObjectHookGuardBase(const CObjectTypeInfo& info,                                           const string& id,                                           CReadClassMemberHook& hook,                                           CObjectIStream* stream)    : m_Hook(&hook),      m_HookMode(eHook_Read),      m_HookType(eHook_Member),      m_Id(id){    m_Stream.m_IStream = stream;    CObjectTypeInfoMI member = info.FindMember(id);    if ( stream ) {        member.SetLocalReadHook(*stream, &hook);    }    else {        member.SetGlobalReadHook(&hook);    }}CObjectHookGuardBase::CObjectHookGuardBase(const CObjectTypeInfo& info,                                           const string& id,                                           CWriteClassMemberHook& hook,                                           CObjectOStream* stream)    : m_Hook(&hook),      m_HookMode(eHook_Write),      m_HookType(eHook_Member),      m_Id(id){    m_Stream.m_OStream = stream;    CObjectTypeInfoMI member = info.FindMember(id);    if ( stream ) {        member.SetLocalWriteHook(*stream, &hook);    }    else {        member.SetGlobalWriteHook(&hook);    }}CObjectHookGuardBase::CObjectHookGuardBase(const CObjectTypeInfo& info,                                           const string& id,                                           CSkipClassMemberHook& hook,                                           CObjectIStream* stream)    : m_Hook(&hook),      m_HookMode(eHook_Skip),      m_HookType(eHook_Member),      m_Id(id){    m_Stream.m_IStream = stream;    CObjectTypeInfoMI member = info.FindMember(id);    if ( stream ) {        member.SetLocalSkipHook(*stream, &hook);    }    else {        member.SetGlobalSkipHook(&hook);    }}CObjectHookGuardBase::CObjectHookGuardBase(const CObjectTypeInfo& info,                                           const string& id,                                           CCopyClassMemberHook& hook,                                           CObjectStreamCopier* stream)    : m_Hook(&hook),      m_HookMode(eHook_Copy),      m_HookType(eHook_Member),      m_Id(id){    m_Stream.m_Copier = stream;    CObjectTypeInfoMI member = info.FindMember(id);    if ( stream ) {        member.SetLocalCopyHook(*stream, &hook);    }    else {        member.SetGlobalCopyHook(&hook);    }}CObjectHookGuardBase::CObjectHookGuardBase(const CObjectTypeInfo& info,                                           const string& id,                                           CReadChoiceVariantHook& hook,                                           CObjectIStream* stream)    : m_Hook(&hook),      m_HookMode(eHook_Read),      m_HookType(eHook_Variant),      m_Id(id){    m_Stream.m_IStream = stream;    CObjectTypeInfoVI variant = info.FindVariant(id);    if ( stream ) {        variant.SetLocalReadHook(*stream, &hook);    }    else {        variant.SetGlobalReadHook(&hook);    }}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);    }}CObjectHookGuardBase::CObjectHookGuardBase(const CObjectTypeInfo& info,                                           const string& id,                                           CSkipChoiceVariantHook& hook,                                           CObjectIStream* stream)    : m_Hook(&hook),      m_HookMode(eHook_Skip),      m_HookType(eHook_Variant),      m_Id(id){    m_Stream.m_IStream = stream;    CObjectTypeInfoVI variant = info.FindVariant(id);    if ( stream ) {        variant.SetLocalSkipHook(*stream, &hook);    }    else {        variant.SetGlobalSkipHook(&hook);    }}CObjectHookGuardBase::CObjectHookGuardBase(const CObjectTypeInfo& info,                                           const string& id,                                           CCopyChoiceVariantHook& hook,                                           CObjectStreamCopier* stream)    : m_Hook(&hook),      m_HookMode(eHook_Copy),      m_HookType(eHook_Variant),      m_Id(id){    m_Stream.m_Copier = stream;    CObjectTypeInfoVI variant = info.FindVariant(id);    if ( stream ) {        variant.SetLocalCopyHook(*stream, &hook);    }    else {        variant.SetGlobalCopyHook(&hook);    }}CObjectHookGuardBase::~CObjectHookGuardBase(void){    _ASSERT(m_HookMode == eHook_None);    _ASSERT(m_HookType == eHook_Null);}void CObjectHookGuardBase::ResetHook(const CObjectTypeInfo& info){    switch (m_HookType) {    case eHook_Object:        switch (m_HookMode) {        case eHook_Read:            if ( m_Stream.m_IStream ) {                info.ResetLocalReadHook(*m_Stream.m_IStream);            }            else {                info.ResetGlobalReadHook();            }            break;        case eHook_Write:            if ( m_Stream.m_OStream ) {                info.ResetLocalWriteHook(*m_Stream.m_OStream);            }            else {                info.ResetGlobalWriteHook();            }            break;        case eHook_Skip:            if ( m_Stream.m_IStream ) {                info.ResetLocalSkipHook(*m_Stream.m_IStream);            }            else {                info.ResetGlobalSkipHook();            }            break;        case eHook_Copy:            if ( m_Stream.m_Copier ) {                info.ResetLocalCopyHook(*m_Stream.m_Copier);            }            else {                info.ResetGlobalCopyHook();            }            break;        }        break;    case eHook_Member:    {        CObjectTypeInfoMI member = info.FindMember(m_Id);        switch (m_HookMode) {        case eHook_Read:            if ( m_Stream.m_IStream ) {                member.ResetLocalReadHook(*m_Stream.m_IStream);            }            else {                member.ResetGlobalReadHook();            }            break;        case eHook_Write:            if ( m_Stream.m_OStream ) {                member.ResetLocalWriteHook(*m_Stream.m_OStream);            }            else {                member.ResetGlobalWriteHook();            }            break;        case eHook_Skip:            if ( m_Stream.m_IStream ) {                member.ResetLocalSkipHook(*m_Stream.m_IStream);            }            else {                member.ResetGlobalSkipHook();            }            break;        case eHook_Copy:            if ( m_Stream.m_Copier ) {                member.ResetLocalCopyHook(*m_Stream.m_Copier);            }            else {                member.ResetGlobalCopyHook();            }            break;        }        break;    }    case eHook_Variant:    {        CObjectTypeInfoVI variant = info.FindVariant(m_Id);        switch (m_HookMode) {        case eHook_Read:            if ( m_Stream.m_IStream ) {                variant.ResetLocalReadHook(*m_Stream.m_IStream);            }            else {                variant.ResetGlobalReadHook();            }            break;        case eHook_Write:            if ( m_Stream.m_OStream ) {                variant.ResetLocalWriteHook(*m_Stream.m_OStream);            }            else {                variant.ResetGlobalWriteHook();            }            break;        case eHook_Skip:            if ( m_Stream.m_IStream ) {                variant.ResetLocalSkipHook(*m_Stream.m_IStream);            }            else {                variant.ResetGlobalSkipHook();            }            break;        case eHook_Copy:            if ( m_Stream.m_Copier ) {                variant.ResetLocalCopyHook(*m_Stream.m_Copier);            }            else {                variant.ResetGlobalCopyHook();            }            break;        }        break;    }    case eHook_Element:        break;    }    m_HookMode = eHook_None;    m_HookType = eHook_Null;}END_NCBI_SCOPE

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?