//{ 
//(
// cmCtx_t is used to hold application supplied cmRpt_t, cmErr_t and
// other global values for easy distribution throughtout a cm based application.
//
//  Most the libcm components need at least an application supplied cmRpt_t function
//  to initialize their own internal cmErr_t error class.  Likewise classes which
//  use a cmLHeapH_t based internal heap manager require application wide memory 
// manager configuration information.  The cmCtx_t packages this information and
// allows it to be easily distributed.  The applicaton and its constituent objects
// then need only maintain and pass pointers to a single cmCtx_t object to have access to 
// all the global program information.
//)

#ifndef cmCtx_h
#define cmCtx_h

#ifdef __cplusplus
extern "C" {
#endif

  //(

  // cmCtx_t data type.
  typedef struct
  {
    cmRpt_t  rpt;           // Application supplied global reporter. This reporter is also use by \ref err.
    cmErr_t  err;           // Application error reporter which can be used to report errors prior to the client object being initialized to the point where it can use it's own cmErr_t.
    unsigned guardByteCnt;  // Guard byte count in use by \ref cmMallocDebug.h .
    unsigned alignByteCnt;  // Align byte count used by the \ref cmMallocDebug.h
    unsigned mmFlags;       // Initialization flags used by \ref cmMallocDebug.h.
    void*    userDefPtr;    // Application defined pointer.
  } cmCtx_t;

  // cmCtx_t initialization function.
  void cmCtxSetup( 
    cmCtx_t*         ctx,         // The cmCtx_t to initialize.
    const cmChar_t*  title,       //  The cmCtx_t error label. See cmErrSetup().
    cmRptPrintFunc_t prtFunc,     //  The printFunc() to assign to the cmCtx_t.rpt.
    cmRptPrintFunc_t errFunc,     //  The errFunc() to assign to cmCtx_t.rpt.
    void*            cbPtr,       //  Callback data to use with prtFunc() and errFunc().
    unsigned         guardByteCnt,//  Guard byte count used to configure \ref cmMallocDebug.h
    unsigned         alignByteCnt,//  Align byte count used to configure \ref cmMallocDebug.h
    unsigned         mmFlags      //  Initialization flags used to configure \ref cmMallocDebug.h
                   );
  //)
  //}

#ifdef __cplusplus
}
#endif

#endif
