32 #ifndef _QORE_QORECLASS_H 34 #define _QORE_QORECLASS_H 67 DLLEXPORT
extern QoreClass* QC_HTTPCLIENT;
78 class AbstractQoreFunctionVariant;
79 class AbstractFunctionSignature;
82 class qore_method_private;
83 class MethodFunctionBase;
84 class QoreExternalMethodVariant;
85 class QoreExternalStaticMethodVariant;
88 class MethodVariantBase;
95 friend class StaticMethodCallNode;
97 friend class qore_class_private;
98 friend class qore_method_private;
103 class qore_method_private* priv;
109 DLLLOCAL QoreMethod& operator=(
const QoreMethod&);
131 DLLEXPORT
bool isUser()
const;
156 DLLEXPORT
const char*
getName()
const;
162 DLLEXPORT
const std::string&
getNameStr()
const;
177 DLLEXPORT
const QoreTypeInfo* getUniqueReturnTypeInfo()
const;
186 DLLLOCAL QoreMethod(
const QoreClass* p_class, MethodFunctionBase* n_func,
bool n_static =
false);
188 DLLLOCAL ~QoreMethod();
189 DLLLOCAL
bool inMethod(
const QoreObject*
self)
const;
190 DLLLOCAL QoreMethod* copy(
const QoreClass* p_class)
const;
191 DLLLOCAL
void assign_class(
const QoreClass* p_class);
192 DLLLOCAL MethodFunctionBase* getFunction()
const;
206 virtual void doDeref() = 0;
217 friend class BCSMList;
218 friend class qore_object_private;
219 friend class qore_class_private;
221 friend class BCANode;
222 friend class qore_method_private;
225 friend class ConstructorMethodFunction;
247 DLLEXPORT
explicit QoreClass(
const char* n_name,
int n_domain);
257 DLLEXPORT QoreClass(
const char* n_name,
int64 n_domain,
const QoreTypeInfo* n_typeInfo);
262 DLLEXPORT QoreClass(
const QoreClass &old);
294 DLLEXPORT
void addMethod(
const char* n_name,
q_method_n_t meth, ClassAccess access = Public,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
334 DLLEXPORT
void addStaticMethod(
const char* n_name,
q_func_n_t meth, ClassAccess access = Public,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
374 DLLEXPORT
void addStaticMethod(
const char* n_name,
q_func_n_t meth,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
400 DLLEXPORT
void addMethod(
const char* n_name,
q_method_t meth,
bool priv =
false);
405 DLLEXPORT
void addMethodExtended(
const char* n_name,
q_method_t meth,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
420 DLLEXPORT
void addMethod2(
const char* n_name,
q_method2_t meth,
bool priv =
false);
425 DLLEXPORT
void addMethodExtended2(
const char* n_name,
q_method2_t meth,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
450 DLLEXPORT
void addMethodExtended3(
const char* n_name,
q_method_t meth,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
468 DLLEXPORT
void addAbstractMethodVariant(
const char* n_name, ClassAccess access = Public,
int64 n_flags = QC_NO_FLAGS,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
476 DLLEXPORT
void addAbstractMethodVariantExtended3(
const char* n_name,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
486 DLLEXPORT
void addStaticMethod(
const char* n_name,
q_func_t meth,
bool priv =
false);
491 DLLEXPORT
void addStaticMethodExtended(
const char* n_name,
q_func_t meth,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
501 DLLEXPORT
void addStaticMethod2(
const char* n_name,
q_static_method2_t meth,
bool priv =
false);
531 DLLEXPORT
void addStaticMethodExtended3(
const char* n_name,
q_func_t meth,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
536 DLLEXPORT
void addStaticMethodExtended3(
const char* n_name,
q_func_int64_t meth,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
541 DLLEXPORT
void addStaticMethodExtended3(
const char* n_name,
q_func_bool_t meth,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
546 DLLEXPORT
void addStaticMethodExtended3(
const char* n_name,
q_func_double_t meth,
bool priv =
false,
int64 n_flags = QC_NO_FLAGS,
int64 n_domain =
QDOM_DEFAULT,
const QoreTypeInfo* returnTypeInfo = 0,
unsigned num_params = 0, ...);
716 DLLEXPORT
void setCopy3(
const void* ptr,
q_copy3_t m);
730 DLLEXPORT
void setFinal();
737 DLLEXPORT
bool isPrivateMember(
const char* str)
const;
745 DLLEXPORT
bool isPublicOrPrivateMember(
const char* str,
bool& priv)
const;
772 DLLEXPORT
QoreObject* execSystemConstructor(
int code = 0, ...)
const;
787 DLLEXPORT
const QoreMethod* findLocalMethod(
const char* name)
const;
795 DLLEXPORT
const QoreMethod* findLocalStaticMethod(
const char* name)
const;
838 DLLEXPORT
const QoreClass*
getClass(
const QoreClass& qc,
bool& priv)
const;
841 DLLEXPORT
int numMethods()
const;
844 DLLEXPORT
int numStaticMethods()
const;
847 DLLEXPORT
int numUserMethods()
const;
850 DLLEXPORT
int numStaticUserMethods()
const;
853 DLLEXPORT
bool hasCopy()
const;
859 DLLEXPORT
bool isSystem()
const;
862 DLLEXPORT
void setSystem();
865 DLLEXPORT
bool hasMemberGate()
const;
868 DLLEXPORT
bool hasMethodGate()
const;
871 DLLEXPORT
bool hasMemberNotification()
const;
876 DLLEXPORT
int getDomain()
const;
881 DLLEXPORT
int64 getDomain64()
const;
884 DLLEXPORT
const char*
getName()
const;
888 DLLEXPORT
const QoreMethod* findMethod(
const char* nme)
const;
892 DLLEXPORT
const QoreMethod* findStaticMethod(
const char* nme)
const;
897 DLLEXPORT
const QoreMethod* findMethod(
const char* nme,
bool& priv)
const;
900 DLLEXPORT
const QoreMethod* findMethod(
const char* nme, ClassAccess& access)
const;
905 DLLEXPORT
const QoreMethod* findStaticMethod(
const char* nme,
bool& priv)
const;
908 DLLEXPORT
const QoreMethod* findStaticMethod(
const char* nme, ClassAccess& access)
const;
915 DLLEXPORT
void addBuiltinBaseClass(QoreClass* qc,
QoreListNode* xargs = 0);
924 DLLEXPORT
void addDefaultBuiltinBaseClass(QoreClass* qc,
QoreListNode* xargs = 0);
933 DLLEXPORT
void addBuiltinVirtualBaseClass(QoreClass* qc);
938 DLLEXPORT
void setSynchronousClass();
944 DLLEXPORT
const QoreMethod* getConstructor()
const;
950 DLLEXPORT
const QoreMethod* getSystemConstructor()
const;
956 DLLEXPORT
const QoreMethod* getDestructor()
const;
962 DLLEXPORT
const QoreMethod* getCopyMethod()
const;
968 DLLEXPORT
const QoreMethod* getMemberGateMethod()
const;
974 DLLEXPORT
const QoreMethod* getMethodGate()
const;
980 DLLEXPORT
const QoreMethod* getMemberNotificationMethod()
const;
983 DLLEXPORT
const QoreTypeInfo* getTypeInfo()
const;
986 DLLEXPORT
const QoreTypeInfo* getOrNothingTypeInfo()
const;
989 DLLEXPORT
void addMember(
const char* mem, ClassAccess access,
const QoreTypeInfo* n_typeInfo,
AbstractQoreNode* initial_value = 0);
994 DLLEXPORT
void addPublicMember(
const char* mem,
const QoreTypeInfo* n_typeInfo,
AbstractQoreNode* initial_value = 0);
999 DLLEXPORT
void addPrivateMember(
const char* mem,
const QoreTypeInfo* n_typeInfo,
AbstractQoreNode* initial_value = 0);
1004 DLLEXPORT
void setUserData(
const void* ptr);
1009 DLLEXPORT
const void* getUserData()
const;
1024 template <
typename T>
1025 DLLLOCAL T* getManagedUserData()
const {
1026 return static_cast<T*
>(getManagedUserData());
1030 DLLEXPORT
void recheckBuiltinMethodHierarchy();
1035 DLLEXPORT
const QoreExternalMethodVariant* findUserMethodVariant(
const char* name,
const QoreMethod*& method,
const type_vec_t& argTypeList)
const;
1043 DLLEXPORT
void addBuiltinConstant(
const char* name,
AbstractQoreNode* value,
bool priv =
false,
const QoreTypeInfo* typeInfo = 0);
1051 DLLEXPORT
void addBuiltinStaticVar(
const char* name,
AbstractQoreNode* value,
bool priv =
false,
const QoreTypeInfo* typeInfo = 0);
1059 DLLEXPORT
void addBuiltinConstant(
const char* name,
QoreValue value, ClassAccess access = Public,
const QoreTypeInfo* typeInfo = 0);
1067 DLLEXPORT
void addBuiltinStaticVar(
const char* name,
QoreValue value, ClassAccess access = Public,
const QoreTypeInfo* typeInfo = 0);
1072 DLLEXPORT
bool hasAbstract()
const;
1081 DLLEXPORT
void rescanParents();
1086 DLLEXPORT
void setPublicMemberFlag();
1091 DLLEXPORT
void setGateAccessFlag();
1094 DLLLOCAL QoreClass();
1097 DLLLOCAL
const QoreMethod* parseFindCommittedMethod(
const char* nme);
1100 DLLLOCAL
int parseAddBaseClassArgumentList(BCAList* bcal);
1102 DLLLOCAL
void setName(
const char* n);
1106 DLLLOCAL BCSMList* getBCSMList()
const;
1108 DLLLOCAL
bool has_delete_blocker()
const;
1110 DLLLOCAL
bool parseHasPublicMembersInHierarchy()
const;
1111 DLLLOCAL
bool runtimeHasPublicMembersInHierarchy()
const;
1114 DLLLOCAL
bool hasParentClass()
const;
1115 DLLLOCAL
bool hasPrivateCopyMethod()
const;
1117 DLLLOCAL
bool parseHasPrivateCopyMethod()
const;
1118 DLLLOCAL
const QoreMethod* parseGetConstructor()
const;
1120 DLLLOCAL
bool parseHasMethodGate()
const;
1122 DLLLOCAL
void parseSetEmptyPublicMemberDeclaration();
1124 DLLLOCAL
void unsetPublicMemberFlag();
1128 DLLEXPORT ~QoreClass();
1132 QoreClass& operator=(
const QoreClass&) =
delete;
1135 class qore_class_private* priv;
1141 DLLLOCAL
void insertStaticMethod(
QoreMethod* o);
1143 DLLLOCAL
const QoreMethod* parseResolveSelfMethodIntern(
const char* nme);
1174 DLLEXPORT ~QoreMethodIterator();
1175 DLLEXPORT
bool next();
1176 DLLEXPORT
const QoreMethod* getMethod()
const;
1186 DLLEXPORT ~QoreStaticMethodIterator();
1187 DLLEXPORT
bool next();
1188 DLLEXPORT
const QoreMethod* getMethod()
const;
1227 DLLEXPORT QoreBuiltinClass(
const QoreBuiltinClass& old);
1230 #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
AbstractQoreNode *(* q_method_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures
Definition: common.h:306
int64(* q_method_int64_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures, returns int64
Definition: common.h:316
DLLEXPORT bool newCallingConvention() const
DEPRECATED: always returns false, do not use.
To be used to iterate through a class's normal (non-static) methods.
Definition: QoreClass.h:1168
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:476
void(* q_copy2_t)(const QoreClass &thisclass, 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:514
AbstractQoreNode *(* q_method3_t)(const QoreMethod &method, const type_vec_t &typeList, const void *ptr, QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures when called with the even newer generic calling...
Definition: common.h:370
QoreValue(* q_method_n_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreValueList *args, q_rt_flags_t flags, ExceptionSink *xsink)
the new type used for builtin QoreClass method signatures
Definition: common.h:281
void(* q_constructor_n_t)(QoreObject *self, const QoreValueList *args, q_rt_flags_t rtflags, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:411
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:458
void(* q_system_constructor2_t)(const QoreClass &thisclass, QoreObject *self, int code, va_list args)
the type used for builtin QoreClass system constructor method signatures using the new generic callin...
Definition: common.h:468
an abstract class for class-specific external user data
Definition: QoreClass.h:198
void(* q_destructor2_t)(const QoreClass &thisclass, QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass destructor signatures with the new generic calling convention ...
Definition: common.h:485
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreValueList.h:45
allows for temporary storage of a QoreClass pointer
Definition: QoreClass.h:1194
DLLEXPORT const char * getName() const
returns the method's name
int64(* q_func_int64_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures returning an integer value
Definition: common.h:264
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:54
void(* q_constructor3_t)(const QoreClass &thisclass, const type_vec_t &typeList, const void *ptr, QoreObject *self, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures using the even newer generic callin...
Definition: common.h:448
QoreValue(* q_external_static_method_t)(const QoreMethod &method, const void *ptr, const QoreValueList *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for external static methods
Definition: common.h:383
AbstractQoreNode *(* q_static_method3_t)(const QoreMethod &method, const type_vec_t &typeList, const void *ptr, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin static method signatures for static methods using the even newer generic ca...
Definition: common.h:403
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:1180
void(* q_constructor_t)(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:430
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:82
DLLEXPORT const QoreClass * getClass() const
returns a pointer to the parent class
DLLEXPORT bool existsVariant(const type_vec_t ¶mTypeInfo) const
returns true if a variant with the given parameter signature already exists in the method ...
std::vector< AbstractQoreNode * > arg_vec_t
vector of value information for default argument lists
Definition: common.h:235
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
QoreValue(* q_func_n_t)(const QoreValueList *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for builtin function signatures
Definition: common.h:253
defines a Qore-language class
Definition: QoreClass.h:214
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:533
void(* q_copy3_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:525
DLLEXPORT const char * getClassName() const
returns the class name for the method
creates a builtin class
Definition: QoreClass.h:1221
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:112
the implementation of Qore's object data type, reference counted, dynamically-allocated only ...
Definition: QoreObject.h:62
unsigned qore_classid_t
used for the unique class ID for QoreClass objects
Definition: common.h:80
bool(* q_method_bool_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures when called with the even newer generic calling...
Definition: common.h:336
static unsigned num_params(const QoreListNode *n)
returns the number of arguments passed to the function
Definition: params.h:62
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:47
double(* q_method_double_t)(QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures when called with the even newer generic calling...
Definition: common.h:346
std::vector< std::string > name_vec_t
vector of parameter names for parameter lists
Definition: common.h:238
DLLEXPORT ClassAccess getAccess() const
returns the lowest access code of all variants in the method
AbstractQoreNode *(* q_static_method2_t)(const QoreMethod &method, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin static method signatures for static methods using the new generic calling c...
Definition: common.h:392
void(* q_external_constructor_t)(const QoreMethod &method, const void *ptr, QoreObject *self, const QoreValueList *args, q_rt_flags_t rtflags, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:423
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:241
AbstractQoreNode *(* q_func_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures
Definition: common.h:261
AbstractQoreNode *(* q_method2_t)(const QoreMethod &method, QoreObject *self, AbstractPrivateData *private_data, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass method signatures when called with the new generic calling conven...
Definition: common.h:357
double(* q_func_double_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures returning an double value
Definition: common.h:270
void(* q_copy_t)(QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass copy signatures
Definition: common.h:504
std::vector< const QoreTypeInfo * > type_vec_t
vector of type information for parameter lists
Definition: common.h:232
a method in a QoreClass
Definition: QoreClass.h:94
DLLEXPORT bool isSynchronized() const
DEPRECATED: always returns false, do not use.
void(* q_destructor3_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:495
QoreValue(* q_external_method_t)(const QoreMethod &method, const void *ptr, QoreObject *self, AbstractPrivateData *private_data, const QoreValueList *args, q_rt_flags_t flags, ExceptionSink *xsink)
the new type used for builtin QoreClass method signatures
Definition: common.h:296
void(* q_constructor2_t)(const QoreClass &thisclass, QoreObject *self, const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures using the new generic calling conve...
Definition: common.h:438
bool(* q_func_bool_t)(const QoreListNode *args, ExceptionSink *xsink)
the type used for builtin function signatures returning a boolean value
Definition: common.h:267
#define QDOM_DEFAULT
the default domain (no domain)
Definition: Restrictions.h:146