You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							443 lines
						
					
					
						
							18 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							443 lines
						
					
					
						
							18 KiB
						
					
					
				
								/* /////////////////////////////////////////////////////////////////////////
							 | 
						|
								 * File:        pantheios/backend.h
							 | 
						|
								 *
							 | 
						|
								 * Purpose:     Pantheios back end API
							 | 
						|
								 *
							 | 
						|
								 * Created:     21st June 2005
							 | 
						|
								 * Updated:     26th November 2010
							 | 
						|
								 *
							 | 
						|
								 * Home:        http://www.pantheios.org/
							 | 
						|
								 *
							 | 
						|
								 * Copyright (c) 2005-2010, Matthew Wilson and Synesis Software
							 | 
						|
								 * Copyright (c) 1999-2005, Synesis Software and Matthew Wilson
							 | 
						|
								 * All rights reserved.
							 | 
						|
								 *
							 | 
						|
								 * Redistribution and use in source and binary forms, with or without
							 | 
						|
								 * modification, are permitted provided that the following conditions are
							 | 
						|
								 * met:
							 | 
						|
								 *
							 | 
						|
								 * - Redistributions of source code must retain the above copyright notice,
							 | 
						|
								 *   this list of conditions and the following disclaimer.
							 | 
						|
								 * - Redistributions in binary form must reproduce the above copyright
							 | 
						|
								 *   notice, this list of conditions and the following disclaimer in the
							 | 
						|
								 *   documentation and/or other materials provided with the distribution.
							 | 
						|
								 * - Neither the name(s) of Matthew Wilson and Synesis Software nor the
							 | 
						|
								 *   names of any contributors may be used to endorse or promote products
							 | 
						|
								 *   derived from this software without specific prior written permission.
							 | 
						|
								 *
							 | 
						|
								 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
							 | 
						|
								 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
							 | 
						|
								 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
							 | 
						|
								 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
							 | 
						|
								 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
							 | 
						|
								 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
							 | 
						|
								 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
							 | 
						|
								 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
							 | 
						|
								 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
							 | 
						|
								 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
							 | 
						|
								 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
							 | 
						|
								 *
							 | 
						|
								 * ////////////////////////////////////////////////////////////////////// */
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/** \file pantheios/backend.h
							 | 
						|
								 *
							 | 
						|
								 * [C, C++] Definition of the \ref group__backend.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								#ifndef PANTHEIOS_INCL_PANTHEIOS_H_BACKEND
							 | 
						|
								#define PANTHEIOS_INCL_PANTHEIOS_H_BACKEND
							 | 
						|
								
							 | 
						|
								/* /////////////////////////////////////////////////////////////////////////
							 | 
						|
								 * Version information
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								#ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
							 | 
						|
								# define PANTHEIOS_VER_PANTHEIOS_H_BACKEND_MAJOR      3
							 | 
						|
								# define PANTHEIOS_VER_PANTHEIOS_H_BACKEND_MINOR      11
							 | 
						|
								# define PANTHEIOS_VER_PANTHEIOS_H_BACKEND_REVISION   1
							 | 
						|
								# define PANTHEIOS_VER_PANTHEIOS_H_BACKEND_EDIT       31
							 | 
						|
								#endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
							 | 
						|
								
							 | 
						|
								/* /////////////////////////////////////////////////////////////////////////
							 | 
						|
								 * Includes
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								#ifndef PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS
							 | 
						|
								# include <pantheios/pantheios.h>
							 | 
						|
								#endif /* !PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS */
							 | 
						|
								
							 | 
						|
								/* /////////////////////////////////////////////////////////////////////////
							 | 
						|
								 * Back-end API
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \defgroup group__backend Pantheios Back-end API
							 | 
						|
								 *
							 | 
						|
								 * The Pantheios back-end API describes the required functionality of a back-end
							 | 
						|
								 * library. The back-end is responsible solely for translating the log entry -
							 | 
						|
								 * severity indicator + length-specified, nul-terminated string - into output,
							 | 
						|
								 * as appropriate to its implementation.
							 | 
						|
								 *
							 | 
						|
								 * There are several stock back-ends supplied with the Pantheios distribution
							 | 
						|
								 * (http://pantheios.org/), providing logging to stderr (using \c fprintf()),
							 | 
						|
								 * SysLog (using UNIX syslog(), or an emulation library on Windows), Windows
							 | 
						|
								 * Debugger, ACE output. You may also supply your own back-end by implementing
							 | 
						|
								 * the three simple functions of the API: pantheios_be_init(),
							 | 
						|
								 * pantheios_be_uninit(), and pantheios_be_logEntry().
							 | 
						|
								 *
							 | 
						|
								 * @{
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \defgroup group__backend__stock_backends Pantheios Stock Back-ends
							 | 
						|
								 *
							 | 
						|
								 * \ingroup group__backend
							 | 
						|
								 *
							 | 
						|
								 *  Pre-built back-ends supplied with the Pantheios library
							 | 
						|
								 *
							 | 
						|
								 * Pantheios comes with several pre-written stock back-end libraries, which
							 | 
						|
								 * cover most common needs for diagnostic logging. They also serve as good
							 | 
						|
								 * examples of how to write a custom back-end.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \defgroup group__backend__stock_ids Pantheios Stock Back-end Ids
							 | 
						|
								 *
							 | 
						|
								 * \ingroup group__backend
							 | 
						|
								 *
							 | 
						|
								 *  Stock back-end identifiers used by the Pantheios back-end
							 | 
						|
								 *   libraries.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BEID_ALL
							 | 
						|
								 *
							 | 
						|
								 * \ingroup group__backend__stock_ids
							 | 
						|
								 *
							 | 
						|
								 *  Indicates that the operation/query applies to all back-ends
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								#define PANTHEIOS_BEID_ALL                      (0)
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BEID_LOCAL
							 | 
						|
								 *
							 | 
						|
								 * \ingroup group__backend__stock_ids
							 | 
						|
								 *
							 | 
						|
								 *  Identifies the local (or only) back-end in a link-unit
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								#define PANTHEIOS_BEID_LOCAL                    (1)
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BEID_REMOTE
							 | 
						|
								 *
							 | 
						|
								 * \ingroup group__backend__stock_ids
							 | 
						|
								 *
							 | 
						|
								 *  Identifies the remote back-end in a link-unit using local/remote
							 | 
						|
								 *   splitting.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								#define PANTHEIOS_BEID_REMOTE                   (2)
							 | 
						|
								
							 | 
						|
								/* /////////////////////////////////////////////////////////////////////////
							 | 
						|
								 * Constants
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \defgroup group__backend__init__flags Pantheios Back-end Initialisation Flags
							 | 
						|
								 *
							 | 
						|
								 * \ingroup group__backend
							 | 
						|
								 *
							 | 
						|
								 *  Flags for the \ref group__backend__stock_backends
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_NO_PROCESS_ID
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   omit the process identity from emitted log statements.
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_NO_THREAD_ID
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   omit the thread identity from emitted log statements.
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_NO_DATETIME
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   omit the date/time field from emitted log statements.
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_NO_SEVERITY
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   omit the severity from emitted log statements.
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_USE_SYSTEM_TIME
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   use system time, rather than local time, from emitted log statements.
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_DETAILS_AT_START
							 | 
						|
								 *  Causes the details
							 | 
						|
								 *   to be emitted at the start of the statement, rather than after the
							 | 
						|
								 *   process id, time, and so on.
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_USE_UNIX_FORMAT
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   use UNIX format for the date/time field, even on other operating
							 | 
						|
								 *   systems.
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_HIDE_DATE
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   omit the date in the date/time field (if shown).
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_HIDE_TIME
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   omit the time in the date/time field (if shown).
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_HIGH_RESOLUTION
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   favour high-resolution in the date/time field (if shown).
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_LOW_RESOLUTION
							 | 
						|
								 *  Causes the back-end to
							 | 
						|
								 *   favour low-resolution in the date/time field (if shown).
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_NO_PROCESS_ID       (0x00000001)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_NO_THREAD_ID        (0x00001000)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_NO_DATETIME         (0x00000002)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_NO_SEVERITY         (0x00000004)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_USE_SYSTEM_TIME     (0x00000008)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_DETAILS_AT_START    (0x00000010)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_USE_UNIX_FORMAT     (0x00000020)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_HIDE_DATE           (0x00000040)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_HIDE_TIME           (0x00000080)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_HIGH_RESOLUTION     (0x00000100)
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_LOW_RESOLUTION      (0x00000200)
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_COMMON_MASK
							 | 
						|
								 *  Mask of stock back-end flags.
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_INIT_F_CUSTOM_MASK
							 | 
						|
								 *  Mask of custom back-end flags.
							 | 
						|
								 * \ingroup group__backend__init__flags
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								#define PANTHEIOS_BE_INIT_F_COMMON_MASK         (0x000fffff)
							 | 
						|
								#ifdef __cplusplus
							 | 
						|
								# define PANTHEIOS_BE_INIT_F_CUSTOM_MASK        (~static_cast<int>(PANTHEIOS_BE_INIT_F_COMMON_MASK))
							 | 
						|
								#else /* ? __cplusplus */
							 | 
						|
								# define PANTHEIOS_BE_INIT_F_CUSTOM_MASK        (~((int)PANTHEIOS_BE_INIT_F_COMMON_MASK))
							 | 
						|
								#endif /* __cplusplus */
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/** Initialises the back-end API.
							 | 
						|
								 *
							 | 
						|
								 * \ingroup group__backend
							 | 
						|
								 *
							 | 
						|
								 * This function is called once by the Pantheios core library to initialise the
							 | 
						|
								 * back-end library. It passes the process identity (in the form of a
							 | 
						|
								 * nul-terminated C-style string) and a second parameter (reserved for future
							 | 
						|
								 * use; currently always has value 0), which the back-end may use in its
							 | 
						|
								 * initialisation. The third parameter is a pointer to a void*, with which the
							 | 
						|
								 * back-end may store state, to be passed back to it in the pantheios_be_logEntry()
							 | 
						|
								 * and pantheios_be_uninit() functions.
							 | 
						|
								 *
							 | 
						|
								 * \param processIdentity The identity of the process within which Pantheios is
							 | 
						|
								 * being used. Should be a meaningful human-readable string. Must not be NULL.
							 | 
						|
								 * Maximum length is limited solely by what the back-end library can accomodate.
							 | 
						|
								 * The string pointed to by this parameter may not persist after the call is
							 | 
						|
								 * complete, so the back-end should take a copy if required.
							 | 
						|
								 * \param reserved Currently reserved. Will contain 0 in the current version of
							 | 
						|
								 * the Pantheios library
							 | 
						|
								 * \param ptoken Pointer to a variable to receive the back-end token, which will
							 | 
						|
								 * be stored in the Pantheios library and passed to the pantheios_be_logEntry()
							 | 
						|
								 * and pantheios_be_uninit() functions
							 | 
						|
								 *
							 | 
						|
								 * \note This function must be defined by each back-end implementation
							 | 
						|
								 *
							 | 
						|
								 * \note This function is called at most once per process.
							 | 
						|
								 *
							 | 
						|
								 * \return A status indicating whether the back-end is initialised, and
							 | 
						|
								 * therefore whether the Pantheios library as a whole is initialised.
							 | 
						|
								 * \retval <0 Initialisation failed.
							 | 
						|
								 * \retval >=0 Initialisation succeeded
							 | 
						|
								 */
							 | 
						|
								PANTHEIOS_CALL(int) pantheios_be_init(
							 | 
						|
								    PAN_CHAR_T const*   processIdentity
							 | 
						|
								,   void*               reserved
							 | 
						|
								,   void**              ptoken
							 | 
						|
								);
							 | 
						|
								
							 | 
						|
								/** Uninitialises the back-end API.
							 | 
						|
								 *
							 | 
						|
								 * \ingroup group__backend
							 | 
						|
								 *
							 | 
						|
								 * This function is called to uninitialise the back-end library during the
							 | 
						|
								 * uninitialisation of the Pantheios core library. It is passed the value of the
							 | 
						|
								 * token stored on its behalf by the Pantheios core library.
							 | 
						|
								 *
							 | 
						|
								 * \note This function must be defined by each back-end implementation
							 | 
						|
								 *
							 | 
						|
								 * \note This function is called at most once per process.
							 | 
						|
								 *
							 | 
						|
								 * \param token The back-end token, created by the pantheios_be_init() function
							 | 
						|
								 */
							 | 
						|
								PANTHEIOS_CALL(void) pantheios_be_uninit(void* token);
							 | 
						|
								
							 | 
						|
								/** Passes a log-entry to the back-end API.
							 | 
						|
								 *
							 | 
						|
								 * \ingroup group__backend
							 | 
						|
								 *
							 | 
						|
								 * This function is called by the Pantheios core library to emit a log entry.
							 | 
						|
								 * It is passed five parameters. The \c severity, \c entry and \c cchEntry
							 | 
						|
								 * parameters describe the severity level, and the nul-terminated contents of
							 | 
						|
								 * the log entry. The \c feToken and \c beToken parameters hold the
							 | 
						|
								 * library-specific state of the front-end and back-end librarys, respectively.
							 | 
						|
								 *
							 | 
						|
								 * \note This function must be defined by each back-end implementation
							 | 
						|
								 *
							 | 
						|
								 * \note This may be called from any thread in a multi-threaded process.
							 | 
						|
								 *
							 | 
						|
								 * \param feToken The front-end token, created by the pantheios_fe_init()
							 | 
						|
								 *   function. This value does not hold any meaning to the back-end library, and
							 | 
						|
								 *   may be used only to passed back to the front-end in calls to
							 | 
						|
								 *   pantheios_fe_isSeverityLogged().
							 | 
						|
								 * \param beToken The back-end token, created by the pantheios_be_init() function
							 | 
						|
								 * \param severity The severity level.
							 | 
						|
								 * \param entry The nul-terminated string containing the entry information
							 | 
						|
								 * \param cchEntry The number of bytes in the string, not including the
							 | 
						|
								 * nul-terminating character
							 | 
						|
								 */
							 | 
						|
								PANTHEIOS_CALL(int) pantheios_be_logEntry(
							 | 
						|
								    void*               feToken
							 | 
						|
								,   void*               beToken
							 | 
						|
								,   int                 severity
							 | 
						|
								,   PAN_CHAR_T const*   entry
							 | 
						|
								,   size_t              cchEntry
							 | 
						|
								);
							 | 
						|
								
							 | 
						|
								/** @} group__backend */
							 | 
						|
								
							 | 
						|
								/* /////////////////////////////////////////////////////////////////////////
							 | 
						|
								 * Generation Macros
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_DEFINE_BE_FUNCTIONS(expr)
							 | 
						|
								 *
							 | 
						|
								 *  Back-end generation macro for the Pantheios API
							 | 
						|
								 *
							 | 
						|
								 * Generates the functions <code>pantheios_be_init()</code>,
							 | 
						|
								 * <code>pantheios_be_uninit()</code> and
							 | 
						|
								 * <code>pantheios_be_logEntry()</code> from the given back-end
							 | 
						|
								 * implementation. The given id is assumed to be common to all three
							 | 
						|
								 * back-end API functions for the given back-end implementation. In other
							 | 
						|
								 * words, for the back-end "be.loader" one would specify the id to be
							 | 
						|
								 * <code>loader</code>, from which the macro assumes the existence of the
							 | 
						|
								 * three functions <code>pantheios_be_loader_init()</code>,
							 | 
						|
								 * <code>pantheios_be_loader_uninit()</code> and
							 | 
						|
								 * <code>pantheios_be_loader_logEntry()</code>.
							 | 
						|
								 *
							 | 
						|
								 * \param id The back-end identifier, e.g. <code>loader</code> for the
							 | 
						|
								 *   "be.loader" back-end.
							 | 
						|
								 */
							 | 
						|
								#ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
							 | 
						|
								# define PANTHEIOS_BE_DEFINE_BE_FUNCTIONS_(fullId)                                                                               \
							 | 
						|
								                                                                                                                                \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_init(PAN_CHAR_T const* processIdentity, void* reserved, void** ptoken)                           \
							 | 
						|
								    { return fullId##_init(processIdentity, PANTHEIOS_BEID_LOCAL, NULL, reserved, ptoken); }                                    \
							 | 
						|
								    PANTHEIOS_CALL(void) pantheios_be_uninit(void* token)                                                                       \
							 | 
						|
								    { fullId##_uninit(token); }                                                                                                 \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_logEntry(void* feToken, void* beToken, int severity, PAN_CHAR_T const* entry, size_t cchEntry)   \
							 | 
						|
								    { STLSOFT_SUPPRESS_UNUSED(feToken); return fullId##_logEntry(feToken, beToken, severity, entry, cchEntry); }
							 | 
						|
								#endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
							 | 
						|
								
							 | 
						|
								#define PANTHEIOS_BE_DEFINE_BE_FUNCTIONS(id)    PANTHEIOS_BE_DEFINE_BE_FUNCTIONS_(pantheios_be_##id)
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_DEFINE_BEL_FUNCTIONS(expr)
							 | 
						|
								 *
							 | 
						|
								 *  Local back-end generation macro for the Pantheios API
							 | 
						|
								 *
							 | 
						|
								 * Generates the functions <code>pantheios_be_local_init()</code>,
							 | 
						|
								 * <code>pantheios_be_local_uninit()</code> and
							 | 
						|
								 * <code>pantheios_be_local_logEntry()</code> from the given back-end
							 | 
						|
								 * implementation. The given id is assumed to be common to all three
							 | 
						|
								 * back-end API functions for the given back-end implementation. In other
							 | 
						|
								 * words, for the back-end "be.loader" one would specify the id to be
							 | 
						|
								 * <code>loader</code>, from which the macro assumes the existence of the
							 | 
						|
								 * three functions <code>pantheios_be_loader_init()</code>,
							 | 
						|
								 * <code>pantheios_be_loader_uninit()</code> and
							 | 
						|
								 * <code>pantheios_be_loader_logEntry()</code>.
							 | 
						|
								 *
							 | 
						|
								 * \param id The back-end identifier, e.g. <code>loader</code> for the
							 | 
						|
								 *   "be.loader" back-end.
							 | 
						|
								 */
							 | 
						|
								#ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
							 | 
						|
								# define PANTHEIOS_BE_DEFINE_BEL_FUNCTIONS_(fullId)                                                                                  \
							 | 
						|
								                                                                                                                                    \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_local_init(PAN_CHAR_T const* processIdentity, void* reserved, void** ptoken)                         \
							 | 
						|
								    { return fullId##_init(processIdentity, PANTHEIOS_BEID_LOCAL, NULL, reserved, ptoken); }                                        \
							 | 
						|
								    PANTHEIOS_CALL(void) pantheios_be_local_uninit(void* token)                                                                     \
							 | 
						|
								    { fullId##_uninit(token); }                                                                                                     \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_local_logEntry(void* feToken, void* beToken, int severity, PAN_CHAR_T const* entry, size_t cchEntry) \
							 | 
						|
								    { STLSOFT_SUPPRESS_UNUSED(feToken); return fullId##_logEntry(feToken, beToken, severity, entry, cchEntry); }
							 | 
						|
								#endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
							 | 
						|
								
							 | 
						|
								#define PANTHEIOS_BE_DEFINE_BEL_FUNCTIONS(id)   PANTHEIOS_BE_DEFINE_BEL_FUNCTIONS_(pantheios_be_##id)
							 | 
						|
								
							 | 
						|
								/** \def PANTHEIOS_BE_DEFINE_BER_FUNCTIONS(expr)
							 | 
						|
								 *
							 | 
						|
								 *  Remote back-end generation macro for the Pantheios API
							 | 
						|
								 *
							 | 
						|
								 * Generates the functions <code>pantheios_be_remote_init()</code>,
							 | 
						|
								 * <code>pantheios_be_remote_uninit()</code> and
							 | 
						|
								 * <code>pantheios_be_remote_logEntry()</code> from the given back-end
							 | 
						|
								 * implementation. The given id is assumed to be common to all three
							 | 
						|
								 * back-end API functions for the given back-end implementation. In other
							 | 
						|
								 * words, for the back-end "be.loader" one would specify the id to be
							 | 
						|
								 * <code>loader</code>, from which the macro assumes the existence of the
							 | 
						|
								 * three functions <code>pantheios_be_loader_init()</code>,
							 | 
						|
								 * <code>pantheios_be_loader_uninit()</code> and
							 | 
						|
								 * <code>pantheios_be_loader_logEntry()</code>.
							 | 
						|
								 *
							 | 
						|
								 * \param id The back-end identifier, e.g. <code>loader</code> for the
							 | 
						|
								 *   "be.loader" back-end.
							 | 
						|
								 */
							 | 
						|
								#ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
							 | 
						|
								# define PANTHEIOS_BE_DEFINE_BER_FUNCTIONS_(fullId)                                                                                      \
							 | 
						|
								                                                                                                                                        \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_remote_init(PAN_CHAR_T const* processIdentity, void* reserved, void** ptoken)                            \
							 | 
						|
								    { return fullId##_init(processIdentity, PANTHEIOS_BEID_REMOTE, NULL, reserved, ptoken); }                                           \
							 | 
						|
								    PANTHEIOS_CALL(void) pantheios_be_remote_uninit(void* token)                                                                        \
							 | 
						|
								    { fullId##_uninit(token); }                                                                                                         \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_remote_logEntry(void* feToken, void* beToken, int severity, PAN_CHAR_T const* entry, size_t cchEntry)    \
							 | 
						|
								    { STLSOFT_SUPPRESS_UNUSED(feToken); return fullId##_logEntry(feToken, beToken, severity, entry, cchEntry); }
							 | 
						|
								#endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
							 | 
						|
								
							 | 
						|
								#define PANTHEIOS_BE_DEFINE_BER_FUNCTIONS(id)   PANTHEIOS_BE_DEFINE_BER_FUNCTIONS_(pantheios_be_##id)
							 | 
						|
								
							 | 
						|
								/* ////////////////////////////////////////////////////////////////////// */
							 | 
						|
								
							 | 
						|
								#endif /* !PANTHEIOS_INCL_PANTHEIOS_H_BACKEND */
							 | 
						|
								
							 | 
						|
								/* ///////////////////////////// end of file //////////////////////////// */
							 |