[uLib Geometry]

non working version!

+ adds ProgrammableAccessor
+ renaming of some Image structures ...
This commit is contained in:
Andrea Rigoni
2014-11-03 10:27:52 +00:00
commit 99e771a223
403 changed files with 61684 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
/*//////////////////////////////////////////////////////////////////////////////
// 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_STATICINTERFACE_H
#define U_CORE_STATICINTERFACE_H
namespace uLib {
#define MAKE_TRAITS ; // TODO
#define uLibCheckFunction(class_name,name,out, ... ) \
{ out (class_name::*x)(__VA_ARGS__) = &class_name::name; (void) x; }
#define uLibCheckConstFunction(class_name,name,out,...) \
{ out (class_name::*x)(__VA_ARGS__) const = &class_name::name; (void) x; }
#define uLibCheckMember(class_name,name,type) \
{ class_name x; type *y = &x.name; (void) y; }
namespace Interface {
// EXAMPLE :
//template <class T> struct Voxel {
// MAKE_TRAITS;
// template<class Self> void check_structural() {
// { float & (Self::*x)() = &Self::Density; (void) x; }
// { int & (Self::*x)() = &Self::TrackCount; (void) x; }
// }
//protected:
// ~Voxel() {}
//};
template <class T, class SI>
static inline void IsA() {
(void) ((void (SI::*)()) &SI::template check_structural<T>);
}
// not working
//template <class T, class SI>
//struct StaticIsA {
// void test() {
// static const void (SI::*x)() = SI::template check_structural<T>;
// }
//};
}
}
#endif // STATICINTERFACE_H