#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();
static bool HasShutdown();
private:
Instance(Instance* createSingleton);
static Instance& CreateReflexInstance();
static Instance* fgSingleton;
static bool fgHasShutdown;
void Shutdown();
};
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
};
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