Qore Programming Language  0.8.3
include/qore/QoreClass.h (4311)
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 &paramTypeInfo) 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
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines