Miscelaneous utility classes.


Namespaces

namespace  comet::detail
namespace  comet::invariant_lock_impl
namespace  comet::impl
 Namespace for comet implementation details.

Classes

class  comet::array_t< T, SZ >
class  comet::auto_buffer_t< T >
class  comet::cmd_line_parser
struct  comet::dateonly_t
 Wrapper for a date only class. More...
struct  comet::parameter_type< T >
struct  comet::parameter_types< LIST >
class  comet::functor_impl< R, LIST >
class  comet::functor< R, LIST >
class  comet::lw_lock
class  comet::auto_reader_lock
class  comet::auto_writer_lock
class  comet::reference_count
 Simple reference counter. More...
class  comet::auto_buffer_t< T >
struct  comet::parameter_types< LIST >
struct  comet::functor_impl_aux
struct  comet::functor_handler
struct  comet::memfun_handler
class  comet::functor_impl< R, LIST >
class  comet::functor< R, LIST >
class  comet::chainer
class  comet::binder_first
class  comet::auto_reader_lock
class  comet::auto_writer_lock

Defines

#define COMET_PARTIAL_NAME(name)   X
#define COMET_PARTIAL_NS   ::X
#define COMET_DEFINE_PARTIAL(X1, X2, name)
#define COMET_SPECIALISE_PARTIAL(SX1, X2, name)
#define COMET_DEFINE_PARTIAL2(X1, X2, X3, name)
#define COMET_SPECIALISE_PARTIAL2(SX1, X2, X3, name)
#define COMET_DEFINE_PARTIAL3(X1, X2, X3, X4, name)
#define COMET_SPECIALISE_PARTIAL3(SX1, X2, X3, X4, name)
#define COMET_CLOSE_PARTIAL()   };

Typedefs

typedef invariant_lock_impl::invariant_lockcomet::invariant_lock
typedef const impl::scope_guard_impl_base & comet::scope_guard

Functions

 comet::COMET_DEFINE_PARTIAL2 (int L, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (0, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (1, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (2, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (3, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (4, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (5, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (6, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (7, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (8, typename R, typename LIST, functor_impl_aux)
 COMET_SPECIALISE_PARTIAL2 (9, typename R, typename LIST, functor_impl_aux)
 COMET_DEFINE_PARTIAL2 (typename RT, typename PF, typename FUN, functor_handler)
 COMET_SPECIALISE_PARTIAL2 (void, typename PF, typename FUN, functor_handler)
 COMET_DEFINE_PARTIAL3 (typename RT, typename PF, typename OBJ_PTR, typename MEMFN_PTR, memfun_handler)
 COMET_SPECIALISE_PARTIAL3 (void, typename PF, typename OBJ_PTR, typename MEMFN_PTR, memfun_handler)
 comet::COMET_DEFINE_PARTIAL (typename R, typename LIST, functor_operators)
 COMET_SPECIALISE_PARTIAL (void, typename LIST, functor_operators)
 COMET_DEFINE_PARTIAL (typename R, typename LIST, chainer)
 comet::COMET_SPECIALISE_PARTIAL (void, typename LIST, chainer)
 COMET_DEFINE_PARTIAL (typename R, typename LIST, binder_first)
 COMET_SPECIALISE_PARTIAL (void, typename LIST, binder_first)
template<typename R, typename LIST> functor< R, LIST > comet::chainer::chain (const functor< R, LIST > &fun1, const functor< R, LIST > &fun2)
template<typename CLASS> invariant_lock_impl::enforcer<
CLASS > 
comet::invariant_lock_impl::invariant_lock::create_invariant_lock (const CLASS *pobj, void(CLASS::*assert_member)() const)
template<typename CLASS> invariant_lock_impl::simple_enforcer<
CLASS > 
comet::invariant_lock_impl::invariant_lock::create_invariant_lock (const CLASS *pobj)

Define Documentation

#define COMET_DEFINE_PARTIAL X1,
X2,
name   ) 
 

Value:

template < X1 > struct name\ { \ template < X2 > class X

#define COMET_DEFINE_PARTIAL2 X1,
X2,
X3,
name   ) 
 

Value:

template < X1 > struct name\ { \ template < X2, X3 > class X

#define COMET_DEFINE_PARTIAL3 X1,
X2,
X3,
X4,
name   ) 
 

Value:

template < X1 > struct name\ { \ template < X2, X3, X4 > class X

#define COMET_SPECIALISE_PARTIAL SX1,
X2,
name   ) 
 

Value:

template <> struct name<SX1>\ { \ template < X2 > class X

#define COMET_SPECIALISE_PARTIAL2 SX1,
X2,
X3,
name   ) 
 

Value:

template <> struct name<SX1>\ { \ template < X2, X3 > class X

#define COMET_SPECIALISE_PARTIAL3 SX1,
X2,
X3,
X4,
name   ) 
 

Value:

template <> struct name<SX1>\ { \ template < X2, X3, X4 > class X


Typedef Documentation

typedef invariant_lock_impl::invariant_lock& comet::invariant_lock
 

Pointer class to an invariant_lock. Assigning a temporary to a const reference will cause the object to be kept for the scope of the const reference.

See also:
create_invariant_lock
Author:
Paul Hollingsworth (Paul@PaulHollingsworth.com)

typedef const impl::scope_guard_impl_base& comet::scope_guard
 

Pointer to a scope guard. Relies on const references holding on to an assigned stack object for the scope of the reference.

See also:
scope_guard_impl_0 obj_scope_guard_impl_0 scope_guard_impl_1 obj_scope_guard_impl_1 scope_guard_impl_2 obj_scope_guard_impl_2


Function Documentation

template<typename R, typename LIST>
functor< R, LIST > chain const functor< R, LIST > &  fun1,
const functor< R, LIST > &  fun2
[related, inherited]
 

Chains fun1 to fun2.

Returns:
functor chaining fun1 to fun2

COMET_DEFINE_PARTIAL typename  R,
typename  LIST,
functor_operators 
 

Provide various operator() versions to call the virtual functor. This is Effectively paritally specialised to return type (for void implementation).

Parameters:
R Return type.
LIST argument list.

COMET_DEFINE_PARTIAL2 int  L,
typename  R,
typename  LIST,
functor_impl_aux 
 

Virtual override to call the function.

Parameters:
arguments Whatever arguments provided by LIST
Returns:
Return type is R

Clone the functor. (easiest way of managing memory - should only be a light implementation anyway).

Provide virtual destruction.

COMET_SPECIALISE_PARTIAL void  ,
typename  LIST,
chainer 
 

Specialisation for void.

template<typename CLASS>
invariant_lock_impl::simple_enforcer< CLASS > create_invariant_lock const CLASS *  pobj  )  [related, inherited]
 

Create a simple invariant lock. This lock will expect assert_valid to be publicly defined on the object provided.

Parameters:
pobj The class with the invariant assert.
See also:
simple_enforcer
Author:
Paul Hollingsworth (Paul@PaulHollingsworth.com)

template<typename CLASS>
invariant_lock_impl::enforcer< CLASS > create_invariant_lock const CLASS *  pobj,
void(CLASS::*  assert_member)() const
[related, inherited]
 

Create an invariant_lock.

Parameters:
pobj The class with the invariant assert
assert_member The void member to call on construct & destruct
Author:
Paul Hollingsworth (Paul@PaulHollingsworth.com)
See also:
enforcer