#ifndef Reflex_Kernel
#define Reflex_Kernel
#if __GNUC__ >= 4 && !defined(__CINT__)
# define GCC_HASCLASSVISIBILITY
#endif
#if !defined(REFLEX_DLL_VETO) && !defined(REFLEX_DLL) && !defined(__CINT__)
# define REFLEX_DLL
#endif
#ifdef _WIN32
# define RFLX_IMPORT __declspec(dllimport)
# define RFLX_EXPORT __declspec(dllexport)
# define RFLX_DLLLOCAL
# define RFLX_DLLPUBLIC
#else
# ifdef GCC_HASCLASSVISIBILITY
# define RFLX_EXPORT __attribute__((visibility("default")))
# define RFLX_DLLLOCAL __attribute__((visibility("hidden")))
# define RFLX_DLLPUBLIC __attribute__((visibility("default")))
# else
# define RFLX_EXPORT
# define RFLX_DLLLOCAL
# define RFLX_DLLPUBLIC
# endif
# define RFLX_IMPORT
#endif
#ifdef REFLEX_DLL
# ifdef REFLEX_BUILD
# define RFLX_API RFLX_EXPORT
# else
# define RFLX_API RFLX_IMPORT
# endif // REFLEX_BUILD
#else
# define RFLX_API
#endif // REFLEX_DLL
#ifdef _WIN32
# define RFLX_EXCEPTIONAPI(api) api
#elif defined(GCC_HASCLASSVISIBILITY)
# define RFLX_EXCEPTIONAPI(api) RFLX_EXPORT
#else
# define RFLX_EXCEPTIONAPI(api)
#endif
#if defined(HAVE_CONFIG)
# include "config.h"
#endif
#if defined(_AIX)
# define ANSICPP
# define NEED_STRCASECMP
#endif
#if defined(__alpha) && !defined(__linux)
# ifndef __USE_STD_IOSTREAM
# define __USE_STD_IOSTREAM
# endif
#endif
#ifdef CONST
# undef CONST
#endif
#ifdef _WIN32
# pragma warning ( disable : 4786 )
# pragma warning ( disable : 4291 )
# pragma warning ( disable : 4250 )
#endif
#include <limits>
#ifndef LONGLONG_MAX
# define LONGLONG_MAX 0x7FFFFFFFFFFFFFFFLL
#endif
#ifndef LONGLONG_MIN
# define LONGLONG_MIN 0x8000000000000000LL
#endif
#ifndef ULONGLONG_MAX
# define ULONGLONG_MAX 0xFFFFFFFFFFFFFFFFLL
#endif
#ifndef ULONGLONG_MIN
# define ULONGLONG_MIN 0x0000000000000000LL
#endif
#include <stdlib.h>
#include <string.h>
#include <string>
#include <cstring>
#include <vector>
#include <utility>
#include <exception>
namespace Reflex {
#if 0
# if defined(_WIN32) && !defined(__CINT__)
typedef __int64 longlong;
typedef unsigned __int64 ulonglong;
# else
typedef long long int longlong;
typedef unsigned long long int ulonglong;
# endif
#endif
class Any;
class Type;
class Base;
class Scope;
class Object;
class Member;
class PropertyList;
class TypeTemplate;
class MemberTemplate;
typedef std::vector<std::string> StdString_Cont_Type_t;
typedef StdString_Cont_Type_t::const_iterator StdString_Iterator;
typedef StdString_Cont_Type_t::const_reverse_iterator Reverse_StdString_Iterator;
typedef std::vector<Type> Type_Cont_Type_t;
typedef Type_Cont_Type_t::const_iterator Type_Iterator;
typedef Type_Cont_Type_t::const_reverse_iterator Reverse_Type_Iterator;
typedef std::vector<Base> Base_Cont_Type_t;
typedef Base_Cont_Type_t::const_iterator Base_Iterator;
typedef Base_Cont_Type_t::const_reverse_iterator Reverse_Base_Iterator;
typedef std::vector<Scope> Scope_Cont_Type_t;
typedef Scope_Cont_Type_t::const_iterator Scope_Iterator;
typedef Scope_Cont_Type_t::const_reverse_iterator Reverse_Scope_Iterator;
typedef std::vector<Object> Object_Cont_Type_t;
typedef Object_Cont_Type_t::const_iterator Object_Iterator;
typedef Object_Cont_Type_t::const_reverse_iterator Reverse_Object_Iterator;
typedef std::vector<Member> Member_Cont_Type_t;
typedef Member_Cont_Type_t::const_iterator Member_Iterator;
typedef Member_Cont_Type_t::const_reverse_iterator Reverse_Member_Iterator;
typedef std::vector<TypeTemplate> TypeTemplate_Cont_Type_t;
typedef TypeTemplate_Cont_Type_t::const_iterator TypeTemplate_Iterator;
typedef TypeTemplate_Cont_Type_t::const_reverse_iterator Reverse_TypeTemplate_Iterator;
typedef std::vector<MemberTemplate> MemberTemplate_Cont_Type_t;
typedef MemberTemplate_Cont_Type_t::const_iterator MemberTemplate_Iterator;
typedef MemberTemplate_Cont_Type_t::const_reverse_iterator Reverse_MemberTemplate_Iterator;
namespace Dummy {
RFLX_API const StdString_Cont_Type_t& StdStringCont();
RFLX_API const Type_Cont_Type_t& TypeCont();
RFLX_API const Base_Cont_Type_t& BaseCont();
RFLX_API const Scope_Cont_Type_t& ScopeCont();
RFLX_API const Object_Cont_Type_t& ObjectCont();
RFLX_API const Member_Cont_Type_t& MemberCont();
RFLX_API const TypeTemplate_Cont_Type_t& TypeTemplateCont();
RFLX_API const MemberTemplate_Cont_Type_t& MemberTemplateCont();
RFLX_API Any& Any();
RFLX_API const Object& Object();
RFLX_API const Type& Type();
RFLX_API const TypeTemplate& TypeTemplate();
RFLX_API const Base& Base();
RFLX_API const PropertyList& PropertyList();
RFLX_API const Member& Member();
RFLX_API const MemberTemplate& MemberTemplate();
RFLX_API const Scope& Scope();
template <class T> inline const T&
Get() {
static T t;
return t;
}
}
class RFLX_API Instance {
public:
Instance();
~Instance();
enum EState {
kUninitialized,
kInitializing,
kActive,
kTearingDown,
kHasShutDown,
kNumStates
};
static bool HasShutdown();
static EState State();
void Shutdown();
private:
Instance(Instance * createSingleton);
static Instance& CreateReflexInstance();
static Instance* fgSingleton;
static EState fgState;
};
RFLX_API const std::string& Argv0();
enum ENTITY_DESCRIPTION {
PUBLIC = (1 << 0),
PROTECTED = (1 << 1),
PRIVATE = (1 << 2),
REGISTER = (1 << 3),
STATIC = (1 << 4),
CONSTRUCTOR = (1 << 5),
DESTRUCTOR = (1 << 6),
EXPLICIT = (1 << 7),
EXTERN = (1 << 8),
COPYCONSTRUCTOR = (1 << 9),
OPERATOR = (1 << 10),
INLINE = (1 << 11),
CONVERTER = (1 << 12),
AUTO = (1 << 13),
MUTABLE = (1 << 14),
CONST = (1 << 15),
VOLATILE = (1 << 16),
REFERENCE = (1 << 17),
ABSTRACT = (1 << 18),
VIRTUAL = (1 << 19),
TRANSIENT = (1 << 20),
ARTIFICIAL = (1 << 21),
TEMPLATEDEFAULTS1 = (0 << 31) & (0 << 30) & (0 << 29) & (1 << 28),
TEMPLATEDEFAULTS2 = (0 << 31) & (0 << 30) & (1 << 29) & (0 << 28),
TEMPLATEDEFAULTS3 = (0 << 31) & (0 << 30) & (1 << 29) & (1 << 28),
TEMPLATEDEFAULTS4 = (0 << 31) & (1 << 30) & (0 << 29) & (0 << 28),
TEMPLATEDEFAULTS5 = (0 << 31) & (1 << 30) & (0 << 29) & (1 << 28),
TEMPLATEDEFAULTS6 = (0 << 31) & (1 << 30) & (1 << 29) & (0 << 28),
TEMPLATEDEFAULTS7 = (0 << 31) & (1 << 30) & (1 << 29) & (1 << 28),
TEMPLATEDEFAULTS8 = (1 << 31) & (0 << 30) & (0 << 29) & (0 << 28),
TEMPLATEDEFAULTS9 = (1 << 31) & (0 << 30) & (0 << 29) & (1 << 28),
TEMPLATEDEFAULTS10 = (1 << 31) & (0 << 30) & (1 << 29) & (0 << 28),
TEMPLATEDEFAULTS11 = (1 << 31) & (0 << 30) & (1 << 29) & (1 << 28),
TEMPLATEDEFAULTS12 = (1 << 31) & (1 << 30) & (0 << 29) & (0 << 28),
TEMPLATEDEFAULTS13 = (1 << 31) & (1 << 30) & (0 << 29) & (1 << 28),
TEMPLATEDEFAULTS14 = (1 << 31) & (1 << 30) & (1 << 29) & (0 << 28),
TEMPLATEDEFAULTS15 = (1 << 31) & (1 << 30) & (1 << 29) & (1 << 28)
};
enum ENTITY_HANDLING {
FINAL = (1 << 0),
QUALIFIED = (1 << 1),
SCOPED = (1 << 2),
F = (1 << 4),
Q = (1 << 5),
S = (1 << 6)
};
enum TYPE {
CLASS = 0,
STRUCT,
ENUM,
FUNCTION,
ARRAY,
FUNDAMENTAL,
POINTER,
POINTERTOMEMBER,
TYPEDEF,
UNION,
TYPETEMPLATEINSTANCE,
MEMBERTEMPLATEINSTANCE,
NAMESPACE,
DATAMEMBER,
FUNCTIONMEMBER,
UNRESOLVED
};
enum REPRESTYPE {
REPRES_POINTER = 'a' - 'A',
REPRES_CHAR = 'c',
REPRES_SIGNED_CHAR = 'c',
REPRES_SHORT_INT = 's',
REPRES_INT = 'i',
REPRES_LONG_INT = 'l',
REPRES_UNSIGNED_CHAR = 'b',
REPRES_UNSIGNED_SHORT_INT = 'r',
REPRES_UNSIGNED_INT = 'h',
REPRES_UNSIGNED_LONG_INT = 'k',
REPRES_BOOL = 'g',
REPRES_FLOAT = 'f',
REPRES_DOUBLE = 'd',
REPRES_LONG_DOUBLE = 'q',
REPRES_VOID = 'y',
REPRES_LONGLONG = 'n',
REPRES_ULONGLONG = 'm',
REPRES_STRUCT = 'u',
REPRES_CLASS = 'u',
REPRES_ENUM = 'i',
REPRES_NOTYPE = '\0'
};
enum EMEMBERQUERY {
INHERITEDMEMBERS_DEFAULT,
INHERITEDMEMBERS_NO,
INHERITEDMEMBERS_ALSO
};
enum EDELAYEDLOADSETTING {
DELAYEDLOAD_OFF,
DELAYEDLOAD_ON
};
size_t NPos();
typedef void (*StubFunction)(void*, void*, const std::vector<void*>&, void*);
typedef size_t (*OffsetFunction)(void*);
class RFLX_API NullType {};
class RFLX_API UnknownType {};
class RFLX_API ProtectedClass {};
class RFLX_API ProtectedEnum {};
class RFLX_API ProtectedStruct {};
class RFLX_API ProtectedUnion {};
class RFLX_API PrivateClass {};
class RFLX_API PrivateEnum {};
class RFLX_API PrivateStruct {};
class RFLX_API PrivateUnion {};
class RFLX_API UnnamedClass {};
class RFLX_API UnnamedEnum {};
class RFLX_API UnnamedNamespace {};
class RFLX_API UnnamedStruct {};
class RFLX_API UnnamedUnion {};
class RFLX_EXCEPTIONAPI(RFLX_API) RuntimeError: public std::exception {
public:
RuntimeError(const std::string & msg): fMsg(Reflex::Argv0() + ": " + msg) {}
~RuntimeError() throw() {}
virtual const char*
what() const throw() { return fMsg.c_str(); }
std::string fMsg;
};
}
namespace ROOT {
namespace Reflex {
using namespace ::Reflex;
}
}
inline size_t
Reflex::NPos() {
return (size_t) -1;
}
#endif // Reflex_Kernel