32 #ifndef _QORE_QORECLASS_H 34 #define _QORE_QORECLASS_H 72 DLLEXPORT
extern QoreClass* QC_HTTPCLIENT;
73 DLLEXPORT
extern QoreClass* QC_SSLCERTIFICATE;
74 DLLEXPORT
extern QoreClass* QC_SSLPRIVATEKEY;
76 DLLEXPORT
extern QoreClass* QC_SERIALIZABLE;
87 class AbstractQoreFunctionVariant;
88 class AbstractFunctionSignature;
91 class qore_method_private;
92 class MethodFunctionBase;
95 class MethodVariantBase;
102 class QoreExternalMethodFunction;
126 friend class StaticMethodCallNode;
128 friend class qore_class_private;
129 friend class qore_method_private;
134 class qore_method_private* priv;
140 DLLLOCAL QoreMethod& operator=(
const QoreMethod&);
146 DLLEXPORT
bool isUser()
const;
171 DLLEXPORT
const char*
getName()
const;
177 DLLEXPORT
const std::string&
getNameStr()
const;
192 DLLEXPORT
const QoreTypeInfo* getUniqueReturnTypeInfo()
const;
209 DLLEXPORT
const QoreExternalMethodFunction*
getFunction()
const;
211 DLLLOCAL QoreMethod(
const QoreClass* p_class, MethodFunctionBase* n_func,
bool n_static =
false);
213 DLLLOCAL
bool inMethod(
const QoreObject*
self)
const;
214 DLLLOCAL QoreMethod* copy(
const QoreClass* p_class)
const;
215 DLLLOCAL
void assign_class(
const QoreClass* p_class);
217 DLLLOCAL ~QoreMethod();
231 virtual void doDeref() = 0;
242 friend class BCSMList;
243 friend class qore_object_private;
244 friend class qore_class_private;
246 friend class BCANode;
247 friend class qore_method_private;
250 friend class ConstructorMethodFunction;
272 DLLEXPORT
explicit QoreClass(
const char* n_name,
int n_domain);
282 DLLEXPORT QoreClass(
const char* n_name,
int64 n_domain,
const QoreTypeInfo* n_typeInfo);
287 DLLEXPORT QoreClass(
const QoreClass &old);
319 DLLEXPORT
void addMethod(
const char* n_name,
q_method_n_t meth, ClassAccess access = Public,
int64 n_flags = QCF_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
359 DLLEXPORT
void addStaticMethod(
const char* n_name,
q_func_n_t meth, ClassAccess access = Public,
int64 n_flags = QCF_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
367 DLLEXPORT
void addAbstractMethod(
const char* n_name, ClassAccess access = Public,
int64 n_flags = QCF_NO_FLAGS,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
480 DLLEXPORT
void setFinal();
487 DLLEXPORT
bool isPrivateMember(
const char* str)
const;
495 DLLEXPORT
bool isPublicOrPrivateMember(
const char* str,
bool& priv)
const;
521 DLLEXPORT
QoreObject* execSystemConstructor(
int code = 0, ...)
const;
571 DLLEXPORT
const QoreClass*
getClass(
const QoreClass& qc,
bool& priv)
const;
574 DLLEXPORT
int numMethods()
const;
577 DLLEXPORT
int numStaticMethods()
const;
580 DLLEXPORT
int numUserMethods()
const;
583 DLLEXPORT
int numStaticUserMethods()
const;
586 DLLEXPORT
bool hasCopy()
const;
592 DLLEXPORT
bool isSystem()
const;
597 DLLEXPORT
bool isModulePublic()
const;
602 DLLEXPORT
bool isAbstract()
const;
607 DLLEXPORT
bool isFinal()
const;
612 DLLEXPORT
bool isInjected()
const;
617 DLLEXPORT
bool isPseudoClass()
const;
651 DLLEXPORT
void setSystem();
654 DLLEXPORT
bool hasMemberGate()
const;
657 DLLEXPORT
bool hasMethodGate()
const;
660 DLLEXPORT
bool hasMemberNotification()
const;
665 DLLEXPORT
int64 getDomain()
const;
668 DLLEXPORT
const char*
getName()
const;
675 DLLEXPORT
const QoreMethod* findMethod(
const char* nme)
const;
682 DLLEXPORT
const QoreMethod* findStaticMethod(
const char* nme)
const;
689 DLLEXPORT
const QoreMethod* findMethod(
const char* nme, ClassAccess& access)
const;
696 DLLEXPORT
const QoreMethod* findStaticMethod(
const char* nme, ClassAccess& access)
const;
703 DLLEXPORT
const QoreMethod* findLocalMethod(
const char* name)
const;
710 DLLEXPORT
const QoreMethod* findLocalStaticMethod(
const char* name)
const;
716 DLLEXPORT
void addBuiltinBaseClass(QoreClass* qc);
724 DLLEXPORT
void addDefaultBuiltinBaseClass(QoreClass* qc);
733 DLLEXPORT
void addBuiltinVirtualBaseClass(QoreClass* qc);
738 DLLEXPORT
void setSynchronousClass();
744 DLLEXPORT
const QoreMethod* getConstructor()
const;
750 DLLEXPORT
const QoreMethod* getSystemConstructor()
const;
756 DLLEXPORT
const QoreMethod* getDestructor()
const;
762 DLLEXPORT
const QoreMethod* getCopyMethod()
const;
768 DLLEXPORT
const QoreMethod* getMemberGateMethod()
const;
774 DLLEXPORT
const QoreMethod* getMethodGate()
const;
780 DLLEXPORT
const QoreMethod* getMemberNotificationMethod()
const;
783 DLLEXPORT
const QoreTypeInfo* getTypeInfo()
const;
786 DLLEXPORT
const QoreTypeInfo* getOrNothingTypeInfo()
const;
789 DLLEXPORT
void addMember(
const char* mem, ClassAccess access,
const QoreTypeInfo* n_typeInfo,
QoreValue initial_value =
QoreValue());
794 DLLEXPORT
void setUserData(
const void* ptr);
799 DLLEXPORT
const void* getUserData()
const;
814 template <
typename T>
815 DLLLOCAL T* getManagedUserData()
const {
816 return static_cast<T*
>(getManagedUserData());
820 DLLEXPORT
void recheckBuiltinMethodHierarchy();
833 DLLEXPORT
void addBuiltinConstant(
const char* name,
QoreValue value, ClassAccess access = Public,
const QoreTypeInfo* typeInfo =
nullptr);
841 DLLEXPORT
void addBuiltinStaticVar(
const char* name,
QoreValue value, ClassAccess access = Public,
const QoreTypeInfo* typeInfo =
nullptr);
850 DLLEXPORT
void rescanParents();
855 DLLEXPORT
void setPublicMemberFlag();
860 DLLEXPORT
void setGateAccessFlag();
877 DLLEXPORT std::string getNamespacePath(
bool anchored =
false)
const;
882 DLLEXPORT
bool isEqual(
const QoreClass& cls)
const;
892 DLLEXPORT
int runtimeCheckInstantiateClass(
ExceptionSink* xsink)
const;
907 DLLEXPORT
bool inHierarchy(
const QoreClass& cls, ClassAccess& n_access)
const;
912 DLLEXPORT
bool hasTransientMember()
const;
917 DLLEXPORT
const char* getModuleName()
const;
920 DLLLOCAL QoreClass();
923 DLLLOCAL
const QoreMethod* parseFindCommittedMethod(
const char* nme);
926 DLLLOCAL
int parseAddBaseClassArgumentList(BCAList* bcal);
928 DLLLOCAL
void setName(
const char* n);
932 DLLLOCAL BCSMList* getBCSMList()
const;
934 DLLLOCAL
bool has_delete_blocker()
const;
936 DLLLOCAL
bool parseHasPublicMembersInHierarchy()
const;
937 DLLLOCAL
bool runtimeHasPublicMembersInHierarchy()
const;
940 DLLLOCAL
bool hasParentClass()
const;
941 DLLLOCAL
bool hasPrivateCopyMethod()
const;
943 DLLLOCAL
bool parseHasPrivateCopyMethod()
const;
944 DLLLOCAL
const QoreMethod* parseGetConstructor()
const;
946 DLLLOCAL
bool parseHasMethodGate()
const;
948 DLLLOCAL
void parseSetEmptyPublicMemberDeclaration();
950 DLLLOCAL
void unsetPublicMemberFlag();
954 DLLEXPORT ~QoreClass();
958 QoreClass& operator=(
const QoreClass&) =
delete;
961 class qore_class_private* priv;
964 DLLLOCAL QoreClass(qore_class_private* priv);
967 DLLLOCAL
void insertStaticMethod(
QoreMethod* o);
969 DLLLOCAL
const QoreMethod* parseResolveSelfMethodIntern(
const char* nme);
1000 DLLEXPORT ~QoreMethodIterator();
1001 DLLEXPORT
bool next();
1002 DLLEXPORT
const QoreMethod* getMethod()
const;
1012 DLLEXPORT ~QoreStaticMethodIterator();
1013 DLLEXPORT
bool next();
1014 DLLEXPORT
const QoreMethod* getMethod()
const;
1053 DLLEXPORT QoreBuiltinClass(
const QoreBuiltinClass& old);
1065 DLLEXPORT ~QoreParentClassIterator();
1068 DLLEXPORT
bool next();
1071 DLLEXPORT
bool valid()
const;
1074 DLLEXPORT
const QoreClass& getParentClass()
const;
1077 DLLEXPORT ClassAccess
getAccess()
const;
1080 std::unique_ptr<class qore_parent_class_iterator_private> priv;
1092 DLLEXPORT ~QoreClassMemberIterator();
1095 DLLEXPORT
bool next();
1098 DLLEXPORT
bool valid()
const;
1104 DLLEXPORT
const char*
getName()
const;
1107 std::unique_ptr<class qore_class_member_iterator_private> priv;
1119 DLLEXPORT ~QoreClassStaticMemberIterator();
1122 DLLEXPORT
bool next();
1125 DLLEXPORT
bool valid()
const;
1131 DLLEXPORT
const char*
getName()
const;
1134 std::unique_ptr<class qore_class_static_member_iterator_private> priv;
1146 DLLEXPORT ~QoreClassConstantIterator();
1149 DLLEXPORT
bool next();
1152 DLLEXPORT
bool valid()
const;
1158 std::unique_ptr<class qore_class_constant_iterator> priv;
1172 DLLEXPORT ~QoreClassHierarchyIterator();
1175 DLLEXPORT
bool next();
1178 DLLEXPORT
bool valid()
const;
1186 DLLEXPORT
bool isVirtual()
const;
1189 std::unique_ptr<class qore_class_hierarchy_iterator> priv;
1203 DLLEXPORT ~QoreClassDestructorHierarchyIterator();
1206 DLLEXPORT
bool next();
1209 DLLEXPORT
bool valid()
const;
1217 DLLEXPORT
bool isVirtual()
const;
1220 class qore_class_destructor_hierarchy_iterator* priv;
1223 DLLEXPORT
const char* get_access_string(ClassAccess access);
1225 #endif // _QORE_QORECLASS_H DLLEXPORT bool isPrivate() const
returns true if all overloaded variants of a methods are private or class internal, false if at least one variant is public
external wrapper base class for class normal members
Definition: QoreReflection.h:174
void(* q_external_constructor_t)(const QoreMethod &method, const void *ptr, QoreObject *self, const QoreListNode *args, q_rt_flags_t rtflags, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:366
To be used to iterate through a class's normal (non-static) methods.
Definition: QoreClass.h:994
external wrapper class for constants
Definition: QoreReflection.h:200
DLLEXPORT bool isBuiltin() const
returns true if all variants of the method are builtin variants
void(* q_destructor_t)(QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass destructor signatures
Definition: common.h:386
QoreValue(* q_external_static_method_t)(const QoreMethod &method, const void *ptr, const QoreListNode *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for external static methods
Definition: common.h:346
void(* q_system_constructor_t)(QoreObject *self, int code, va_list args)
the type used for builtin QoreClass system constructor method signatures
Definition: common.h:378
an abstract class for class-specific external user data
Definition: QoreClass.h:223
external wrapper base class for class static members
Definition: QoreReflection.h:153
external wrapper class for function and call variants
Definition: QoreReflection.h:38
iterates class constants
Definition: QoreClass.h:1140
iterates the class hierarchy in the order of destructor execution
Definition: QoreClass.h:1197
allows for temporary storage of a QoreClass pointer
Definition: QoreClass.h:1020
DLLEXPORT const char * getName() const
returns the method's name
contains constants, classes, and subnamespaces in QoreProgram objects
Definition: QoreNamespace.h:64
QoreHashNode *(* q_serializer_t)(const QoreObject &self, const AbstractPrivateData &data, QoreSerializationContext &context, ExceptionSink *xsink)
the type used for builtin QoreClass serializer method signatures
Definition: common.h:434
DLLEXPORT QoreValue execManaged(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink) const
evaluates the method and returns the value, does not reference the object for the call ...
DLLEXPORT bool isUser() const
returns true if all variants of the method are user variants
To be used to iterate through a class's static methods.
Definition: QoreClass.h:1006
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:81
DLLEXPORT const QoreClass * getClass() const
returns a pointer to the parent class
iterates the class hierarchy in the order of constructor execution
Definition: QoreClass.h:1166
DLLEXPORT bool existsVariant(const type_vec_t ¶mTypeInfo) const
returns true if a variant with the given parameter signature already exists in the method ...
DLLEXPORT const std::string & getNameStr() const
returns the method's name
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
external wrapper base class for class members
Definition: QoreReflection.h:137
void(* q_external_copy_t)(const QoreClass &thisclass, const void *ptr, QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass copy signatures with the new generic calling convention ...
Definition: common.h:416
defines a Qore-language class
Definition: QoreClass.h:239
void(* q_external_destructor_t)(const QoreClass &thisclass, const void *ptr, QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass destructor signatures with the new generic calling convention and...
Definition: common.h:396
DLLEXPORT bool isStatic() const
returns true if the method is static
bool(* q_delete_blocker_t)(QoreObject *self, AbstractPrivateData *private_data)
the typed used for QoreClass deleteBlocker signatures
Definition: common.h:424
void(* q_deserializer_t)(QoreObject &self, const QoreHashNode *sdata, QoreDeserializationContext &context, ExceptionSink *xsink)
the type used for builtin QoreClass deserializer method signatures
Definition: common.h:446
DLLEXPORT const char * getClassName() const
returns the class name for the method
creates a builtin class
Definition: QoreClass.h:1047
void(* q_constructor_n_t)(QoreObject *self, const QoreListNode *args, q_rt_flags_t rtflags, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:354
iterates static members of a class
Definition: QoreClass.h:1113
QoreValue(* q_method_n_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures
Definition: common.h:318
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:262
the implementation of Qore's object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:61
unsigned qore_classid_t
used for the unique class ID for QoreClass objects
Definition: common.h:79
static unsigned num_params(const QoreListNode *n)
returns the number of arguments passed to the function
Definition: params.h:54
external wrapper class for method variants
Definition: QoreReflection.h:90
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:46
std::vector< std::string > name_vec_t
vector of parameter names for parameter lists
Definition: common.h:257
DLLEXPORT ClassAccess getAccess() const
returns the lowest access code of all variants in the method
DLLEXPORT const QoreExternalMethodFunction * getFunction() const
returns the function for the method
external wrapper class for source code location information
Definition: QoreReflection.h:187
DLLEXPORT method_type_e getMethodType() const
returns the type of method
long long int64
64bit integer type, cannot use int64_t here since it breaks the API on some 64-bit systems due to equ...
Definition: common.h:260
std::vector< QoreValue > arg_vec_t
vector of value information for default argument lists
Definition: common.h:254
int16_t qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode) ...
Definition: common.h:70
iterates normal (non-static) members of a class
Definition: QoreClass.h:1086
void(* q_copy_t)(QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass copy signatures
Definition: common.h:405
QoreValue(* q_external_method_t)(const QoreMethod &method, const void *ptr, QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures
Definition: common.h:333
std::vector< const QoreTypeInfo * > type_vec_t
vector of type information for parameter lists
Definition: common.h:251
a method in a QoreClass
Definition: QoreClass.h:125
iterates parent classes for a class with inheritance access information
Definition: QoreClass.h:1059
QoreValue(* q_func_n_t)(const QoreListNode *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for builtin function signatures
Definition: common.h:307
holds arbitrary binary data
Definition: BinaryNode.h:41
#define QDOM_DEFAULT
the default domain (no domain)
Definition: Restrictions.h:155