Program Listing for File macros.hpp

Return to documentation for file (include/ecl/errors/macros.hpp)

/*****************************************************************************
** Ifdefs
*****************************************************************************/

#ifndef ECL_ERRORS_MACROS_HPP_
#define ECL_ERRORS_MACROS_HPP_

/*****************************************************************************
** Includes
*****************************************************************************/

#include <ecl/config/macros.hpp>

/*****************************************************************************
** PreProcessing
*****************************************************************************/
/*
 * Import/exports symbols for the library
 */
#ifdef ECL_HAS_SHARED_LIBS // ecl is being built around shared libraries
  #ifdef ecl_errors_EXPORTS // we are building a shared lib/dll
    #define ecl_errors_PUBLIC ECL_HELPER_EXPORT
  #else // we are using shared lib/dll
    #define ecl_errors_PUBLIC ECL_HELPER_IMPORT
  #endif
  #define ecl_errors_LOCAL ECL_HELPERS_LOCAL
#else // ecl is being built around static libraries
  #define ecl_errors_PUBLIC
  #define ecl_errors_LOCAL
#endif

/*
 * Convert a variable name to a string.
 */
#define STRINGIFY(x) #x
#define TOSTRING(x)  STRINGIFY(x)

/*
 * Joints two arguments together.
 * The following piece of macro magic joins the two
 * arguments together, even when one of the arguments is
 * itself a macro (see 16.3.1 in C++ standard).  The key
 * is that macro expansion of macro arguments does not
 * occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN.
 */
#define JOIN( X, Y ) DO_JOIN( X, Y )
#define DO_JOIN( X, Y ) DO_JOIN2(X,Y)
#define DO_JOIN2( X, Y ) X##Y

#define LOC __FILE__ ":" TOSTRING(__LINE__) " "


#endif /* ECL_ERRORS_MACROS_HPP_*/