blocxx
ScopeGuard.hpp File Reference
#include "blocxx/BLOCXX_config.h"
#include "blocxx/RefToValue.hpp"

Go to the source code of this file.

Classes

class  BLOCXX_NAMESPACE::ScopeGuardImplBase
 
class  BLOCXX_NAMESPACE::ScopeGuardImpl0< F >
 
class  BLOCXX_NAMESPACE::ScopeGuardImpl1< F, P1 >
 
class  BLOCXX_NAMESPACE::ScopeGuardImpl2< F, P1, P2 >
 
class  BLOCXX_NAMESPACE::ScopeGuardImpl3< F, P1, P2, P3 >
 
class  BLOCXX_NAMESPACE::ObjScopeGuardImpl0< Obj, MemFun >
 
class  BLOCXX_NAMESPACE::ObjScopeGuardImpl1< Obj, MemFun, P1 >
 
class  BLOCXX_NAMESPACE::ObjScopeGuardImpl2< Obj, MemFun, P1, P2 >
 

Namespaces

namespace  BLOCXX_NAMESPACE
 Taken from RFC 1321.
 

Macros

#define BLOCXX_CONCATENATE_DIRECT(s1, s2)
 
#define BLOCXX_CONCATENATE(s1, s2)
 
#define BLOCXX_ANONYMOUS_VARIABLE(str)
 
#define BLOCXX_ON_BLOCK_EXIT   blocxx::ScopeGuard BLOCXX_ANONYMOUS_VARIABLE(scopeGuard) = blocxx::makeGuard
 
#define BLOCXX_ON_BLOCK_EXIT_OBJ   blocxx::ScopeGuard BLOCXX_ANONYMOUS_VARIABLE(scopeGuard) = blocxx::makeObjGuard
 

Typedefs

typedef const ScopeGuardImplBaseBLOCXX_NAMESPACE::ScopeGuard
 See Andrei's and Petru Marginean's CUJ article http://www.cuj.com/documents/s=8000/cujcexp1812alexandr/alexandr.htm.
 

Functions

template<typename F >
ScopeGuardImpl0< FBLOCXX_NAMESPACE::makeGuard (F fun)
 
template<typename F , typename P1 >
ScopeGuardImpl1< F, P1 > BLOCXX_NAMESPACE::makeGuard (F fun, P1 p1)
 
template<typename F , typename P1 , typename P2 >
ScopeGuardImpl2< F, P1, P2 > BLOCXX_NAMESPACE::makeGuard (F fun, P1 p1, P2 p2)
 
template<typename F , typename P1 , typename P2 , typename P3 >
ScopeGuardImpl3< F, P1, P2, P3 > BLOCXX_NAMESPACE::makeGuard (F fun, P1 p1, P2 p2, P3 p3)
 
template<class Obj , typename MemFun >
ObjScopeGuardImpl0< Obj, MemFun > BLOCXX_NAMESPACE::makeObjGuard (Obj &obj, MemFun memFun)
 
template<typename Ret , class Obj1 , class Obj2 >
ObjScopeGuardImpl0< Obj1, Ret(Obj2::*)()> BLOCXX_NAMESPACE::makeGuard (Ret(Obj2::*memFun)(), Obj1 &obj)
 
template<typename Ret , class Obj1 , class Obj2 >
ObjScopeGuardImpl0< Obj1, Ret(Obj2::*)()> BLOCXX_NAMESPACE::makeGuard (Ret(Obj2::*memFun)(), Obj1 *obj)
 
template<class Obj , typename MemFun , typename P1 >
ObjScopeGuardImpl1< Obj, MemFun, P1 > BLOCXX_NAMESPACE::makeObjGuard (Obj &obj, MemFun memFun, P1 p1)
 
template<typename Ret , class Obj1 , class Obj2 , typename P1a , typename P1b >
ObjScopeGuardImpl1< Obj1, Ret(Obj2::*)(P1a), P1b > BLOCXX_NAMESPACE::makeGuard (Ret(Obj2::*memFun)(P1a), Obj1 &obj, P1b p1)
 
template<typename Ret , class Obj1 , class Obj2 , typename P1a , typename P1b >
ObjScopeGuardImpl1< Obj1, Ret(Obj2::*)(P1a), P1b > BLOCXX_NAMESPACE::makeGuard (Ret(Obj2::*memFun)(P1a), Obj1 *obj, P1b p1)
 
template<class Obj , typename MemFun , typename P1 , typename P2 >
ObjScopeGuardImpl2< Obj, MemFun, P1, P2 > BLOCXX_NAMESPACE::makeObjGuard (Obj &obj, MemFun memFun, P1 p1, P2 p2)
 
template<typename Ret , class Obj1 , class Obj2 , typename P1a , typename P1b , typename P2a , typename P2b >
ObjScopeGuardImpl2< Obj1, Ret(Obj2::*)(P1a, P2a), P1b, P2b > BLOCXX_NAMESPACE::makeGuard (Ret(Obj2::*memFun)(P1a, P2a), Obj1 &obj, P1b p1, P2b p2)
 
template<typename Ret , class Obj1 , class Obj2 , typename P1a , typename P1b , typename P2a , typename P2b >
ObjScopeGuardImpl2< Obj1, Ret(Obj2::*)(P1a, P2a), P1b, P2b > BLOCXX_NAMESPACE::makeGuard (Ret(Obj2::*memFun)(P1a, P2a), Obj1 *obj, P1b p1, P2b p2)
 

Macro Definition Documentation

◆ BLOCXX_ANONYMOUS_VARIABLE

#define BLOCXX_ANONYMOUS_VARIABLE ( str)
Value:
BLOCXX_CONCATENATE(str, __LINE__)
#define BLOCXX_CONCATENATE(s1, s2)

Definition at line 386 of file ScopeGuard.hpp.

◆ BLOCXX_CONCATENATE

#define BLOCXX_CONCATENATE ( s1,
s2 )
Value:
#define BLOCXX_CONCATENATE_DIRECT(s1, s2)

Definition at line 385 of file ScopeGuard.hpp.

◆ BLOCXX_CONCATENATE_DIRECT

#define BLOCXX_CONCATENATE_DIRECT ( s1,
s2 )
Value:
s1##s2

Definition at line 384 of file ScopeGuard.hpp.

◆ BLOCXX_ON_BLOCK_EXIT

#define BLOCXX_ON_BLOCK_EXIT   blocxx::ScopeGuard BLOCXX_ANONYMOUS_VARIABLE(scopeGuard) = blocxx::makeGuard

Definition at line 388 of file ScopeGuard.hpp.

◆ BLOCXX_ON_BLOCK_EXIT_OBJ

#define BLOCXX_ON_BLOCK_EXIT_OBJ   blocxx::ScopeGuard BLOCXX_ANONYMOUS_VARIABLE(scopeGuard) = blocxx::makeObjGuard

Definition at line 389 of file ScopeGuard.hpp.