All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
QoreClass.h
/* -*- mode: c++; indent-tabs-mode: nil -*- */
/*
QoreClass.h
Qore Programming Language
Copyright 2003 - 2013 David Nichols
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _QORE_QORECLASS_H
#define _QORE_QORECLASS_H
#include <stdarg.h>
#include <string>
// all qore class IDs
DLLEXPORT extern qore_classid_t CID_AUTOGATE;
DLLEXPORT extern qore_classid_t CID_AUTOLOCK;
DLLEXPORT extern qore_classid_t CID_AUTOREADLOCK;
DLLEXPORT extern qore_classid_t CID_AUTOWRITELOCK;
DLLEXPORT extern qore_classid_t CID_CONDITION;
DLLEXPORT extern qore_classid_t CID_COUNTER;
DLLEXPORT extern qore_classid_t CID_DATASOURCE;
DLLEXPORT extern qore_classid_t CID_DATASOURCEPOOL;
DLLEXPORT extern qore_classid_t CID_FILE;
DLLEXPORT extern qore_classid_t CID_FTPCLIENT;
DLLEXPORT extern qore_classid_t CID_GATE;
DLLEXPORT extern qore_classid_t CID_GETOPT;
DLLEXPORT extern qore_classid_t CID_HTTPCLIENT;
DLLEXPORT extern qore_classid_t CID_MUTEX;
DLLEXPORT extern qore_classid_t CID_PROGRAM;
DLLEXPORT extern qore_classid_t CID_QUEUE;
DLLEXPORT extern qore_classid_t CID_RWLOCK;
DLLEXPORT extern qore_classid_t CID_SSLCERTIFICATE;
DLLEXPORT extern qore_classid_t CID_SSLPRIVATEKEY;
DLLEXPORT extern qore_classid_t CID_SEQUENCE;
DLLEXPORT extern qore_classid_t CID_SOCKET;
DLLEXPORT extern qore_classid_t CID_TERMIOS;
DLLEXPORT extern QoreClass *QC_QUEUE;
DLLEXPORT extern QoreClass *QC_HTTPCLIENT;
class BCList;
class BCSMList;
class BCAList;
class QoreObject;
class QoreClass;
class BCEAList;
class ParamList;
class QoreMemberInfo;
class BuiltinMethod;
class AbstractQoreFunctionVariant;
class AbstractFunctionSignature;
class UserMethod;
class BCANode;
class qore_method_private;
class MethodFunctionBase;
class QoreExternalMethodVariant;
class QoreExternalStaticMethodVariant;
class NamedScope;
class ConstantList;
class MethodVariantBase;
class QoreMethod {
friend class StaticMethodCallNode;
friend class QoreObject;
friend class qore_class_private;
friend class qore_method_private;
friend class BCList;
private:
class qore_method_private *priv;
DLLLOCAL QoreMethod(const QoreMethod&);
DLLLOCAL QoreMethod& operator=(const QoreMethod&);
public:
DLLEXPORT bool isSynchronized() const;
DLLEXPORT bool newCallingConvention() const;
DLLEXPORT bool isUser() const;
DLLEXPORT bool isBuiltin() const;
DLLEXPORT bool isPrivate() const;
DLLEXPORT bool isStatic() const;
DLLEXPORT const char *getName() const;
DLLEXPORT const QoreClass *getClass() const;
DLLEXPORT const char *getClassName() const;
DLLEXPORT bool existsVariant(const type_vec_t &paramTypeInfo) const;
/* returns the return type information for the method if it is available and if
there is only one return type (there can be more return types if the method is
overloaded)
*/
DLLEXPORT const QoreTypeInfo *getUniqueReturnTypeInfo() const;
DLLLOCAL QoreMethod(const QoreClass *p_class, MethodFunctionBase *n_func, bool n_static = false);
DLLLOCAL ~QoreMethod();
DLLLOCAL bool inMethod(const QoreObject *self) const;
DLLLOCAL QoreMethod *copy(const QoreClass *p_class) const;
DLLLOCAL void assign_class(const QoreClass *p_class);
DLLLOCAL MethodFunctionBase *getFunction() const;
DLLLOCAL bool parseIsPrivate() const;
DLLLOCAL AbstractQoreNode *eval(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL int64 bigIntEval(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL int intEval(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL bool boolEval(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL double floatEval(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL AbstractQoreNode *evalNormalVariant(QoreObject *self, const QoreExternalMethodVariant *ev, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL int64 bigIntEvalNormalVariant(QoreObject *self, const QoreExternalMethodVariant *ev, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL int intEvalNormalVariant(QoreObject *self, const QoreExternalMethodVariant *ev, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL bool boolEvalNormalVariant(QoreObject *self, const QoreExternalMethodVariant *ev, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL double floatEvalNormalVariant(QoreObject *self, const QoreExternalMethodVariant *ev, const QoreListNode *args, ExceptionSink *xsink) const;
};
class QoreClass {
friend class BCList;
friend class BCNode;
friend class BCSMList;
friend class qore_object_private;
friend class qore_class_private;
friend class QoreObject;
friend class BCANode;
friend class qore_method_private;
friend class QoreMethodIterator;
friend class QoreStaticMethodIterator;
friend class ConstructorMethodFunction;
private:
DLLLOCAL QoreClass& operator=(const QoreClass&);
class qore_class_private *priv;
// private constructor only called when the class is copied
DLLLOCAL QoreClass(qore_classid_t id, const char *nme);
DLLLOCAL void insertMethod(QoreMethod *o);
DLLLOCAL void insertStaticMethod(QoreMethod *o);
DLLLOCAL AbstractQoreNode *evalMethodGate(QoreObject *self, const char *nme, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL const QoreMethod *parseResolveSelfMethodIntern(const char *nme);
DLLLOCAL AbstractQoreNode *evalMethod(QoreObject *self, const char *method_name, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL int64 bigIntEvalMethod(QoreObject *self, const char *method_name, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL int intEvalMethod(QoreObject *self, const char *method_name, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL bool boolEvalMethod(QoreObject *self, const char *method_name, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL double floatEvalMethod(QoreObject *self, const char *method_name, const QoreListNode *args, ExceptionSink *xsink) const;
// This function must only be called from QoreObject
DLLLOCAL AbstractQoreNode *evalMemberGate(QoreObject *self, const QoreString *nme, ExceptionSink *xsink) const;
// This function must only be called from QoreObject
DLLLOCAL void execMemberNotification(QoreObject *self, const char *mem, ExceptionSink *xsink) const;
// This function must only be called from QoreObject and BCList
DLLLOCAL bool execDeleteBlocker(QoreObject *self, ExceptionSink *xsink) const;
// This function must only be called from QoreObject
DLLLOCAL void execDestructor(QoreObject *self, ExceptionSink *xsink) const;
// This function is only called from BCList
DLLEXPORT const QoreClass *getClassIntern(qore_classid_t cid, bool &priv) const;
public:
DLLEXPORT QoreClass(const char *n_name, int n_domain = QDOM_DEFAULT);
DLLEXPORT QoreClass(const char *n_name, int64 n_domain, const QoreTypeInfo *n_typeInfo);
DLLEXPORT QoreClass(const QoreClass &old);
DLLEXPORT ~QoreClass();
DLLEXPORT void addMethod(const char *n_name, q_method_t meth, bool priv = false);
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, ...);
DLLEXPORT void addMethodExtended(const char *n_name, q_method_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, ...);
DLLEXPORT void addMethodExtendedList(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, const type_vec_t &n_typeList = type_vec_t(), const arg_vec_t &defaultArgList = arg_vec_t());
DLLEXPORT void addMethod2(const char *n_name, q_method2_t meth, bool priv = false);
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, ...);
DLLEXPORT void addMethodExtendedList2(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, const type_vec_t &n_typeList = type_vec_t(), const arg_vec_t &defaultArgList = arg_vec_t());
DLLEXPORT void addMethodExtendedList3(const void *ptr, const char *n_name, q_method3_t meth, bool priv = false, int64 n_flags = QC_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());
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, ...);
DLLEXPORT void addMethodExtended3(const char *n_name, q_method_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, ...);
DLLEXPORT void addMethodExtended3(const char *n_name, q_method_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, ...);
DLLEXPORT void addMethodExtended3(const char *n_name, q_method_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, ...);
DLLEXPORT void addAbstractMethodVariantExtended3(const char *n_name, bool priv = false, int64 n_flags = QC_NO_FLAGS, const QoreTypeInfo *returnTypeInfo = 0, unsigned num_params = 0, ...);
DLLEXPORT void addStaticMethod(const char *n_name, q_func_t meth, bool priv = false);
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, ...);
DLLEXPORT void addStaticMethodExtendedList(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, const type_vec_t &n_typeList = type_vec_t(), const arg_vec_t &defaultArgList = arg_vec_t());
DLLEXPORT void addStaticMethod2(const char *n_name, q_static_method2_t meth, bool priv = false);
DLLEXPORT void addStaticMethodExtended2(const char *n_name, q_static_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, ...);
DLLEXPORT void addStaticMethodExtendedList2(const char *n_name, q_static_method2_t meth, bool priv = false, int64 n_flags = QC_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());
DLLEXPORT void addStaticMethodExtendedList3(const void *ptr, const char *n_name, q_static_method3_t meth, bool priv = false, int64 n_flags = QC_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());
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, ...);
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, ...);
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, ...);
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, ...);
DLLEXPORT void setDestructor(q_destructor_t m);
DLLEXPORT void setDestructor2(q_destructor2_t m);
DLLEXPORT void setDestructor3(const void *ptr, q_destructor3_t m);
DLLEXPORT void setConstructor(q_constructor_t m);
DLLEXPORT void setConstructorExtended(q_constructor_t meth, bool priv = false, int64 n_flags = QC_NO_FLAGS, int64 n_domain = QDOM_DEFAULT, unsigned num_params = 0, ...);
DLLEXPORT void setConstructorExtendedList(q_constructor_t meth, bool priv = false, int64 n_flags = QC_NO_FLAGS, int64 n_domain = QDOM_DEFAULT, const type_vec_t &n_typeList = type_vec_t(), const arg_vec_t &defaultArgList = arg_vec_t());
DLLEXPORT void setConstructor2(q_constructor2_t m);
DLLEXPORT void setConstructorExtended2(q_constructor2_t meth, bool priv = false, int64 n_flags = QC_NO_FLAGS, int64 n_domain = QDOM_DEFAULT, unsigned num_params = 0, ...);
DLLEXPORT void setConstructorExtendedList2(q_constructor2_t meth, bool priv = false, int64 n_flags = QC_NO_FLAGS, int64 n_domain = QDOM_DEFAULT, const type_vec_t &n_typeList = type_vec_t(), const arg_vec_t &defaultArgList = arg_vec_t());
DLLEXPORT void setConstructorExtendedList3(const void *ptr, q_constructor3_t meth, bool priv = false, int64 n_flags = QC_NO_FLAGS, int64 n_domain = QDOM_DEFAULT, const type_vec_t &n_typeList = type_vec_t(), const arg_vec_t &defaultArgList = arg_vec_t());
DLLEXPORT void setConstructorExtended3(q_constructor_t meth, bool priv = false, int64 n_flags = QC_NO_FLAGS, int64 n_domain = QDOM_DEFAULT, unsigned num_params = 0, ...);
DLLEXPORT void setSystemConstructor(q_system_constructor_t m);
DLLEXPORT void setSystemConstructor2(q_system_constructor2_t m);
DLLEXPORT void setCopy(q_copy_t m);
DLLEXPORT void setCopy2(q_copy2_t m);
DLLEXPORT void setCopy3(const void *ptr, q_copy3_t m);
DLLEXPORT void setDeleteBlocker(q_delete_blocker_t m);
DLLEXPORT bool isPrivateMember(const char *str) const;
DLLEXPORT bool isPublicOrPrivateMember(const char *str, bool &priv) const;
DLLEXPORT QoreObject *execConstructor(const QoreListNode *args, ExceptionSink *xsink) const;
DLLEXPORT QoreObject *execSystemConstructor(int code = 0, ...) const;
DLLEXPORT QoreObject *execCopy(QoreObject *old, ExceptionSink *xsink) const;
DLLEXPORT const QoreMethod *findLocalMethod(const char *name) const;
DLLEXPORT const QoreMethod *findLocalStaticMethod(const char *name) const;
DLLEXPORT QoreListNode *getMethodList() const;
DLLEXPORT QoreListNode *getStaticMethodList() const;
DLLEXPORT QoreClass *getClass(qore_classid_t cid) const;
DLLEXPORT const QoreClass *getClass(qore_classid_t cid, bool &priv) const;
DLLEXPORT const QoreClass *getClass(const QoreClass& qc, bool &priv) const;
DLLEXPORT int numMethods() const;
DLLEXPORT int numStaticMethods() const;
DLLEXPORT int numUserMethods() const;
DLLEXPORT int numStaticUserMethods() const;
DLLEXPORT bool hasCopy() const;
DLLEXPORT qore_classid_t getID() const;
DLLEXPORT bool isSystem() const;
DLLEXPORT bool hasMemberGate() const;
DLLEXPORT bool hasMethodGate() const;
DLLEXPORT bool hasMemberNotification() const;
DLLEXPORT int getDomain() const;
DLLEXPORT int64 getDomain64() const;
DLLEXPORT const char *getName() const;
// used at run-time
DLLEXPORT const QoreMethod *findMethod(const char *nme) const;
// used at run-time
DLLEXPORT const QoreMethod *findStaticMethod(const char *nme) const;
DLLEXPORT const QoreMethod *findMethod(const char *nme, bool &priv) const;
DLLEXPORT const QoreMethod *findStaticMethod(const char *nme, bool &priv) const;
DLLEXPORT void addBuiltinBaseClass(QoreClass *qc, QoreListNode *xargs = 0);
DLLEXPORT void addDefaultBuiltinBaseClass(QoreClass *qc, QoreListNode *xargs = 0);
DLLEXPORT void addBuiltinVirtualBaseClass(QoreClass *qc);
DLLEXPORT void setSynchronousClass();
DLLEXPORT const QoreMethod *getConstructor() const;
DLLEXPORT const QoreMethod *getSystemConstructor() const;
DLLEXPORT const QoreMethod *getDestructor() const;
DLLEXPORT const QoreMethod *getCopyMethod() const;
DLLEXPORT const QoreMethod *getMemberGateMethod() const;
DLLEXPORT const QoreMethod *getMethodGate() const;
DLLEXPORT const QoreMethod *getMemberNotificationMethod() const;
DLLEXPORT const QoreTypeInfo *getTypeInfo() const;
DLLEXPORT const QoreTypeInfo *getOrNothingTypeInfo() const;
DLLEXPORT void addPublicMember(const char *mem, const QoreTypeInfo *n_typeInfo, AbstractQoreNode *initial_value = 0);
DLLEXPORT void addPrivateMember(const char *mem, const QoreTypeInfo *n_typeInfo, AbstractQoreNode *initial_value = 0);
DLLEXPORT void setUserData(const void *ptr);
DLLEXPORT const void *getUserData() const;
DLLEXPORT void recheckBuiltinMethodHierarchy();
DLLEXPORT const QoreExternalMethodVariant *findUserMethodVariant(const char *name, const QoreMethod *&method, const type_vec_t &argTypeList) const;
DLLEXPORT void addBuiltinConstant(const char *name, AbstractQoreNode *value, bool priv = false, const QoreTypeInfo *typeInfo = 0);
DLLEXPORT void addBuiltinStaticVar(const char *name, AbstractQoreNode *value, bool priv = false, const QoreTypeInfo *typeInfo = 0);
DLLEXPORT bool hasAbstract() const;
DLLLOCAL QoreClass();
// used when parsing, finds committed non-static methods within the entire class hierarchy (local class plus base classes)
DLLLOCAL const QoreMethod *parseFindCommittedMethod(const char *nme);
// adds public constants to pending list
DLLLOCAL void parseAssimilatePublicConstants(ConstantList &cmap);
// adds private constants to pending list
DLLLOCAL void parseAssimilatePrivateConstants(ConstantList &cmap);
// adds a single public constant to pending list
DLLLOCAL void parseAddPublicConstant(const std::string &name, AbstractQoreNode *val);
// returns 0 for success, -1 for error
DLLLOCAL int parseAddBaseClassArgumentList(BCAList *bcal);
// only called when parsing, sets the name of the class
DLLLOCAL void setName(const char *n);
DLLLOCAL qore_classid_t getIDForMethod() const;
// get base class list to add virtual class indexes for private data
DLLLOCAL BCSMList *getBCSMList() const;
// returns true if the class has a delete_blocker function (somewhere in the hierarchy)
DLLLOCAL bool has_delete_blocker() const;
// looks in current and pending method lists, non-static methods only, no initialization
DLLLOCAL const QoreMethod *parseFindLocalMethod(const char *name) const;
// looks in current and pending method lists for the entire hierarchy (local class plus base classes), non-static methods only
DLLLOCAL const QoreMethod *parseFindMethodTree(const char *name);
// looks in current and pending method lists for the entire hierarchy (local class plus base classes), static methods only
DLLLOCAL const QoreMethod *parseFindStaticMethodTree(const char *name);
// returns true if the class passed is equal to or in the class' hierarchy - to be called only at parse time or under the program's parse lock
DLLLOCAL bool parseCheckHierarchy(const QoreClass *cls) const;
// checks if the given member can be accessed at parse time
DLLLOCAL int parseCheckMemberAccess(const char *mem, const QoreTypeInfo *&memberTypeInfo, int pflag) const;
DLLLOCAL bool parseHasPublicMembersInHierarchy() const;
DLLLOCAL bool runtimeGetMemberInfo(const char *mem, const QoreTypeInfo *&memberTypeInfo, bool &priv) const;
DLLLOCAL bool runtimeHasPublicMembersInHierarchy() const;
DLLLOCAL int initMembers(QoreObject *o, ExceptionSink *xsink) const;
// returns true if the class has one or more parent classes
DLLLOCAL bool hasParentClass() const;
DLLLOCAL QoreObject *execConstructor(const AbstractQoreFunctionVariant *variant, const QoreListNode *args, ExceptionSink *xsink) const;
DLLLOCAL bool hasPrivateCopyMethod() const;
// returns the status including the pending variant (if any)
DLLLOCAL bool parseHasPrivateCopyMethod() const;
DLLLOCAL const QoreMethod *parseGetConstructor() const;
// returns true if the class implements a "methodGate" method, also in pending uncommitted methods
DLLLOCAL bool parseHasMethodGate() const;
// called when there is an empty public member declaration or a "no_public" declaration
DLLLOCAL void parseSetEmptyPublicMemberDeclaration();
// unsets the public member flag for builtin classes
DLLLOCAL void unsetPublicMemberFlag();
};
class QoreMethodIterator {
private:
void *priv;
public:
DLLEXPORT QoreMethodIterator(const QoreClass* qc);
DLLEXPORT ~QoreMethodIterator();
DLLEXPORT bool next();
DLLEXPORT const QoreMethod* getMethod() const;
};
class QoreStaticMethodIterator {
private:
void *priv;
public:
DLLEXPORT QoreStaticMethodIterator(const QoreClass *qc);
DLLEXPORT ~QoreStaticMethodIterator();
DLLEXPORT bool next();
DLLEXPORT const QoreMethod *getMethod() const;
};
#endif // _QORE_QORECLASS_H