protectorchain.cpp

来自「这是国外的resip协议栈」· C++ 代码 · 共 87 行

CPP
87
字号
#include "ProtectorChain.h"CPPUNIT_NS_BEGINclass ProtectorChain::ProtectFunctor : public Functor{public:  ProtectFunctor( Protector *protector,                  const Functor &functor,                  const ProtectorContext &context )      : m_protector( protector )      , m_functor( functor )      , m_context( context )  {  }  bool operator()() const  {    return m_protector->protect( m_functor, m_context );  }private:  Protector *m_protector;  const Functor &m_functor;  const ProtectorContext &m_context;};ProtectorChain::~ProtectorChain(){  while ( count() > 0 )    pop();}void ProtectorChain::push( Protector *protector ){  m_protectors.push_back( protector );}void ProtectorChain::pop(){  delete m_protectors.back();  m_protectors.pop_back();}int ProtectorChain::count() const{  return m_protectors.size();}bool ProtectorChain::protect( const Functor &functor,                         const ProtectorContext &context ){  if ( m_protectors.empty() )    return functor();  Functors functors;  for ( int index = m_protectors.size()-1; index >= 0; --index )  {    const Functor &protectedFunctor =               functors.empty() ? functor : *functors.back();    functors.push_back( new ProtectFunctor( m_protectors[index],                                            protectedFunctor,                                             context ) );  }  const Functor &outermostFunctor = *functors.back();  bool succeed = outermostFunctor();  for ( unsigned int deletingIndex = 0; deletingIndex < m_protectors.size(); ++deletingIndex )    delete functors[deletingIndex];  return succeed;}CPPUNIT_NS_END

⌨️ 快捷键说明

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