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