switch to git no-history version
This commit is contained in:
133
src/Core/Macros.h
Normal file
133
src/Core/Macros.h
Normal file
@@ -0,0 +1,133 @@
|
||||
/*//////////////////////////////////////////////////////////////////////////////
|
||||
// CMT Cosmic Muon Tomography project //////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Copyright (c) 2014, Universita' degli Studi di Padova, INFN sez. di Padova
|
||||
All rights reserved
|
||||
|
||||
Authors: Andrea Rigoni Garola < andrea.rigoni@pd.infn.it >
|
||||
|
||||
------------------------------------------------------------------
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3.0 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
|
||||
#ifndef U_CORE_MACROS_H
|
||||
#define U_CORE_MACROS_H
|
||||
|
||||
//#ifndef HAVE_CONFIG_H
|
||||
// #include "config.h"
|
||||
//#endif
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#define uLibAssert(condition) assert(condition)
|
||||
|
||||
|
||||
// Symbols visibility attribute, see: http://gcc.gnu.org/wiki/Visibility //
|
||||
// http://stackoverflow.com/questions/5116333/dynamic-cast-failed-when-hidding-symbol //
|
||||
#if defined _WIN32 || defined __CYGWIN__
|
||||
#ifdef BUILDING_DLL
|
||||
#ifdef __GNUC__
|
||||
#define DLL_PUBLIC __attribute__ ((dllexport))
|
||||
#else
|
||||
#define DLL_PUBLIC __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
|
||||
#endif
|
||||
#else
|
||||
#ifdef __GNUC__
|
||||
#define DLL_PUBLIC __attribute__ ((dllimport))
|
||||
#else
|
||||
#define DLL_PUBLIC __declspec(dllimport) // Note: actually gcc seems to also supports this syntax.
|
||||
#endif
|
||||
#endif
|
||||
#define DLL_LOCAL
|
||||
#else
|
||||
#if __GNUC__ >= 4
|
||||
#define DLL_PUBLIC __attribute__ ((visibility ("default")))
|
||||
#define DLL_LOCAL __attribute__ ((visibility ("hidden")))
|
||||
#else
|
||||
#define DLL_PUBLIC
|
||||
#define DLL_LOCAL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// foreach Qt style
|
||||
#ifndef foreach
|
||||
#include "boost/foreach.hpp"
|
||||
#define foreach(ref, list) BOOST_FOREACH(ref,list)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define uLibVGetMacro(name,type) \
|
||||
virtual inline const type Get##name() const = 0;
|
||||
|
||||
#define uLibVSetMacro(name,type) \
|
||||
virtual inline void Set##name(const type name) = 0;
|
||||
|
||||
#define uLibVGetSetMacro(name,type) \
|
||||
uLibVGet(name,type); \
|
||||
uLibVSet(name,type);
|
||||
|
||||
#define uLibVRefMacro(name,type) \
|
||||
virtual inline type & name() = 0;
|
||||
|
||||
|
||||
|
||||
#define uLibGetMacro(name,type) \
|
||||
inline type Get##name() const { return this->m_##name; }
|
||||
|
||||
#define uLibConstRefMacro(name,type) \
|
||||
inline const type & name() const { return this->m_##name; }
|
||||
|
||||
// verificare necessita' di typecast //
|
||||
#define uLibSetMacro(name,type) \
|
||||
inline void Set##name(type name) { this->m_##name = name; }
|
||||
|
||||
#define uLibGetSetMacro(name,type) \
|
||||
inline type Get##name() const { return this->m_##name; } \
|
||||
uLibSetMacro(name,type);
|
||||
|
||||
#define uLibRefMacro(name,type) \
|
||||
inline type & name() { return this->m_##name; }
|
||||
|
||||
|
||||
/* Following macros override usual branch prediction of compiler
|
||||
* These are to be used in conditional statement whose result might
|
||||
* be Bayesian biased:
|
||||
*
|
||||
* // previous_line
|
||||
* if (likely(a>1)) { // block_1 }
|
||||
* else { block_2 }
|
||||
*
|
||||
* will write the block_1 code right after previous line, without using
|
||||
* compiler branch prediction for results. Otherwise
|
||||
*
|
||||
* // previous_line
|
||||
* if (unlikely(a>1)) { // block_1 }
|
||||
* else { block_2 }
|
||||
*
|
||||
* will write block_2 after previous_line, leaving block_1 after
|
||||
* (usually after the end of the whole function! Use with care!)
|
||||
*/
|
||||
|
||||
#define unlikely(expr) __builtin_expect(!!(expr), 0)
|
||||
|
||||
#define likely(expr) __builtin_expect(!!(expr), 1)
|
||||
|
||||
#endif // MACROS_H
|
||||
Reference in New Issue
Block a user