|
Qore Programming Language
0.8.3
|
00001 /* -*- mode: c++; indent-tabs-mode: nil -*- */ 00002 /* 00003 QoreClass.h 00004 00005 Qore Programming Language 00006 00007 Copyright 2003 - 2011 David Nichols 00008 00009 This library is free software; you can redistribute it and/or 00010 modify it under the terms of the GNU Lesser General Public 00011 License as published by the Free Software Foundation; either 00012 version 2.1 of the License, or (at your option) any later version. 00013 00014 This library is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public 00020 License along with this library; if not, write to the Free Software 00021 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00022 */ 00023 00024 #ifndef _QORE_QORECLASS_H 00025 00026 #define _QORE_QORECLASS_H 00027 00028 #include <stdarg.h> 00029 #include <string> 00030 00031 // all qore class IDs 00032 DLLEXPORT extern qore_classid_t CID_AUTOGATE; 00033 DLLEXPORT extern qore_classid_t CID_AUTOLOCK; 00034 DLLEXPORT extern qore_classid_t CID_AUTOREADLOCK; 00035 DLLEXPORT extern qore_classid_t CID_AUTOWRITELOCK; 00036 DLLEXPORT extern qore_classid_t CID_CONDITION; 00037 DLLEXPORT extern qore_classid_t CID_COUNTER; 00038 DLLEXPORT extern qore_classid_t CID_DATASOURCE; 00039 DLLEXPORT extern qore_classid_t CID_DATASOURCEPOOL; 00040 DLLEXPORT extern qore_classid_t CID_FILE; 00041 DLLEXPORT extern qore_classid_t CID_FTPCLIENT; 00042 DLLEXPORT extern qore_classid_t CID_GATE; 00043 DLLEXPORT extern qore_classid_t CID_GETOPT; 00044 DLLEXPORT extern qore_classid_t CID_HTTPCLIENT; 00045 DLLEXPORT extern qore_classid_t CID_MUTEX; 00046 DLLEXPORT extern qore_classid_t CID_PROGRAM; 00047 DLLEXPORT extern qore_classid_t CID_QUEUE; 00048 DLLEXPORT extern qore_classid_t CID_RWLOCK; 00049 DLLEXPORT extern qore_classid_t CID_SSLCERTIFICATE; 00050 DLLEXPORT extern qore_classid_t CID_SSLPRIVATEKEY; 00051 DLLEXPORT extern qore_classid_t CID_SEQUENCE; 00052 DLLEXPORT extern qore_classid_t CID_SOCKET; 00053 DLLEXPORT extern qore_classid_t CID_TERMIOS; 00054 00055 DLLEXPORT extern QoreClass *QC_QUEUE; 00056 DLLEXPORT extern QoreClass *QC_HTTPCLIENT; 00057 00058 class BCList; 00059 class BCSMList; 00060 class BCAList; 00061 class QoreObject; 00062 class QoreClass; 00063 class BCEAList; 00064 class ParamList; 00065 class QoreMemberInfo; 00066 class BuiltinMethod; 00067 class AbstractQoreFunction; 00068 class AbstractQoreFunctionVariant; 00069 class AbstractFunctionSignature; 00070 class UserMethod; 00071 class BCANode; 00072 class qore_method_private; 00073 class MethodFunctionBase; 00074 class QoreExternalMethodVariant; 00075 class QoreExternalStaticMethodVariant; 00076 00078 00081 class QoreMethod { 00082 friend class StaticMethodCallNode; 00083 friend class QoreObject; 00084 friend class qore_class_private; 00085 00086 private: 00088 struct qore_method_private *priv; 00089 00091 DLLLOCAL QoreMethod(const QoreMethod&); 00092 00094 DLLLOCAL QoreMethod& operator=(const QoreMethod&); 00095 00096 public: 00098 00101 DLLEXPORT bool isSynchronized() const; 00102 00104 00107 DLLEXPORT bool newCallingConvention() const; 00108 00110 00112 DLLEXPORT bool isUser() const; 00113 00115 00117 DLLEXPORT bool isBuiltin() const; 00118 00120 00122 DLLEXPORT bool isPrivate() const; 00123 00125 00128 DLLEXPORT bool isStatic() const; 00129 00131 00134 DLLEXPORT const char *getName() const; 00135 00137 DLLEXPORT const QoreClass *getClass() const; 00138 00140 DLLEXPORT const char *getClassName() const; 00141 00143 DLLEXPORT bool existsVariant(const type_vec_t ¶mTypeInfo) const; 00144 00145 /* returns the return type information for the method if it is available and if 00146 there is only one return type (there can be more return types if the method is 00147 overloaded) 00148 */ 00149 DLLEXPORT const QoreTypeInfo *getUniqueReturnTypeInfo() const; 00150 00151 DLLLOCAL QoreMethod(const QoreClass *p_class, MethodFunctionBase *n_func, bool n_static = false); 00152 00153 DLLLOCAL ~QoreMethod(); 00154 DLLLOCAL bool inMethod(const QoreObject *self) const; 00155 DLLLOCAL QoreMethod *copy(const QoreClass *p_class) const; 00156 DLLLOCAL void assign_class(const QoreClass *p_class); 00157 DLLLOCAL MethodFunctionBase *getFunction() const; 00158 00160 00162 DLLLOCAL bool parseIsPrivate() const; 00163 00165 00171 DLLLOCAL AbstractQoreNode *eval(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink) const; 00172 DLLLOCAL AbstractQoreNode *evalNormalVariant(QoreObject *self, const QoreExternalMethodVariant *ev, const QoreListNode *args, ExceptionSink *xsink) const; 00173 }; 00174 00176 00180 class QoreClass { 00181 friend class BCList; 00182 friend class BCNode; 00183 friend class BCSMList; 00184 friend class qore_object_private; 00185 friend class qore_class_private; 00186 friend class QoreObject; 00187 friend class BCANode; 00188 friend class qore_method_private; 00189 friend class QoreMethodIterator; 00190 friend class QoreStaticMethodIterator; 00191 friend class ConstructorMethodFunction; 00192 00193 private: 00195 DLLLOCAL QoreClass& operator=(const QoreClass&); 00196 00198 struct qore_class_private *priv; 00199 00200 // private constructor only called when the class is copied 00201 DLLLOCAL QoreClass(qore_classid_t id, const char *nme); 00202 00203 DLLLOCAL void insertMethod(QoreMethod *o); 00204 DLLLOCAL void insertStaticMethod(QoreMethod *o); 00205 DLLLOCAL AbstractQoreNode *evalMethodGate(QoreObject *self, const char *nme, const QoreListNode *args, ExceptionSink *xsink) const; 00206 DLLLOCAL const QoreMethod *parseResolveSelfMethodIntern(const char *nme); 00207 00209 00218 DLLLOCAL AbstractQoreNode *evalMethod(QoreObject *self, const char *method_name, const QoreListNode *args, ExceptionSink *xsink) const; 00219 // This function must only be called from QoreObject 00220 DLLLOCAL AbstractQoreNode *evalMemberGate(QoreObject *self, const QoreString *nme, ExceptionSink *xsink) const; 00221 // This function must only be called from QoreObject 00222 DLLLOCAL void execMemberNotification(QoreObject *self, const char *mem, ExceptionSink *xsink) const; 00223 // This function must only be called from QoreObject and BCList 00224 DLLLOCAL bool execDeleteBlocker(QoreObject *self, ExceptionSink *xsink) const; 00225 // This function must only be called from QoreObject 00226 DLLLOCAL void execDestructor(QoreObject *self, ExceptionSink *xsink) const; 00227 // This function is only called from BCList 00228 DLLEXPORT const QoreClass *getClassIntern(qore_classid_t cid, bool &priv) const; 00229 00230 public: 00232 00237 DLLEXPORT QoreClass(const char *n_name, int n_domain = QDOM_DEFAULT); 00238 00240 00247 DLLEXPORT QoreClass(const char *n_name, int64 n_domain, const QoreTypeInfo *n_typeInfo); 00248 00250 00252 DLLEXPORT QoreClass(const QoreClass &old); 00253 00255 DLLEXPORT ~QoreClass(); 00256 00258 00279 DLLEXPORT void addMethod(const char *n_name, q_method_t meth, bool priv = false); 00280 00282 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, ...); 00283 00285 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()); 00286 00288 DLLEXPORT void addMethod2(const char *n_name, q_method2_t meth, bool priv = false); 00289 00291 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, ...); 00292 00294 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()); 00295 00297 00307 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()); 00308 00310 00315 DLLEXPORT void addStaticMethod(const char *n_name, q_func_t meth, bool priv = false); 00316 00318 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, ...); 00319 00321 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()); 00322 00324 DLLEXPORT void addStaticMethod2(const char *n_name, q_static_method2_t meth, bool priv = false); 00325 00327 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, ...); 00328 00330 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()); 00331 00333 00343 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()); 00344 00346 00357 DLLEXPORT void setDestructor(q_destructor_t m); 00358 00360 00371 DLLEXPORT void setDestructor2(q_destructor2_t m); 00372 00374 00386 DLLEXPORT void setDestructor3(const void *ptr, q_destructor3_t m); 00387 00389 00392 DLLEXPORT void setConstructor(q_constructor_t m); 00393 00395 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, ...); 00396 00398 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()); 00399 00401 00404 DLLEXPORT void setConstructor2(q_constructor2_t m); 00405 00407 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, ...); 00408 00410 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()); 00411 00413 00421 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()); 00422 00424 00427 DLLEXPORT void setSystemConstructor(q_system_constructor_t m); 00428 00430 00433 DLLEXPORT void setSystemConstructor2(q_system_constructor2_t m); 00434 00436 00447 DLLEXPORT void setCopy(q_copy_t m); 00448 00450 00461 DLLEXPORT void setCopy2(q_copy2_t m); 00462 00464 00476 DLLEXPORT void setCopy3(const void *ptr, q_copy3_t m); 00477 00479 00487 DLLEXPORT void setDeleteBlocker(q_delete_blocker_t m); 00488 00490 00494 DLLEXPORT bool isPrivateMember(const char *str) const; 00495 00497 00502 DLLEXPORT bool isPublicOrPrivateMember(const char *str, bool &priv) const; 00503 00505 00510 DLLEXPORT QoreObject *execConstructor(const QoreListNode *args, ExceptionSink *xsink) const; 00511 00513 00517 DLLEXPORT QoreObject *execSystemConstructor(int code = 0, ...) const; 00518 00520 00524 DLLEXPORT QoreObject *execCopy(QoreObject *old, ExceptionSink *xsink) const; 00525 00527 00532 DLLEXPORT const QoreMethod *findLocalMethod(const char *name) const; 00533 00535 00540 DLLEXPORT const QoreMethod *findLocalStaticMethod(const char *name) const; 00541 00543 00546 DLLEXPORT QoreListNode *getMethodList() const; 00547 00549 00552 DLLEXPORT QoreListNode *getStaticMethodList() const; 00553 00555 00563 DLLEXPORT QoreClass *getClass(qore_classid_t cid) const; 00564 00566 00573 DLLEXPORT const QoreClass *getClass(qore_classid_t cid, bool &priv) const; 00574 00576 DLLEXPORT int numMethods() const; 00577 00579 DLLEXPORT int numStaticMethods() const; 00580 00582 DLLEXPORT int numUserMethods() const; 00583 00585 DLLEXPORT int numStaticUserMethods() const; 00586 00588 DLLEXPORT bool hasCopy() const; 00589 00591 DLLEXPORT qore_classid_t getID() const; 00592 00594 DLLEXPORT bool isSystem() const; 00595 00597 DLLEXPORT bool hasMemberGate() const; 00598 00600 DLLEXPORT bool hasMethodGate() const; 00601 00603 DLLEXPORT bool hasMemberNotification() const; 00604 00606 00608 DLLEXPORT int getDomain() const; 00609 00611 00613 DLLEXPORT int64 getDomain64() const; 00614 00616 DLLEXPORT const char *getName() const; 00617 00619 // used at run-time 00620 DLLEXPORT const QoreMethod *findMethod(const char *nme) const; 00621 00623 // used at run-time 00624 DLLEXPORT const QoreMethod *findStaticMethod(const char *nme) const; 00625 00627 DLLEXPORT const QoreMethod *findMethod(const char *nme, bool &priv) const; 00628 00630 DLLEXPORT const QoreMethod *findStaticMethod(const char *nme, bool &priv) const; 00631 00633 00637 DLLEXPORT void addBuiltinBaseClass(QoreClass *qc, QoreListNode *xargs = 0); 00638 00640 00646 DLLEXPORT void addDefaultBuiltinBaseClass(QoreClass *qc, QoreListNode *xargs = 0); 00647 00649 00655 DLLEXPORT void addBuiltinVirtualBaseClass(QoreClass *qc); 00656 00658 00660 DLLEXPORT void setSynchronousClass(); 00661 00663 00666 DLLEXPORT const QoreMethod *getConstructor() const; 00667 00669 00672 DLLEXPORT const QoreMethod *getSystemConstructor() const; 00673 00675 00678 DLLEXPORT const QoreMethod *getDestructor() const; 00679 00681 00684 DLLEXPORT const QoreMethod *getCopyMethod() const; 00685 00687 00690 DLLEXPORT const QoreMethod *getMemberGateMethod() const; 00691 00693 00696 DLLEXPORT const QoreMethod *getMethodGate() const; 00697 00699 00702 DLLEXPORT const QoreMethod *getMemberNotificationMethod() const; 00703 00705 DLLEXPORT const QoreTypeInfo *getTypeInfo() const; 00706 00708 DLLEXPORT const QoreTypeInfo *getOrNothingTypeInfo() const; 00709 00711 DLLEXPORT void addPublicMember(const char *mem, const QoreTypeInfo *n_typeInfo, AbstractQoreNode *initial_value = 0); 00712 00714 DLLEXPORT void addPrivateMember(const char *mem, const QoreTypeInfo *n_typeInfo, AbstractQoreNode *initial_value = 0); 00715 00717 DLLEXPORT void setUserData(const void *ptr); 00718 00720 DLLEXPORT const void *getUserData() const; 00721 00723 DLLEXPORT void recheckBuiltinMethodHierarchy(); 00724 00726 00728 DLLEXPORT const QoreExternalMethodVariant *findUserMethodVariant(const char *name, const QoreMethod *&method, const type_vec_t &argTypeList) const; 00729 00731 00736 DLLEXPORT void addBuiltinConstant(const char *name, AbstractQoreNode *value, bool priv = false, const QoreTypeInfo *typeInfo = 0); 00737 00739 00744 DLLEXPORT void addBuiltinStaticVar(const char *name, AbstractQoreNode *value, bool priv = false, const QoreTypeInfo *typeInfo = 0); 00745 00747 DLLLOCAL QoreClass(); 00748 00749 DLLLOCAL void addMethod(QoreMethod *f); 00750 DLLLOCAL const QoreMethod *parseResolveSelfMethod(const char *nme); 00751 DLLLOCAL const QoreMethod *parseResolveSelfMethod(NamedScope *nme); 00752 DLLLOCAL void addDomain(int64 dom); 00753 DLLLOCAL void addBaseClassesToSubclass(QoreClass *sc, bool is_virtual); 00754 00755 // used when parsing, finds committed non-static methods within the entire class hierarchy (local class plus base classes) 00756 DLLLOCAL const QoreMethod *parseFindCommittedMethod(const char *nme); 00757 00759 00763 DLLLOCAL void parseAddPrivateMember(char *name, QoreMemberInfo *mInfo); 00764 00766 00770 DLLLOCAL void parseAddPublicMember(char *name, QoreMemberInfo *mInfo); 00771 00772 // adds public constants to pending list 00773 DLLLOCAL void parseAssimilatePublicConstants(ConstantList &cmap); 00774 // adds private constants to pending list 00775 DLLLOCAL void parseAssimilatePrivateConstants(ConstantList &cmap); 00776 // adds a single public constant to pending list 00777 DLLLOCAL void parseAddPublicConstant(const std::string &name, AbstractQoreNode *val); 00778 00779 // returns 0 for success, -1 for error 00780 DLLLOCAL int parseAddBaseClassArgumentList(BCAList *bcal); 00781 // only called when parsing, sets the name of the class 00782 DLLLOCAL void setName(const char *n); 00783 00784 DLLLOCAL void parseInit(); 00785 DLLLOCAL void parseCommit(); 00786 DLLLOCAL void parseRollback(); 00787 DLLLOCAL void resolveCopy(); 00788 DLLLOCAL qore_classid_t getIDForMethod() const; 00789 DLLLOCAL void parseSetBaseClassList(BCList *bcl); 00790 // get base class list to add virtual class indexes for private data 00791 DLLLOCAL BCSMList *getBCSMList() const; 00792 // returns true if the class has a delete_blocker function (somewhere in the hierarchy) 00793 DLLLOCAL bool has_delete_blocker() const; 00794 // one-time initialization 00795 DLLLOCAL void initialize(); 00796 // looks in current and pending method lists, non-static methods only, no initialization 00797 DLLLOCAL const QoreMethod *parseFindLocalMethod(const char *name) const; 00798 // looks in current and pending method lists for the entire hierarchy (local class plus base classes), non-static methods only 00799 DLLLOCAL const QoreMethod *parseFindMethodTree(const char *name); 00800 // looks in current and pending method lists for the entire hierarchy (local class plus base classes), static methods only 00801 DLLLOCAL const QoreMethod *parseFindStaticMethodTree(const char *name); 00802 // 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 00803 DLLLOCAL bool parseCheckHierarchy(const QoreClass *cls) const; 00804 // checks if the given member can be accessed at parse time 00805 DLLLOCAL int parseCheckMemberAccess(const char *mem, const QoreTypeInfo *&memberTypeInfo, int pflag) const; 00806 // finds the named member in the hierarchy, returns the class implementing the member 00807 DLLLOCAL const QoreClass *parseFindPublicPrivateMember(const char *mem, const QoreTypeInfo *&memberTypeInfo, bool &member_has_type_info, bool &priv) const; 00808 DLLLOCAL bool parseHasPublicMembersInHierarchy() const; 00809 DLLLOCAL bool runtimeGetMemberInfo(const char *mem, const QoreTypeInfo *&memberTypeInfo, bool &priv) const; 00810 DLLLOCAL bool runtimeHasPublicMembersInHierarchy() const; 00811 DLLLOCAL int initMembers(QoreObject *o, ExceptionSink *xsink) const; 00812 DLLLOCAL const QoreClass *parseGetClass(qore_classid_t cid, bool &priv) const; 00813 DLLLOCAL int addUserMethod(const char *mname, MethodVariantBase *f, bool n_static); 00814 // returns true if the class has one or more parent classes 00815 DLLLOCAL bool hasParentClass() const; 00816 DLLLOCAL QoreObject *execConstructor(const AbstractQoreFunctionVariant *variant, const QoreListNode *args, ExceptionSink *xsink) const; 00817 DLLLOCAL bool hasPrivateCopyMethod() const; 00818 // returns the status including the pending variant (if any) 00819 DLLLOCAL bool parseHasPrivateCopyMethod() const; 00820 DLLLOCAL const QoreMethod *parseGetConstructor() const; 00821 // returns true if the class implements a "methodGate" method, also in pending uncommitted methods 00822 DLLLOCAL bool parseHasMethodGate() const; 00823 // called when there is an empty public member declaration or a "no_public" declaration 00824 DLLLOCAL void parseSetEmptyPublicMemberDeclaration(); 00825 // unsets the public member flag for builtin classes 00826 DLLLOCAL void unsetPublicMemberFlag(); 00827 DLLLOCAL void parseInitPartial(); 00828 }; 00829 00831 class QoreMethodIterator { 00832 private: 00833 void *priv; 00834 00835 public: 00836 DLLEXPORT QoreMethodIterator(const QoreClass *qc); 00837 DLLEXPORT ~QoreMethodIterator(); 00838 DLLEXPORT bool next(); 00839 DLLEXPORT const QoreMethod *getMethod() const; 00840 }; 00841 00843 class QoreStaticMethodIterator { 00844 private: 00845 void *priv; 00846 00847 public: 00848 DLLEXPORT QoreStaticMethodIterator(const QoreClass *qc); 00849 DLLEXPORT ~QoreStaticMethodIterator(); 00850 DLLEXPORT bool next(); 00851 DLLEXPORT const QoreMethod *getMethod() const; 00852 }; 00853 00854 #endif // _QORE_QORECLASS_H