#ifdef __cplusplus
extern "C" {
#endif

#pragma once


#include "HROOT-coreType.h"

#include "HROOTCoreTObject.h"

#include "STDDeletable.h"


#define TNAMED_DECL_VIRT(Type) \
void Type##_SetName ( Type##_p p, const char* name );\
void Type##_SetNameTitle ( Type##_p p, const char* name, const char* title );\
void Type##_SetTitle ( Type##_p p, const char* name );


#define TNAMED_DECL_NONVIRT(Type) \
Type##_p Type##_newTNamed ( const char* name, const char* title );


#define TNAMED_DECL_ACCESSOR(Type) \



#define TNAMED_DEF_VIRT(Type) \
void Type##_SetName ( Type##_p p, const char* name ) {\
((TYPECASTMETHOD(Type, SetName, TNamed))(p))->SetName(name);\
}\
\
void Type##_SetNameTitle ( Type##_p p, const char* name, const char* title ) {\
((TYPECASTMETHOD(Type, SetNameTitle, TNamed))(p))->SetNameTitle(name, title);\
}\
\
void Type##_SetTitle ( Type##_p p, const char* name ) {\
((TYPECASTMETHOD(Type, SetTitle, TNamed))(p))->SetTitle(name);\
}


#define TNAMED_DEF_NONVIRT(Type) \
Type##_p Type##_newTNamed ( const char* name, const char* title ) {\
Type* newp=new Type(name, title);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
}


#define TNAMED_DEF_ACCESSOR(Type) \



TOBJECT_DECL_VIRT(TNamed)
DELETABLE_DECL_VIRT(TNamed)
TNAMED_DECL_VIRT(TNamed)
TNAMED_DECL_NONVIRT(TNamed)
TNAMED_DECL_ACCESSOR(TNamed)

#ifdef __cplusplus
}
#endif