Qore Programming Language  0.9.16
QoreClass Class Reference

defines a Qore-language class More...

#include <QoreClass.h>

Inheritance diagram for QoreClass:

Public Member Methods

DLLEXPORT QoreClass (const char *n_name, int n_domain)
 creates the QoreClass object and assigns the name and the functional domain More...
 
DLLEXPORT QoreClass (const char *n_name, int64 n_domain, const QoreTypeInfo *n_typeInfo)
 creates the QoreClass object and assigns the name, the functional domain, and a custom QoreTypeInfo object created with AbstractQoreClassTypeInfoHelper More...
 
DLLEXPORT QoreClass (const char *n_name, int64 n_domain=QDOM_DEFAULT)
 creates the QoreClass object and assigns the name and the functional domain More...
 
DLLEXPORT QoreClass (const QoreClass &old)
 copy constructor More...
 
DLLEXPORT QoreClass (std::string &&n_name, int64 n_domain=QDOM_DEFAULT)
 creates the QoreClass object and assigns the name and the functional domain More...
 
DLLEXPORT void addAbstractMethod (const char *n_name, ClassAccess access, int64 n_flags, const QoreTypeInfo *returnTypeInfo, const type_vec_t &n_typeList, const arg_vec_t &defaultArgList=arg_vec_t(), const name_vec_t &n_names=name_vec_t())
 adds an unimplemented abstract method variant to the class with return and parameter type info
 
DLLEXPORT void addAbstractMethod (const char *n_name, ClassAccess access=Public, int64 n_flags=QCF_NO_FLAGS, const QoreTypeInfo *returnTypeInfo=0, unsigned num_params=0,...)
 adds an unimplemented abstract method variant to the class with extended information; with return and parameter type info
 
DLLEXPORT void addBaseClass (QoreClass *qc, bool virt=false)
 Adds a base class to the current class. More...
 
DLLEXPORT void addBuiltinBaseClass (QoreClass *qc)
 make a builtin class a child of another builtin class More...
 
DLLEXPORT void addBuiltinConstant (const char *name, QoreValue value, ClassAccess access=Public, const QoreTypeInfo *typeInfo=nullptr)
 adds a class constant to the class More...
 
DLLEXPORT void addBuiltinStaticVar (const char *name, QoreValue value, ClassAccess access=Public, const QoreTypeInfo *typeInfo=nullptr)
 adds a static variable to the class More...
 
DLLEXPORT void addBuiltinVirtualBaseClass (QoreClass *qc)
 sets "virtual" base class for a class, meaning that the base class data is appropriate for use in the subclass builtin methods More...
 
DLLEXPORT void addConstructor (const void *ptr, q_external_constructor_t meth, ClassAccess access=Public, int64 n_flags=QCF_NO_FLAGS, int64 n_domain=QDOM_DEFAULT, const type_vec_t &n_typeList=type_vec_t(), const arg_vec_t &defaultArgList=arg_vec_t(), const name_vec_t &n_names=name_vec_t())
 adds a constructor method variant with the external calling convention and includes the access specifier, additional functional domain info, and parameter type info More...
 
DLLEXPORT void addConstructor (q_constructor_n_t meth, ClassAccess access=Public, int64 n_flags=QCF_NO_FLAGS, int64 n_domain=QDOM_DEFAULT, unsigned num_params=0,...)
 adds a constructor method variant with the access specifier, additional functional domain info, and parameter type info
 
DLLEXPORT void addDefaultBuiltinBaseClass (QoreClass *qc)
 make a builtin class a child of another builtin class and ensures that the given class's private data will be used in all class methods More...
 
DLLEXPORT void addMember (const char *mem, ClassAccess access, const QoreTypeInfo *n_typeInfo, QoreValue initial_value=QoreValue())
 adds a member
 
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,...)
 adds a builtin method variant to a class More...
 
DLLEXPORT void addMethod (const void *ptr, const char *n_name, q_external_method_t meth, ClassAccess access=Public, int64 n_flags=QCF_NO_FLAGS, int64 n_domain=QDOM_DEFAULT, const QoreTypeInfo *returnTypeInfo=0, const type_vec_t &n_typeList=type_vec_t(), const arg_vec_t &defaultArgList=arg_vec_t(), const name_vec_t &n_names=name_vec_t())
 adds a builtin method variant to a class with the calling convention for external modules More...
 
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,...)
 adds a builtin static method with extended information; additional functional domain info, return and parameter type info
 
DLLEXPORT void addStaticMethod (const void *ptr, const char *n_name, q_external_static_method_t meth, ClassAccess access=Public, int64 n_flags=QCF_NO_FLAGS, int64 n_domain=QDOM_DEFAULT, const QoreTypeInfo *returnTypeInfo=0, const type_vec_t &n_typeList=type_vec_t(), const arg_vec_t &defaultArgList=arg_vec_t(), const name_vec_t &n_names=name_vec_t())
 adds a builtin static method with extended information; additional functional domain info, return and parameter type info More...
 
virtual DLLEXPORT QoreClasscopy ()
 Called when a class is copied. More...
 
virtual DLLEXPORT QoreClasscopyImport ()
 Called when a class is copied for import. More...
 
DLLEXPORT QoreValue evalPseudoMethod (const QoreMethod *m, const QoreExternalMethodVariant *variant, const QoreValue n, const QoreListNode *args, ExceptionSink *xsink) const
 evaluates a pseudo-method on a pseudo-class More...
 
DLLEXPORT QoreValue evalPseudoMethod (const QoreValue n, const char *nme, const QoreListNode *args, ExceptionSink *xsink) const
 evaluates a pseudo-method on a pseudo-class More...
 
DLLEXPORT QoreObjectexecConstructor (const QoreClass &obj_cls, const QoreListNode *args, bool allow_abstract, ExceptionSink *xsink) const
 Creates a new object and executes the constructor and returns the new object. More...
 
DLLEXPORT QoreObjectexecConstructor (const QoreListNode *args, ExceptionSink *xsink) const
 creates a new object and executes the constructor on it and returns the new object More...
 
DLLEXPORT QoreObjectexecConstructorVariant (const QoreExternalMethodVariant *mv, const QoreListNode *args, ExceptionSink *xsink) const
 creates a new object and executes the constructor on it and returns the new object More...
 
DLLEXPORT QoreObjectexecCopy (QoreObject *old, ExceptionSink *xsink) const
 executes a class's "copy" method on an object and returns the new object (or 0 in the case of an exception) More...
 
DLLEXPORT QoreObjectexecSystemConstructor (int code=0,...) const
 creates a new "system" object for use as the value of a constant, executes the system constructor on it and returns the new object More...
 
const DLLEXPORT QoreExternalConstantfindConstant (const char *name) const
 Finds the given constant or returns nullptr if not found. More...
 
const DLLEXPORT QoreExternalNormalMemberfindLocalMember (const char *name) const
 Finds the given local member or returns nullptr. More...
 
const DLLEXPORT QoreMethodfindLocalMethod (const char *name) const
 finds a normal (non-static) method in the class hierarchy More...
 
const DLLEXPORT QoreExternalStaticMemberfindLocalStaticMember (const char *name) const
 Finds the given local static member or returns nullptr. More...
 
const DLLEXPORT QoreMethodfindLocalStaticMethod (const char *name) const
 finds a static method in the class hierarchy More...
 
const DLLEXPORT QoreMethodfindMethod (const char *nme) const
 finds a normal (non-static) method in the class hierarchy More...
 
const DLLEXPORT QoreMethodfindMethod (const char *nme, ClassAccess &access) const
 finds a normal (non-static) method in the class hierarchy at runtime and sets the access code More...
 
const DLLEXPORT QoreMethodfindStaticMethod (const char *nme) const
 finds a static method in the class hierarchy More...
 
const DLLEXPORT QoreMethodfindStaticMethod (const char *nme, ClassAccess &access) const
 finds a static method in the class hierarchy and sets the priv flag if it's a private method or not More...
 
const DLLEXPORT QoreExternalMethodVariantfindUserMethodVariant (const char *name, const QoreMethod *&method, const type_vec_t &argTypeList) const
 returns the user variant for the given non-static method and argument types More...
 
DLLEXPORT BinaryNodegetBinaryHash () const
 returns a binary hash for the class's API More...
 
const DLLEXPORT QoreClassgetClass (const QoreClass &qc, bool &priv) const
 returns a pointer to the QoreClass object representing the class ID passed if it exists in the class hierarchy and sets a flag indicating if it's privately inherited or not More...
 
DLLEXPORT QoreClassgetClass (qore_classid_t cid) const
 returns a pointer to the QoreClass object representing the class ID passed if it exists in the class hierarchy More...
 
const DLLEXPORT QoreClassgetClass (qore_classid_t cid, bool &priv) const
 returns a pointer to the QoreClass object representing the class ID passed if it exists in the class hierarchy and sets a flag indicating if it's privately inherited or not More...
 
const DLLEXPORT QoreMethodgetConstructor () const
 returns a const pointer to the QoreMethod object of the constuctor method, if any is set More...
 
const DLLEXPORT QoreMethodgetCopyMethod () const
 returns a const pointer to the QoreMethod object of the destructor method, if any is set More...
 
DLLEXPORT q_deserializer_t getDeserializer () const
 returns the deserializer method or nullptr if not present More...
 
const DLLEXPORT QoreMethodgetDestructor () const
 returns a const pointer to the QoreMethod object of the constructor method, if any is set More...
 
DLLEXPORT int64 getDomain () const
 returns the functional domain of the class More...
 
DLLEXPORT qore_classid_t getID () const
 returns the class ID of this class
 
DLLEXPORT AbstractQoreClassUserDatagetManagedUserData () const
 retrieves the user-specific data pointer More...
 
template<typename T >
DLLLOCAL T * getManagedUserData () const
 retrieves the user-specific data pointer More...
 
const DLLEXPORT QoreMethodgetMemberGateMethod () const
 returns a const pointer to the QoreMethod object of the memberGate method, if any is set More...
 
const DLLEXPORT QoreMethodgetMemberNotificationMethod () const
 returns a const pointer to the QoreMethod object of the memberNotification method, if any is set More...
 
const DLLEXPORT QoreMethodgetMethodGate () const
 returns a const pointer to the QoreMethod object of the methodGate method, if any is set More...
 
DLLEXPORT QoreListNodegetMethodList () const
 returns a list strings of all non-static methods in the class, the caller owns the reference count returned More...
 
const DLLEXPORT char * getModuleName () const
 Returns the module name the class was loaded from or nullptr if it is a builtin class. More...
 
const DLLEXPORT char * getName () const
 returns the class name
 
const DLLEXPORT QoreNamespacegetNamespace () const
 Returns the namespace that owns this class. More...
 
DLLEXPORT std::string getNamespacePath (bool anchored=false) const
 returns the full namespace path of the class More...
 
const DLLEXPORT QoreTypeInfo * getOrNothingTypeInfo () const
 returns the "or nothing" type information structure for this class
 
DLLEXPORT QoreProgramgetProgram () const
 Returns the owning QoreProgram object (if not the static system namespace) More...
 
DLLEXPORT qore_type_t getPseudoClassType () const
 returns a pseudo-classes base type More...
 
DLLEXPORT q_serializer_t getSerializer () const
 returns the serializer method or nullptr if not present More...
 
DLLEXPORT QoreListNodegetStaticMethodList () const
 returns a list strings of all static methods in the class, the caller owns the reference count returned More...
 
const DLLEXPORT QoreMethodgetSystemConstructor () const
 returns a const pointer to the QoreMethod object of the constuctor method, if any is set More...
 
const DLLEXPORT QoreTypeInfo * getTypeInfo () const
 returns the type information structure for this class
 
const DLLEXPORT void * getUserData () const
 retrieves the user-specific data pointer More...
 
DLLEXPORT bool hasCopy () const
 returns true if the class implements a copy method
 
DLLEXPORT bool hasMemberGate () const
 returns true if the class implements a "memberGate" method
 
DLLEXPORT bool hasMemberNotification () const
 returns true if the class implements a "memberNotification" method
 
DLLEXPORT bool hasMethodGate () const
 returns true if the class implements a "methodGate" method
 
DLLEXPORT bool hasTransientMember () const
 Returns true if the class has at least one locally-declared transient member. More...
 
DLLEXPORT bool inHierarchy (const QoreClass &cls, ClassAccess &n_access) const
 Returns true if the class passed as an argument is present in the current class's hierachy, even if not accessible from the class due to private:internal inheritance. More...
 
DLLEXPORT bool isAbstract () const
 returns true if the class has at least one unimplemented abstract method variant More...
 
DLLEXPORT bool isEqual (const QoreClass &cls) const
 returns true if the classes are equal More...
 
DLLEXPORT bool isFinal () const
 returns true if the class is final More...
 
DLLEXPORT bool isInjected () const
 returns true if the class has been injected as a dependency injection More...
 
DLLEXPORT bool isModulePublic () const
 returns true if the class has its module public flag set More...
 
DLLEXPORT bool isPrivateMember (const char *str) const
 returns true if the member is private More...
 
DLLEXPORT bool isPseudoClass () const
 returns true if the class is a pseudo class More...
 
DLLEXPORT bool isPublicOrPrivateMember (const char *str, bool &priv) const
 returns true if the member is private or public More...
 
DLLEXPORT bool isSystem () const
 returns true if the class is a builtin class
 
DLLEXPORT int numMethods () const
 returns the number of non-static methods in this class (user and builtin)
 
DLLEXPORT int numStaticMethods () const
 returns the number of static methods in this class (user and builtin)
 
DLLEXPORT int numStaticUserMethods () const
 returns the number of static user methods in this class
 
DLLEXPORT int numUserMethods () const
 returns the number of non-static user methods in this class
 
DLLEXPORT void recheckBuiltinMethodHierarchy ()
 rechecks for inherited methods in base classes when adding builtin classes
 
DLLEXPORT void rescanParents ()
 rescan builtin parent classes in a class hierarchy; to be used with out-of-order class hierarchy construction More...
 
DLLEXPORT int runtimeCheckInstantiateClass (ExceptionSink *xsink) const
 Throws a Qore-language exception if the class cannot be instantiated. More...
 
DLLEXPORT void setCopy (const void *ptr, q_external_copy_t m)
 sets the builtin copy method for the class using the new generic calling convention More...
 
DLLEXPORT void setCopy (q_copy_t m)
 sets the builtin copy method for the class More...
 
DLLEXPORT void setDeleteBlocker (q_delete_blocker_t m)
 sets the deleteBlocker method for the class More...
 
DLLEXPORT void setDeserializer (q_deserializer_t m)
 sets the deserializer method for builtin classes More...
 
DLLEXPORT void setDestructor (const void *ptr, q_external_destructor_t m)
 sets the builtin destructor method for the class with the external calling convention More...
 
DLLEXPORT void setDestructor (q_destructor_t m)
 sets the builtin destructor method for the class More...
 
DLLEXPORT void setFinal ()
 sets the final flag of the class
 
DLLEXPORT void setGateAccessFlag ()
 sets the class's gate access flag so that memberGate() and methodGate() methods will be called with an extra boolean argument giving the current class access before the call More...
 
DLLEXPORT void setManagedUserData (AbstractQoreClassUserData *cud)
 sets a pointer to user-specific data in the class More...
 
DLLEXPORT void setPublicMemberFlag ()
 sets the class's public member flag so that undeclared member references will fail More...
 
DLLEXPORT void setSerializer (q_serializer_t m)
 sets the serializer method for builtin classes More...
 
DLLEXPORT void setSynchronousClass ()
 call this function if your builtin class requires *all* methods (except the constructor) to be run in an RMutex lock More...
 
DLLEXPORT void setSystem ()
 marks the class as a builtin class
 
DLLEXPORT void setSystemConstructor (q_system_constructor_t m)
 sets the builtin constructor for system objects (ex: used as constant values) More...
 
DLLEXPORT void setUserData (const void *ptr)
 sets a pointer to user-specific data in the class More...
 

Private Member Methods

DLLEXPORT QoreClass ()
 For use with QoreClass::copyImport()
 
virtual DLLEXPORT ~QoreClass ()
 Deletes the object and frees all memory.
 

Friends

class QoreMethodIterator
 
class QoreObject
 
class QoreStaticMethodIterator
 

Detailed Description

defines a Qore-language class

Qore's classes can be either implemented by Qore language code (user classes) or in C++ (builtin classes), or both, as in the case of a builtin class that also has user methods.

Constructor & Destructor Documentation

◆ QoreClass() [1/5]

DLLEXPORT QoreClass::QoreClass ( std::string &&  n_name,
int64  n_domain = QDOM_DEFAULT 
)

creates the QoreClass object and assigns the name and the functional domain

Note
class names and subnamespaces names must be unique in a namespace; i.e. no class may have the same name as a subnamespace within a namespace and vice-versa
Parameters
n_namethe name of the class
n_domainthe functional domain of the class to be used to enforce functional restrictions within a Program object
See also
QoreProgram
Since
Qore 0.9.5

◆ QoreClass() [2/5]

DLLEXPORT QoreClass::QoreClass ( const char *  n_name,
int64  n_domain = QDOM_DEFAULT 
)

creates the QoreClass object and assigns the name and the functional domain

Note
class names and subnamespaces names must be unique in a namespace; i.e. no class may have the same name as a subnamespace within a namespace and vice-versa
Parameters
n_namethe name of the class
n_domainthe functional domain of the class to be used to enforce functional restrictions within a Program object
See also
QoreProgram
Since
Qore 0.8.13

◆ QoreClass() [3/5]

DLLEXPORT QoreClass::QoreClass ( const char *  n_name,
int  n_domain 
)
explicit

creates the QoreClass object and assigns the name and the functional domain

Note
class names and subnamespaces names must be unique in a namespace; i.e. no class may have the same name as a subnamespace within a namespace and vice-versa
Parameters
n_namethe name of the class
n_domainthe functional domain of the class to be used to enforce functional restrictions within a Program object
See also
QoreProgram
Deprecated:
use QoreClass(const char*, int64) instead

◆ QoreClass() [4/5]

DLLEXPORT QoreClass::QoreClass ( const char *  n_name,
int64  n_domain,
const QoreTypeInfo *  n_typeInfo 
)

creates the QoreClass object and assigns the name, the functional domain, and a custom QoreTypeInfo object created with AbstractQoreClassTypeInfoHelper

Note
class names and subnamespaces names must be unique in a namespace; i.e. no class may have the same name as a subnamespace within a namespace and vice-versa
Parameters
n_namethe name of the class
n_domainthe functional domain of the class to be used to enforce functional restrictions within a Program object
n_typeInfothe custom QoreTypeInfo object created with AbstractQoreClassTypeInfoHelper
See also
QoreProgram
AbstractQoreClassTypeInfoHelper

◆ QoreClass() [5/5]

DLLEXPORT QoreClass::QoreClass ( const QoreClass old)

copy constructor

should be only called under the appropriate lock (ex: program parse lock while parsing)

Member Function Documentation

◆ addBaseClass()

DLLEXPORT void QoreClass::addBaseClass ( QoreClass qc,
bool  virt = false 
)

Adds a base class to the current class.

Parameters
qcthe class to add
virtif the base class is "virtual", meaning that the current class's binary object is also compatible with this base class's data (meaning that the base class's private data object is also a base class of this class's private data object)

◆ addBuiltinBaseClass()

DLLEXPORT void QoreClass::addBuiltinBaseClass ( QoreClass qc)

make a builtin class a child of another builtin class

the xargs argument must not be used; before qore supported function overloading, base class arguments could be given here

Parameters
qcthe base class to add

◆ addBuiltinConstant()

DLLEXPORT void QoreClass::addBuiltinConstant ( const char *  name,
QoreValue  value,
ClassAccess  access = Public,
const QoreTypeInfo *  typeInfo = nullptr 
)

adds a class constant to the class

Parameters
namethe name of the constant; cannot be the same as the name of a static variable
valuethe value of the constant
accessthe access protection of the constant
typeInfoonly need to set if the value assigned to the constant is not an internally-defined type and therefore the type info cannot be automatically determined, otherwise this parameter may be passed as NULL, in which case the type info will be automatically determined

◆ addBuiltinStaticVar()

DLLEXPORT void QoreClass::addBuiltinStaticVar ( const char *  name,
QoreValue  value,
ClassAccess  access = Public,
const QoreTypeInfo *  typeInfo = nullptr 
)

adds a static variable to the class

Parameters
namethe name of the static variable; cannot be the same as the name of a class constant
valuethe initial of the static variable
accessthe access protection of the static variable
typeInfoonly need to set if the initial value assigned to the static variable (as given by the 'value' parameter) is not an internally-defined type and therefore the type info cannot be automatically determined, otherwise this parameter may be passed as NULL, in which case the type info will be automatically determined

◆ addBuiltinVirtualBaseClass()

DLLEXPORT void QoreClass::addBuiltinVirtualBaseClass ( QoreClass qc)

sets "virtual" base class for a class, meaning that the base class data is appropriate for use in the subclass builtin methods

this method adds a base class placeholder for a subclass - where the subclass's private data object is actually a subclass of the parent class and all methods are virtual, so the base class's constructor, destructor, and copy constructor will never be run and the base class methods will be passed a pointer to the subclass's data

Parameters
qcthe base class to add

◆ addConstructor()

DLLEXPORT void QoreClass::addConstructor ( const void *  ptr,
q_external_constructor_t  meth,
ClassAccess  access = Public,
int64  n_flags = QCF_NO_FLAGS,
int64  n_domain = QDOM_DEFAULT,
const type_vec_t n_typeList = type_vec_t(),
const arg_vec_t defaultArgList = arg_vec_t(),
const name_vec_t n_names = name_vec_t() 
)

adds a constructor method variant with the external calling convention and includes the access specifier, additional functional domain info, and parameter type info

Since
Qore 0.9

◆ addDefaultBuiltinBaseClass()

DLLEXPORT void QoreClass::addDefaultBuiltinBaseClass ( QoreClass qc)

make a builtin class a child of another builtin class and ensures that the given class's private data will be used in all class methods

In the case this function is used, this objects of class cannot have private data saved against the class ID. The xargs argument must not be used; before qore supported function overloading, base class arguments could be given here

Parameters
qcthe base class to add

◆ addMethod() [1/2]

DLLEXPORT void QoreClass::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,
  ... 
)

adds a builtin method variant to a class

Example:
// the actual function can be declared with the class to be expected as the private data as follows:
static QoreValue AL_lock(QoreObject* self, QoreAutoLock* m, const QoreListNode* args, q_rt_flags_t rtflag, ExceptionSink* xsink);
...
// and then casted to (q_method_t) in the addMethod call:
QC_AutoLock->addMethod("lock", (q_method_n_t)AL_lock, Public, QCF_NO_FLAGS, QDOM_DEFAULT, nothingTypeInfo);

in debuggging mode, the call will abort if the name of the method is "constructor", "destructor", or "copy", or if the method already exists in the class. To set the constructor method, call QoreClass::setConstructor(). To set the destructor method, call QoreClass::setDestructor(). To set the copy method, call QoreClass::setCopy().

Parameters
n_namethe name of the method, must be unique in the class
meththe method to be added
accessthe access modifier for the method variant
n_flagscode flags
n_domainfunctional domain
returnTypeInfothe return type of the method
num_paramsthe number of parameters
See also
Qoreclass::addStaticMethod()
QoreClass::setConstructor()
QoreClass::setDestructor()
QoreClass::setCopy()

◆ addMethod() [2/2]

DLLEXPORT void QoreClass::addMethod ( const void *  ptr,
const char *  n_name,
q_external_method_t  meth,
ClassAccess  access = Public,
int64  n_flags = QCF_NO_FLAGS,
int64  n_domain = QDOM_DEFAULT,
const QoreTypeInfo *  returnTypeInfo = 0,
const type_vec_t n_typeList = type_vec_t(),
const arg_vec_t defaultArgList = arg_vec_t(),
const name_vec_t n_names = name_vec_t() 
)

adds a builtin method variant to a class with the calling convention for external modules

Example:
// the actual function can be declared with the class to be expected as the private data as follows:
static QoreValue AL_lock(const QoreMethod& method, const void* ptr, QoreObject* self, QoreAutoLock* m, const QoreListNode* args, q_rt_flags_t flags, ExceptionSink* xsink)
...
// and then casted to (q_method_t) in the addMethod call:
QC_AutoLock->addMethod(nullptr, "lock", (q_external_method_t)AL_lock, Public, QCF_NO_FLAGS, QDOM_DEFAULT, nothingTypeInfo);

in debuggging mode, the call will abort if the name of the method is "constructor", "destructor", or "copy", or if the method already exists in the class. To set the constructor method, call QoreClass::addConstructor(). To set the destructor method, call QoreClass::setDestructor(). To set the copy method, call QoreClass::setCopy().

Parameters
ptruser-defined data that will be included in the call to meth
n_namethe name of the method, must be unique in the class
meththe method to be added
accessthe access modifier for the method variant
n_flagscode flags
n_domainfunctional domain
returnTypeInfothe return type of the method
n_typeLista list of type information for parameters to the variant
defaultArgLista list of default arguments to each parameter
n_namesa list of parameter names
See also
Qoreclass::addStaticMethod()
QoreClass::addConstructor()
QoreClass::setDestructor()
QoreClass::setCopy()
Since
Qore 0.8.13

◆ addStaticMethod()

DLLEXPORT void QoreClass::addStaticMethod ( const void *  ptr,
const char *  n_name,
q_external_static_method_t  meth,
ClassAccess  access = Public,
int64  n_flags = QCF_NO_FLAGS,
int64  n_domain = QDOM_DEFAULT,
const QoreTypeInfo *  returnTypeInfo = 0,
const type_vec_t n_typeList = type_vec_t(),
const arg_vec_t defaultArgList = arg_vec_t(),
const name_vec_t n_names = name_vec_t() 
)

adds a builtin static method with extended information; additional functional domain info, return and parameter type info

Since
Qore 0.9

◆ copy()

virtual DLLEXPORT QoreClass* QoreClass::copy ( )
virtual

Called when a class is copied.

Since
Qore 0.9.5

◆ copyImport()

virtual DLLEXPORT QoreClass* QoreClass::copyImport ( )
virtual

Called when a class is copied for import.

Since
Qore 0.9.5

◆ evalPseudoMethod() [1/2]

DLLEXPORT QoreValue QoreClass::evalPseudoMethod ( const QoreMethod m,
const QoreExternalMethodVariant variant,
const QoreValue  n,
const QoreListNode args,
ExceptionSink xsink 
) const

evaluates a pseudo-method on a pseudo-class

The current class must be a pseudo-class or the call with abort in debug builds and crash in non-debug builds

The method and variant arguments must belong to the class

Parameters
mthe method to call; must be non-nullptr and must belong to the class
variantmay be nullptr meanin that the variant is matched in the call
nthe value to use for the call
argscall arguments, if any (may be nullptr)
xsinkQore-language exception info is stored here
Returns
the return value of the call
Since
Qore 0.9

◆ evalPseudoMethod() [2/2]

DLLEXPORT QoreValue QoreClass::evalPseudoMethod ( const QoreValue  n,
const char *  nme,
const QoreListNode args,
ExceptionSink xsink 
) const

evaluates a pseudo-method on a pseudo-class

The current class must be a pseudo-class or the call with abort in debug builds and crash in non-debug builds

Since
Qore 0.9

◆ execConstructor() [1/2]

DLLEXPORT QoreObject* QoreClass::execConstructor ( const QoreClass obj_cls,
const QoreListNode args,
bool  allow_abstract,
ExceptionSink xsink 
) const

Creates a new object and executes the constructor and returns the new object.

The object created will be an instance of the first argument, which may be a different class than the current class.

Parameters
obj_clsthe class for the object to be returned
argsthe arguments for the method
allow_abstractif construction of abstract classes is allowed; this should only be true when called from an external language module where the class has been inherited and all abstract methods have been overridden in the subclass in the other language, otherwise allowing an abstract class to be constructed will result in runtime errors / core dumps
xsinkQore-language exception information is added here
Since
Qore 0.9.5

◆ execConstructor() [2/2]

DLLEXPORT QoreObject* QoreClass::execConstructor ( const QoreListNode args,
ExceptionSink xsink 
) const

creates a new object and executes the constructor on it and returns the new object

if a Qore-language exception occurs, 0 is returned.

Parameters
argsthe arguments for the method
xsinkQore-language exception information is added here
Returns
the object created

◆ execConstructorVariant()

DLLEXPORT QoreObject* QoreClass::execConstructorVariant ( const QoreExternalMethodVariant mv,
const QoreListNode args,
ExceptionSink xsink 
) const

creates a new object and executes the constructor on it and returns the new object

if a Qore-language exception occurs, 0 is returned.

Parameters
mvthe constructor variant to use; must belong to a constructor method of the current class
argsthe arguments for the method
xsinkQore-language exception information is added here
Returns
the object created

◆ execCopy()

DLLEXPORT QoreObject* QoreClass::execCopy ( QoreObject old,
ExceptionSink xsink 
) const

executes a class's "copy" method on an object and returns the new object (or 0 in the case of an exception)

Parameters
oldthe original object to copy
xsinkQore-language exception information is added here
Returns
the object created

◆ execSystemConstructor()

DLLEXPORT QoreObject* QoreClass::execSystemConstructor ( int  code = 0,
  ... 
) const

creates a new "system" object for use as the value of a constant, executes the system constructor on it and returns the new object

if a Qore-language exception occurs, 0 is returned

Parameters
codean optional code for the constructor; this parameter is here because passing a variable number of arguments requires at least one fixed parameter before the (possibly empty) list
Returns
the object created

◆ findConstant()

const DLLEXPORT QoreExternalConstant* QoreClass::findConstant ( const char *  name) const

Finds the given constant or returns nullptr if not found.

Since
Qore 0.9

◆ findLocalMember()

const DLLEXPORT QoreExternalNormalMember* QoreClass::findLocalMember ( const char *  name) const

Finds the given local member or returns nullptr.

Since
Qore 0.9

◆ findLocalMethod()

const DLLEXPORT QoreMethod* QoreClass::findLocalMethod ( const char *  name) const

finds a normal (non-static) method in the class hierarchy

Parameters
namethe name of the method
Returns
a pointer to the method found, or nullptr if no such method exists in the class

◆ findLocalStaticMember()

const DLLEXPORT QoreExternalStaticMember* QoreClass::findLocalStaticMember ( const char *  name) const

Finds the given local static member or returns nullptr.

Since
Qore 0.9

◆ findLocalStaticMethod()

const DLLEXPORT QoreMethod* QoreClass::findLocalStaticMethod ( const char *  name) const

finds a static method in the class hierarchy

Parameters
namethe name of the method
Returns
a pointer to the method found, or nullptr if no such method exists in the class

◆ findMethod() [1/2]

const DLLEXPORT QoreMethod* QoreClass::findMethod ( const char *  nme) const

finds a normal (non-static) method in the class hierarchy

Note
used at run-time: will not return inaccessible methods
See also
findLocalMethod()

◆ findMethod() [2/2]

const DLLEXPORT QoreMethod* QoreClass::findMethod ( const char *  nme,
ClassAccess &  access 
) const

finds a normal (non-static) method in the class hierarchy at runtime and sets the access code

Note
used at run-time: will not return inaccessible methods
See also
findLocalMethod()

◆ findStaticMethod() [1/2]

const DLLEXPORT QoreMethod* QoreClass::findStaticMethod ( const char *  nme) const

finds a static method in the class hierarchy

Note
used at run-time: will not return inaccessible methods
See also
findLocalStaticMethod()

◆ findStaticMethod() [2/2]

const DLLEXPORT QoreMethod* QoreClass::findStaticMethod ( const char *  nme,
ClassAccess &  access 
) const

finds a static method in the class hierarchy and sets the priv flag if it's a private method or not

Note
used at run-time: will not return inaccessible methods
See also
findLocalStaticMethod()

◆ findUserMethodVariant()

const DLLEXPORT QoreExternalMethodVariant* QoreClass::findUserMethodVariant ( const char *  name,
const QoreMethod *&  method,
const type_vec_t argTypeList 
) const

returns the user variant for the given non-static method and argument types

argTypeList must have a non-null value for each type in the list

◆ getBinaryHash()

DLLEXPORT BinaryNode* QoreClass::getBinaryHash ( ) const

returns a binary hash for the class's API

Since
Qore 0.9

◆ getClass() [1/3]

const DLLEXPORT QoreClass* QoreClass::getClass ( const QoreClass qc,
bool &  priv 
) const

returns a pointer to the QoreClass object representing the class ID passed if it exists in the class hierarchy and sets a flag indicating if it's privately inherited or not

if the class ID is equal to the current class or is a base class of the current class, the appropriate QoreClass pointer will be returned.

Parameters
qcthe class to check the hierarchy for
priva flag indicating if the class is privately inherited or not
Returns
a pointer to the QoreClass object corresponding to the class passed if it exists in the class hierarchy; in the case that the passed class if from a different QoreProgram object, the value returned could be a different pointer to the qc parameter passed

◆ getClass() [2/3]

DLLEXPORT QoreClass* QoreClass::getClass ( qore_classid_t  cid) const

returns a pointer to the QoreClass object representing the class ID passed if it exists in the class hierarchy

if the class ID is equal to the current class or is a base class of the current class, the appropriate QoreClass pointer will be returned. Do not delete or change the QoreClass* returned if non-null. FIXME: should return const QoreClass*, fix in next update

Parameters
cidthe class ID of the QoreClass to find
Returns
a pointer to the QoreClass object representing the class ID passed if it exists in the class hierarchy

◆ getClass() [3/3]

const DLLEXPORT QoreClass* QoreClass::getClass ( qore_classid_t  cid,
bool &  priv 
) const

returns a pointer to the QoreClass object representing the class ID passed if it exists in the class hierarchy and sets a flag indicating if it's privately inherited or not

if the class ID is equal to the current class or is a base class of the current class, the appropriate QoreClass pointer will be returned.

Parameters
cidthe class ID of the QoreClass to find
priva flag indicating if the class is privately inherited or not
Returns
a pointer to the QoreClass object representing the class ID passed if it exists in the class hierarchy

◆ getConstructor()

const DLLEXPORT QoreMethod* QoreClass::getConstructor ( ) const

returns a const pointer to the QoreMethod object of the constuctor method, if any is set

executes in constant time

Returns
a const pointer to the QoreMethod object of the constuctor method, if any is set

◆ getCopyMethod()

const DLLEXPORT QoreMethod* QoreClass::getCopyMethod ( ) const

returns a const pointer to the QoreMethod object of the destructor method, if any is set

executes in constant time

Returns
a const pointer to the QoreMethod object of the destructor method, if any is set

◆ getDeserializer()

DLLEXPORT q_deserializer_t QoreClass::getDeserializer ( ) const

returns the deserializer method or nullptr if not present

Since
Qore 0.9

◆ getDestructor()

const DLLEXPORT QoreMethod* QoreClass::getDestructor ( ) const

returns a const pointer to the QoreMethod object of the constructor method, if any is set

executes in constant time

Returns
a const pointer to the QoreMethod object of the constructor method, if any is set

◆ getDomain()

DLLEXPORT int64 QoreClass::getDomain ( ) const

returns the functional domain of the class

Since
Qore 0.9

◆ getManagedUserData() [1/2]

DLLEXPORT AbstractQoreClassUserData* QoreClass::getManagedUserData ( ) const

retrieves the user-specific data pointer

Since
Qore 0.8.13

◆ getManagedUserData() [2/2]

template<typename T >
DLLLOCAL T* QoreClass::getManagedUserData ( ) const
inline

retrieves the user-specific data pointer

Since
Qore 0.8.13

◆ getMemberGateMethod()

const DLLEXPORT QoreMethod* QoreClass::getMemberGateMethod ( ) const

returns a const pointer to the QoreMethod object of the memberGate method, if any is set

executes in constant time

Returns
a const pointer to the QoreMethod object of the memberGate method, if any is set

◆ getMemberNotificationMethod()

const DLLEXPORT QoreMethod* QoreClass::getMemberNotificationMethod ( ) const

returns a const pointer to the QoreMethod object of the memberNotification method, if any is set

executes in constant time

Returns
a const pointer to the QoreMethod object of the memberNotification method, if any is set

◆ getMethodGate()

const DLLEXPORT QoreMethod* QoreClass::getMethodGate ( ) const

returns a const pointer to the QoreMethod object of the methodGate method, if any is set

executes in constant time

Returns
a const pointer to the QoreMethod object of the methodGate method, if any is set

◆ getMethodList()

DLLEXPORT QoreListNode* QoreClass::getMethodList ( ) const

returns a list strings of all non-static methods in the class, the caller owns the reference count returned

always returns a list; if there are no non-static methods then an empty list is returned

Returns
a list strings of all non-static methods in the class, the caller owns the reference count returned

◆ getModuleName()

const DLLEXPORT char* QoreClass::getModuleName ( ) const

Returns the module name the class was loaded from or nullptr if it is a builtin class.

Since
Qore 0.9

◆ getNamespace()

const DLLEXPORT QoreNamespace* QoreClass::getNamespace ( ) const

Returns the namespace that owns this class.

Since
Qore 0.9

◆ getNamespacePath()

DLLEXPORT std::string QoreClass::getNamespacePath ( bool  anchored = false) const

returns the full namespace path of the class

Parameters
anchoredif true then the path will always be prefixed by "::" for the unnamed root namespace
Since
Qore 0.9

◆ getProgram()

DLLEXPORT QoreProgram* QoreClass::getProgram ( ) const

Returns the owning QoreProgram object (if not the static system namespace)

Since
Qore 0.9.5

◆ getPseudoClassType()

DLLEXPORT qore_type_t QoreClass::getPseudoClassType ( ) const

returns a pseudo-classes base type

if the class is not a pseudo-class, or is the default pseudo-class taking any value, then -1 is returned

Since
Qore 0.9

◆ getSerializer()

DLLEXPORT q_serializer_t QoreClass::getSerializer ( ) const

returns the serializer method or nullptr if not present

Since
Qore 0.9

◆ getStaticMethodList()

DLLEXPORT QoreListNode* QoreClass::getStaticMethodList ( ) const

returns a list strings of all static methods in the class, the caller owns the reference count returned

always returns a list; if there are no static methods then an empty list is returned

Returns
a list strings of all static methods in the class, the caller owns the reference count returned

◆ getSystemConstructor()

const DLLEXPORT QoreMethod* QoreClass::getSystemConstructor ( ) const

returns a const pointer to the QoreMethod object of the constuctor method, if any is set

executes in constant time

Returns
a const pointer to the QoreMethod object of the constuctor method, if any is set

◆ getUserData()

const DLLEXPORT void* QoreClass::getUserData ( ) const

retrieves the user-specific data pointer

Deprecated:
use getManagedUserData() instead

◆ hasTransientMember()

DLLEXPORT bool QoreClass::hasTransientMember ( ) const

Returns true if the class has at least one locally-declared transient member.

Since
Qore 0.9

◆ inHierarchy()

DLLEXPORT bool QoreClass::inHierarchy ( const QoreClass cls,
ClassAccess &  n_access 
) const

Returns true if the class passed as an argument is present in the current class's hierachy, even if not accessible from the class due to private:internal inheritance.

Since
Qore 0.9

◆ isAbstract()

DLLEXPORT bool QoreClass::isAbstract ( ) const

returns true if the class has at least one unimplemented abstract method variant

Since
Qore 0.9

◆ isEqual()

DLLEXPORT bool QoreClass::isEqual ( const QoreClass cls) const

returns true if the classes are equal

Since
Qore 0.9

◆ isFinal()

DLLEXPORT bool QoreClass::isFinal ( ) const

returns true if the class is final

Since
Qore 0.9

◆ isInjected()

DLLEXPORT bool QoreClass::isInjected ( ) const

returns true if the class has been injected as a dependency injection

Since
Qore 0.9

◆ isModulePublic()

DLLEXPORT bool QoreClass::isModulePublic ( ) const

returns true if the class has its module public flag set

Since
Qore 0.9

◆ isPrivateMember()

DLLEXPORT bool QoreClass::isPrivateMember ( const char *  str) const

returns true if the member is private

Parameters
strthe member name to check
Returns
true if the member is private

◆ isPseudoClass()

DLLEXPORT bool QoreClass::isPseudoClass ( ) const

returns true if the class is a pseudo class

Since
Qore 0.9

◆ isPublicOrPrivateMember()

DLLEXPORT bool QoreClass::isPublicOrPrivateMember ( const char *  str,
bool &  priv 
) const

returns true if the member is private or public

Parameters
strthe member name to check
privtrue if the member is private, false if public
Returns
true if the member is private

◆ rescanParents()

DLLEXPORT void QoreClass::rescanParents ( )

rescan builtin parent classes in a class hierarchy; to be used with out-of-order class hierarchy construction

For example, when Qore classes are generated externally such as with the jni module, parent class information may need to be rescanned after adding to the class hierarchy to ensure that all virtual parents are correctly marked in child classes

Since
Qore 0.8.13

◆ runtimeCheckInstantiateClass()

DLLEXPORT int QoreClass::runtimeCheckInstantiateClass ( ExceptionSink xsink) const

Throws a Qore-language exception if the class cannot be instantiated.

Since
Qore 0.9

◆ setCopy() [1/2]

DLLEXPORT void QoreClass::setCopy ( const void *  ptr,
q_external_copy_t  m 
)

sets the builtin copy method for the class using the new generic calling convention

copy methods should either call QoreObject::setPrivate() or call xsink->raiseException() (but should not do both)

Parameters
ptruser-defined data that will be passed to the destructor when it's called
mthe copy method to set
// the actual function can be declared with the class to be expected as the private data as follows:
static void AL_copy(const QoreClass &thisclass, const void* ptr, QoreObject* self, QoreObject* old, QoreAutoLock *m, ExceptionSink* xsink)
...
// and then casted to (q_external_copy_t) in the addMethod call:
QC_AutoLock->setCopy((q_external_copy_t)AL_copy);

◆ setCopy() [2/2]

DLLEXPORT void QoreClass::setCopy ( q_copy_t  m)

sets the builtin copy method for the class

copy methods should either call QoreObject::setPrivate() or call xsink->raiseException() (but should not do both)

Parameters
mthe copy method to set
// the actual function can be declared with the class to be expected as the private data as follows:
static void AL_copy(QoreObject* self, QoreObject* old, QoreAutoLock *m, ExceptionSink* xsink)
...
// and then casted to (q_copy_t) in the addMethod call:
QC_AutoLock->setCopy((q_copy_t)AL_copy);

◆ setDeleteBlocker()

DLLEXPORT void QoreClass::setDeleteBlocker ( q_delete_blocker_t  m)

sets the deleteBlocker method for the class

this method will be run when the object is deleted; it should be set only for classes where the objects' lifecycles are or may be managed externally. This function must be called before this class is added as a parent class to any other class; if it is called classes have added this class as a parent class, then the child classes will not have their delete blocker flag set.

Parameters
mthe deleteBlocker method to set
Note
delete blocker methods are called with the object's status lock held, therefore be very careful what you call from within the deleteBlocker function

◆ setDeserializer()

DLLEXPORT void QoreClass::setDeserializer ( q_deserializer_t  m)

sets the deserializer method for builtin classes

Parameters
mthe deserializer method
Since
Qore 0.9

◆ setDestructor() [1/2]

DLLEXPORT void QoreClass::setDestructor ( const void *  ptr,
q_external_destructor_t  m 
)

sets the builtin destructor method for the class with the external calling convention

you only need to implement destructor methods if the destructor should destroy the object before the reference count reaches zero.

Parameters
ptruser-defined data that will be passed to the destructor when it's called
mthe destructor method to run
// the actual function can be declared with the class to be expected as the private data as follows:
static void AL_destructor(const QoreClass& thisclass, const void* ptr, QoreObject* self, QoreAutoLock* al, ExceptionSink* xsink);
...
// and then casted to (q_external_destructor_t) in the setDestructor call:
QC_AutoLock->setDestructor((q_external_destructor_t)AL_destructor);

◆ setDestructor() [2/2]

DLLEXPORT void QoreClass::setDestructor ( q_destructor_t  m)

sets the builtin destructor method for the class

you only need to implement destructor methods if the destructor should destroy the object before the reference count reaches zero.

Parameters
mthe destructor method to run
// the actual function can be declared with the class to be expected as the private data as follows:
static void AL_destructor(QoreObject* self, QoreAutoLock* al, ExceptionSink* xsink);
...
// and then casted to (q_destructor_t) in the setDestructor call:
QC_AutoLock->setDestructor((q_destructor_t)AL_destructor);

◆ setGateAccessFlag()

DLLEXPORT void QoreClass::setGateAccessFlag ( )

sets the class's gate access flag so that memberGate() and methodGate() methods will be called with an extra boolean argument giving the current class access before the call

Since
Qore 0.8.13

◆ setManagedUserData()

DLLEXPORT void QoreClass::setManagedUserData ( AbstractQoreClassUserData cud)

sets a pointer to user-specific data in the class

Since
Qore 0.8.13

◆ setPublicMemberFlag()

DLLEXPORT void QoreClass::setPublicMemberFlag ( )

sets the class's public member flag so that undeclared member references will fail

Since
Qore 0.8.13

◆ setSerializer()

DLLEXPORT void QoreClass::setSerializer ( q_serializer_t  m)

sets the serializer method for builtin classes

Parameters
mthe serializer method
Since
Qore 0.9

◆ setSynchronousClass()

DLLEXPORT void QoreClass::setSynchronousClass ( )

call this function if your builtin class requires *all* methods (except the constructor) to be run in an RMutex lock

use this for classes that require exclusive access to the private data in all functions

◆ setSystemConstructor()

DLLEXPORT void QoreClass::setSystemConstructor ( q_system_constructor_t  m)

sets the builtin constructor for system objects (ex: used as constant values)

Note
system constructors in a class hierarchy must call the base class constructors manually
Parameters
mthe constructor method

◆ setUserData()

DLLEXPORT void QoreClass::setUserData ( const void *  ptr)

sets a pointer to user-specific data in the class

Deprecated:
use setManagedUserData(AbstractQoreClassUserData*) instead

The documentation for this class was generated from the following file:
q_rt_flags_t
uint64_t q_rt_flags_t
runtime code execution flags
Definition: common.h:263
QoreValue
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:262
QDOM_DEFAULT
#define QDOM_DEFAULT
the default domain (no domain)
Definition: Restrictions.h:156
QoreClass
defines a Qore-language class
Definition: QoreClass.h:239
QoreListNode
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
q_external_copy_t
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:428
q_method_n_t
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:330
QoreObject
the implementation of Qore's object data type, reference counted, dynamically-allocated only
Definition: QoreObject.h:61
ExceptionSink
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
q_external_method_t
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:345
q_external_destructor_t
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:408
QoreMethod
a method in a QoreClass
Definition: QoreClass.h:125
q_destructor_t
void(* q_destructor_t)(QoreObject *self, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass destructor signatures
Definition: common.h:398
q_copy_t
void(* q_copy_t)(QoreObject *self, QoreObject *old, AbstractPrivateData *private_data, ExceptionSink *xsink)
the type used for builtin QoreClass copy signatures
Definition: common.h:417