| Qore Programming Language - C/C++ Library 0.9.14

QoreClass.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3 QoreClass.h
4
5 Qore Programming Language
6
7 Copyright (C) 2003 - 2020 Qore Technologies, s.r.o.
8
9 Permission is hereby granted, free of charge, to any person obtaining a
10 copy of this software and associated documentation files (the "Software"),
11 to deal in the Software without restriction, including without limitation
12 the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 and/or sell copies of the Software, and to permit persons to whom the
14 Software is furnished to do so, subject to the following conditions:
15
16 The above copyright notice and this permission notice shall be included in
17 all copies or substantial portions of the Software.
18
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26
27 Note that the Qore library is released under a choice of three open-source
28 licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
29 information.
30 */
31
32 #ifndef _QORE_QORECLASS_H
33
34 #define _QORE_QORECLASS_H
35
36 #include <cstdarg>
37 #include <memory>
38 #include <string>
39
40 // all qore class IDs
41 DLLEXPORT extern qore_classid_t CID_AUTOGATE;
42 DLLEXPORT extern qore_classid_t CID_AUTOLOCK;
43 DLLEXPORT extern qore_classid_t CID_AUTOREADLOCK;
44 DLLEXPORT extern qore_classid_t CID_AUTOWRITELOCK;
45 DLLEXPORT extern qore_classid_t CID_CONDITION;
46 DLLEXPORT extern qore_classid_t CID_COUNTER;
47 DLLEXPORT extern qore_classid_t CID_DATASOURCE;
48 DLLEXPORT extern qore_classid_t CID_DATASOURCEPOOL;
49 DLLEXPORT extern qore_classid_t CID_FILE;
50 DLLEXPORT extern qore_classid_t CID_FTPCLIENT;
51 DLLEXPORT extern qore_classid_t CID_GATE;
52 DLLEXPORT extern qore_classid_t CID_GETOPT;
53 DLLEXPORT extern qore_classid_t CID_HTTPCLIENT;
54 DLLEXPORT extern qore_classid_t CID_MUTEX;
55 DLLEXPORT extern qore_classid_t CID_PROGRAM;
56 DLLEXPORT extern qore_classid_t CID_PROGRAMDEBUG;
57 DLLEXPORT extern qore_classid_t CID_QUEUE;
58 DLLEXPORT extern qore_classid_t CID_RWLOCK;
59 DLLEXPORT extern qore_classid_t CID_SSLCERTIFICATE;
60 DLLEXPORT extern qore_classid_t CID_SSLPRIVATEKEY;
61 DLLEXPORT extern qore_classid_t CID_SEQUENCE;
62 DLLEXPORT extern qore_classid_t CID_SOCKET;
63 DLLEXPORT extern qore_classid_t CID_TERMIOS;
64 DLLEXPORT extern qore_classid_t CID_INPUTSTREAM;
65 DLLEXPORT extern qore_classid_t CID_OUTPUTSTREAM;
66 DLLEXPORT extern qore_classid_t CID_INPUTSTREAMBASE;
67 DLLEXPORT extern qore_classid_t CID_OUTPUTSTREAMBASE;
68 DLLEXPORT extern qore_classid_t CID_PROGRAM;
69 DLLEXPORT extern qore_classid_t CID_SERIALIZABLE;
70
71 DLLEXPORT extern QoreClass* QC_QUEUE;
72 DLLEXPORT extern QoreClass* QC_HTTPCLIENT;
73 DLLEXPORT extern QoreClass* QC_SSLCERTIFICATE;
74 DLLEXPORT extern QoreClass* QC_SSLPRIVATEKEY;
75 DLLEXPORT extern QoreClass* QC_PROGRAM;
76 DLLEXPORT extern QoreClass* QC_SERIALIZABLE;
77
78 class BCList;
79 class BCSMList;
80 class BCAList;
81 class QoreObject;
82 class QoreClass;
83 class BCEAList;
84 class ParamList;
85 class QoreMemberInfo;
86 class BuiltinMethod;
87 class AbstractQoreFunctionVariant;
88 class AbstractFunctionSignature;
89 class UserMethod;
90 class BCANode;
91 class qore_method_private;
92 class MethodFunctionBase;
93 class NamedScope;
94 class ConstantList;
95 class MethodVariantBase;
96
97 class QoreExternalVariant;
98 class QoreExternalMethodVariant;
99 class QoreExternalNormalMember;
100 class QoreExternalStaticMember;
101 class QoreExternalProgramLocation;
102 class QoreExternalMethodFunction;
103 class QoreExternalMemberVarBase;
104 class QoreExternalStaticMember;
105 class QoreExternalNormalMember;
106 class QoreExternalConstant;
107
109
111 enum method_type_e {
112 MT_None = 0, // not a method function/variant
113 MT_Normal = 1,
114 MT_Static = 2,
115 MT_Constructor = 3,
116 MT_Destructor = 4,
117 MT_Copy = 5,
118 MT_Pseudo = 6,
119 };
120
122
125 class QoreMethod {
126 friend class StaticMethodCallNode;
127 friend class QoreObject;
128 friend class qore_class_private;
129 friend class qore_method_private;
130 friend class BCList;
131
132 private:
134 class qore_method_private* priv;
135
137 DLLLOCAL QoreMethod(const QoreMethod&);
138
140 DLLLOCAL QoreMethod& operator=(const QoreMethod&);
141
142 public:
144
146 DLLEXPORT bool isUser() const;
147
149
151 DLLEXPORT bool isBuiltin() const;
152
154
156 DLLEXPORT bool isPrivate() const;
157
159 DLLEXPORT ClassAccess getAccess() const;
160
162
165 DLLEXPORT bool isStatic() const;
166
168
171 DLLEXPORT const char* getName() const;
172
174
177 DLLEXPORT const std::string& getNameStr() const;
178
180 DLLEXPORT const QoreClass* getClass() const;
181
183 DLLEXPORT const char* getClassName() const;
184
186 DLLEXPORT bool existsVariant(const type_vec_t& paramTypeInfo) const;
187
188 /* returns the return type information for the method if it is available and if
189 there is only one return type (there can be more return types if the method is
190 overloaded)
191 */
192 DLLEXPORT const QoreTypeInfo* getUniqueReturnTypeInfo() const;
193
195
199 DLLEXPORT QoreValue execManaged(QoreObject* self, const QoreListNode* args, ExceptionSink* xsink) const;
200
202
204 DLLEXPORT method_type_e getMethodType() const;
205
207
209 DLLEXPORT const QoreExternalMethodFunction* getFunction() const;
210
211 DLLLOCAL QoreMethod(const QoreClass* p_class, MethodFunctionBase* n_func, bool n_static = false);
212
213 DLLLOCAL bool inMethod(const QoreObject* self) const;
214 DLLLOCAL QoreMethod* copy(const QoreClass* p_class) const;
215 DLLLOCAL void assign_class(const QoreClass* p_class);
216 // non-exported destructor
217 DLLLOCAL ~QoreMethod();
218 };
219
221
223 class AbstractQoreClassUserData {
224 public:
225 DLLEXPORT virtual ~AbstractQoreClassUserData();
226
228 virtual AbstractQoreClassUserData* copy() const = 0;
229
231 virtual void doDeref() = 0;
232 };
233
235
239 class QoreClass {
240 friend class BCList;
241 friend class BCNode;
242 friend class BCSMList;
243 friend class qore_object_private;
244 friend class qore_class_private;
245 friend class QoreObject;
246 friend class BCANode;
247 friend class qore_method_private;
248 friend class QoreMethodIterator;
249 friend class QoreStaticMethodIterator;
250 friend class ConstructorMethodFunction;
251
252 public:
254
262 DLLEXPORT QoreClass(std::string&& n_name, int64 n_domain = QDOM_DEFAULT);
263
265
273 DLLEXPORT QoreClass(const char* n_name, int64 n_domain = QDOM_DEFAULT);
274
276
283 DLLEXPORT explicit QoreClass(const char* n_name, int n_domain);
284
286
293 DLLEXPORT QoreClass(const char* n_name, int64 n_domain, const QoreTypeInfo* n_typeInfo);
294
296
298 DLLEXPORT QoreClass(const QoreClass& old);
299
301
303 DLLEXPORT virtual QoreClass* copyImport();
304
306
308 DLLEXPORT virtual QoreClass* copy();
309
311
313 DLLEXPORT QoreProgram* getProgram() const;
314
316
345 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, ...);
346
348
382 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());
383
385 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, ...);
386
388
390 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());
391
393 DLLEXPORT void addAbstractMethod(const char* n_name, ClassAccess access = Public, int64 n_flags = QCF_NO_FLAGS, const QoreTypeInfo* returnTypeInfo = 0, unsigned num_params = 0, ...);
394
396 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());
397
399
410 DLLEXPORT void setDestructor(q_destructor_t m);
411
413
425 DLLEXPORT void setDestructor(const void* ptr, q_external_destructor_t m);
426
428 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, ...);
429
431
433 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());
434
436
439 DLLEXPORT void setSystemConstructor(q_system_constructor_t m);
440
442
453 DLLEXPORT void setCopy(q_copy_t m);
454
456
468 DLLEXPORT void setCopy(const void* ptr, q_external_copy_t m);
469
471
479 DLLEXPORT void setDeleteBlocker(q_delete_blocker_t m);
480
482
486 DLLEXPORT void setSerializer(q_serializer_t m);
487
489
493 DLLEXPORT void setDeserializer(q_deserializer_t m);
494
496
498 DLLEXPORT q_serializer_t getSerializer() const;
499
501
503 DLLEXPORT q_deserializer_t getDeserializer() const;
504
506 DLLEXPORT void setFinal();
507
509
513 DLLEXPORT bool isPrivateMember(const char* str) const;
514
516
521 DLLEXPORT bool isPublicOrPrivateMember(const char* str, bool& priv) const;
522
524
530 DLLEXPORT QoreObject* execConstructor(const QoreListNode* args, ExceptionSink* xsink) const;
531
533
546 DLLEXPORT QoreObject* execConstructor(const QoreClass& obj_cls, const QoreListNode* args, bool allow_abstract,
547 ExceptionSink* xsink) const;
548
550
557 DLLEXPORT QoreObject* execConstructorVariant(const QoreExternalMethodVariant* mv, const QoreListNode *args, ExceptionSink* xsink) const;
558
560
564 DLLEXPORT QoreObject* execSystemConstructor(int code = 0, ...) const;
565
567
571 DLLEXPORT QoreObject* execCopy(QoreObject* old, ExceptionSink* xsink) const;
572
574
577 DLLEXPORT QoreListNode* getMethodList() const;
578
580
583 DLLEXPORT QoreListNode* getStaticMethodList() const;
584
586
594 DLLEXPORT QoreClass* getClass(qore_classid_t cid) const;
595
597
604 DLLEXPORT const QoreClass* getClass(qore_classid_t cid, bool& priv) const;
605
607
614 DLLEXPORT const QoreClass* getClass(const QoreClass& qc, bool& priv) const;
615
617 DLLEXPORT int numMethods() const;
618
620 DLLEXPORT int numStaticMethods() const;
621
623 DLLEXPORT int numUserMethods() const;
624
626 DLLEXPORT int numStaticUserMethods() const;
627
629 DLLEXPORT bool hasCopy() const;
630
632 DLLEXPORT qore_classid_t getID() const;
633
635 DLLEXPORT bool isSystem() const;
636
638
640 DLLEXPORT bool isModulePublic() const;
641
643
645 DLLEXPORT bool isAbstract() const;
646
648
650 DLLEXPORT bool isFinal() const;
651
653
655 DLLEXPORT bool isInjected() const;
656
658
660 DLLEXPORT bool isPseudoClass() const;
661
663
667 DLLEXPORT qore_type_t getPseudoClassType() const;
668
670
674 DLLEXPORT QoreValue evalPseudoMethod(const QoreValue n, const char* nme, const QoreListNode* args, ExceptionSink* xsink) const;
675
677
691 DLLEXPORT QoreValue evalPseudoMethod(const QoreMethod* m, const QoreExternalMethodVariant* variant, const QoreValue n, const QoreListNode* args, ExceptionSink* xsink) const;
692
694 DLLEXPORT void setSystem();
695
697 DLLEXPORT bool hasMemberGate() const;
698
700 DLLEXPORT bool hasMethodGate() const;
701
703 DLLEXPORT bool hasMemberNotification() const;
704
706
708 DLLEXPORT int64 getDomain() const;
709
711 DLLEXPORT const char* getName() const;
712
714
718 DLLEXPORT const QoreMethod* findMethod(const char* nme) const;
719
721
725 DLLEXPORT const QoreMethod* findStaticMethod(const char* nme) const;
726
728
732 DLLEXPORT const QoreMethod* findMethod(const char* nme, ClassAccess& access) const;
733
735
739 DLLEXPORT const QoreMethod* findStaticMethod(const char* nme, ClassAccess& access) const;
740
742
746 DLLEXPORT const QoreMethod* findLocalMethod(const char* name) const;
747
749
753 DLLEXPORT const QoreMethod* findLocalStaticMethod(const char* name) const;
754
756
759 DLLEXPORT void addBuiltinBaseClass(QoreClass* qc);
760
762
767 DLLEXPORT void addDefaultBuiltinBaseClass(QoreClass* qc);
768
770
776 DLLEXPORT void addBuiltinVirtualBaseClass(QoreClass* qc);
777
779
784 DLLEXPORT void addBaseClass(QoreClass* qc, bool virt = false);
785
787
789 DLLEXPORT void setSynchronousClass();
790
792
795 DLLEXPORT const QoreMethod* getConstructor() const;
796
798
801 DLLEXPORT const QoreMethod* getSystemConstructor() const;
802
804
807 DLLEXPORT const QoreMethod* getDestructor() const;
808
810
813 DLLEXPORT const QoreMethod* getCopyMethod() const;
814
816
819 DLLEXPORT const QoreMethod* getMemberGateMethod() const;
820
822
825 DLLEXPORT const QoreMethod* getMethodGate() const;
826
828
831 DLLEXPORT const QoreMethod* getMemberNotificationMethod() const;
832
834 DLLEXPORT const QoreTypeInfo* getTypeInfo() const;
835
837 DLLEXPORT const QoreTypeInfo* getOrNothingTypeInfo() const;
838
840 DLLEXPORT void addMember(const char* mem, ClassAccess access, const QoreTypeInfo* n_typeInfo, QoreValue initial_value = QoreValue());
841
843
845 DLLEXPORT void setUserData(const void* ptr);
846
848
850 DLLEXPORT const void* getUserData() const;
851
853
855 DLLEXPORT void setManagedUserData(AbstractQoreClassUserData* cud);
856
858
860 DLLEXPORT AbstractQoreClassUserData* getManagedUserData() const;
861
863
865 template <typename T>
866 DLLLOCAL T* getManagedUserData() const {
867 return static_cast<T*>(getManagedUserData());
868 }
869
871 DLLEXPORT void recheckBuiltinMethodHierarchy();
872
874
876 DLLEXPORT const QoreExternalMethodVariant* findUserMethodVariant(const char* name, const QoreMethod*& method, const type_vec_t& argTypeList) const;
877
879
884 DLLEXPORT void addBuiltinConstant(const char* name, QoreValue value, ClassAccess access = Public, const QoreTypeInfo* typeInfo = nullptr);
885
887
892 DLLEXPORT void addBuiltinStaticVar(const char* name, QoreValue value, ClassAccess access = Public, const QoreTypeInfo* typeInfo = nullptr);
893
895
901 DLLEXPORT void rescanParents();
902
904
906 DLLEXPORT void setPublicMemberFlag();
907
909
911 DLLEXPORT void setGateAccessFlag();
912
914
916 DLLEXPORT const QoreExternalNormalMember* findLocalMember(const char* name) const;
917
919
921 DLLEXPORT const QoreExternalStaticMember* findLocalStaticMember(const char* name) const;
922
924
928 DLLEXPORT std::string getNamespacePath(bool anchored = false) const;
929
931
933 DLLEXPORT bool isEqual(const QoreClass& cls) const;
934
936
938 DLLEXPORT BinaryNode* getBinaryHash() const;
939
941
943 DLLEXPORT int runtimeCheckInstantiateClass(ExceptionSink* xsink) const;
944
946
948 DLLEXPORT const QoreExternalConstant* findConstant(const char* name) const;
949
951
953 DLLEXPORT const QoreNamespace* getNamespace() const;
954
956
958 DLLEXPORT bool inHierarchy(const QoreClass& cls, ClassAccess& n_access) const;
959
961
963 DLLEXPORT bool hasTransientMember() const;
964
966
968 DLLEXPORT const char* getModuleName() const;
969
970 // used when parsing, finds committed non-static methods within the entire class hierarchy (local class plus base classes)
971 DLLLOCAL const QoreMethod* parseFindCommittedMethod(const char* nme);
972
973 // returns 0 for success, -1 for error
974 DLLLOCAL int parseAddBaseClassArgumentList(BCAList* bcal);
975 // only called when parsing, sets the name of the class
976 DLLLOCAL void setName(const char* n);
977
978 DLLLOCAL qore_classid_t getIDForMethod() const;
979 // get base class list to add virtual class indexes for private data
980 DLLLOCAL BCSMList* getBCSMList() const;
981 // returns true if the class has a delete_blocker function (somewhere in the hierarchy)
982 DLLLOCAL bool has_delete_blocker() const;
983
984 DLLLOCAL bool parseHasPublicMembersInHierarchy() const;
985 DLLLOCAL bool runtimeHasPublicMembersInHierarchy() const;
986
987 // returns true if the class has one or more parent classes
988 DLLLOCAL bool hasParentClass() const;
989 DLLLOCAL bool hasPrivateCopyMethod() const;
990 // returns the status including the pending variant (if any)
991 DLLLOCAL bool parseHasPrivateCopyMethod() const;
992 DLLLOCAL const QoreMethod* parseGetConstructor() const;
993 // returns true if the class implements a "methodGate" method, also in pending uncommitted methods
994 DLLLOCAL bool parseHasMethodGate() const;
995 // called when there is an empty public member declaration or a "no_public" declaration
996 DLLLOCAL void parseSetEmptyPublicMemberDeclaration();
997 // unsets the public member flag for builtin classes
998 DLLLOCAL void unsetPublicMemberFlag();
999
1000 protected:
1002 DLLEXPORT virtual ~QoreClass();
1003
1005 DLLEXPORT QoreClass();
1006
1007 private:
1009 QoreClass& operator=(const QoreClass&) = delete;
1010
1012 class qore_class_private* priv;
1013
1014 DLLLOCAL void insertMethod(QoreMethod* o);
1015 DLLLOCAL void insertStaticMethod(QoreMethod* o);
1016 DLLLOCAL QoreValue evalMethodGate(QoreObject* self, const char* nme, const QoreListNode* args, ExceptionSink* xsink) const;
1017 DLLLOCAL const QoreMethod* parseResolveSelfMethodIntern(const char* nme);
1018
1020
1031 DLLLOCAL QoreValue evalMethod(QoreObject* self, const char* method_name, const QoreListNode* args, ExceptionSink* xsink) const;
1032
1033 // This function must only be called from QoreObject
1034 DLLLOCAL void execMemberNotification(QoreObject* self, const char* mem, ExceptionSink* xsink) const;
1035 // This function must only be called from QoreObject and BCList
1036 DLLLOCAL bool execDeleteBlocker(QoreObject* self, ExceptionSink* xsink) const;
1037 // This function must only be called from QoreObject
1038 DLLLOCAL void execDestructor(QoreObject* self, ExceptionSink* xsink) const;
1039 };
1040
1042 class QoreMethodIterator {
1043 private:
1044 void* priv;
1045
1046 public:
1047 DLLEXPORT QoreMethodIterator(const QoreClass& qc);
1048 DLLEXPORT ~QoreMethodIterator();
1049 DLLEXPORT bool next();
1050 DLLEXPORT const QoreMethod* getMethod() const;
1051 };
1052
1054 class QoreStaticMethodIterator {
1055 private:
1056 void* priv;
1057
1058 public:
1059 DLLEXPORT QoreStaticMethodIterator(const QoreClass& qc);
1060 DLLEXPORT ~QoreStaticMethodIterator();
1061 DLLEXPORT bool next();
1062 DLLEXPORT const QoreMethod* getMethod() const;
1063 };
1064
1066
1068 class QoreClassHolder {
1069 public:
1071 DLLLOCAL QoreClassHolder(QoreClass* c) : c(c) {
1072 }
1073
1075 DLLEXPORT ~QoreClassHolder();
1076
1078 DLLLOCAL operator QoreClass*() const {
1079 return c;
1080 }
1081
1083 DLLLOCAL QoreClass* release() {
1084 auto rv = c;
1085 c = 0;
1086 return rv;
1087 }
1088
1089 private:
1091 QoreClass* c;
1092 };
1093
1095 class QoreBuiltinClass : public QoreClass {
1096 public:
1098 DLLEXPORT QoreBuiltinClass(const char* name, int64 n_domain = QDOM_DEFAULT);
1099
1101 DLLEXPORT QoreBuiltinClass(const QoreBuiltinClass& old);
1102
1103 protected:
1105 DLLEXPORT QoreBuiltinClass();
1106 };
1107
1109
1111 class QoreParentClassIterator final {
1112 public:
1114 DLLEXPORT QoreParentClassIterator(const QoreClass& cls);
1115
1117 DLLEXPORT ~QoreParentClassIterator();
1118
1120 DLLEXPORT bool next();
1121
1123 DLLEXPORT bool valid() const;
1124
1126 DLLEXPORT const QoreClass& getParentClass() const;
1127
1129 DLLEXPORT ClassAccess getAccess() const;
1130
1131 private:
1132 std::unique_ptr<class qore_parent_class_iterator_private> priv;
1133 };
1134
1136
1138 class QoreClassMemberIterator final {
1139 public:
1141 DLLEXPORT QoreClassMemberIterator(const QoreClass& cls);
1142
1144 DLLEXPORT ~QoreClassMemberIterator();
1145
1147 DLLEXPORT bool next();
1148
1150 DLLEXPORT bool valid() const;
1151
1153 DLLEXPORT const QoreExternalNormalMember& getMember() const;
1154
1156 DLLEXPORT const char* getName() const;
1157
1158 private:
1159 std::unique_ptr<class qore_class_member_iterator_private> priv;
1160 };
1161
1163
1165 class QoreClassStaticMemberIterator final {
1166 public:
1168 DLLEXPORT QoreClassStaticMemberIterator(const QoreClass& cls);
1169
1171 DLLEXPORT ~QoreClassStaticMemberIterator();
1172
1174 DLLEXPORT bool next();
1175
1177 DLLEXPORT bool valid() const;
1178
1180 DLLEXPORT const QoreExternalStaticMember& getMember() const;
1181
1183 DLLEXPORT const char* getName() const;
1184
1185 private:
1186 std::unique_ptr<class qore_class_static_member_iterator_private> priv;
1187 };
1188
1190
1192 class QoreClassConstantIterator final {
1193 public:
1195 DLLEXPORT QoreClassConstantIterator(const QoreClass& cls);
1196
1198 DLLEXPORT ~QoreClassConstantIterator();
1199
1201 DLLEXPORT bool next();
1202
1204 DLLEXPORT bool valid() const;
1205
1207 DLLEXPORT const QoreExternalConstant& get() const;
1208
1209 private:
1210 std::unique_ptr<class qore_class_constant_iterator> priv;
1211 };
1212
1214
1218 class QoreClassHierarchyIterator final {
1219 public:
1221 DLLEXPORT QoreClassHierarchyIterator(const QoreClass& cls);
1222
1224 DLLEXPORT ~QoreClassHierarchyIterator();
1225
1227 DLLEXPORT bool next();
1228
1230 DLLEXPORT bool valid() const;
1231
1233 DLLEXPORT const QoreClass& get() const;
1234
1236
1238 DLLEXPORT bool isVirtual() const;
1239
1240 private:
1241 std::unique_ptr<class qore_class_hierarchy_iterator> priv;
1242 };
1243
1245
1249 class QoreClassDestructorHierarchyIterator {
1250 public:
1252 DLLEXPORT QoreClassDestructorHierarchyIterator(const QoreClass* cls);
1253
1255 DLLEXPORT ~QoreClassDestructorHierarchyIterator();
1256
1258 DLLEXPORT bool next();
1259
1261 DLLEXPORT bool valid() const;
1262
1264 DLLEXPORT const QoreClass* get() const;
1265
1267
1269 DLLEXPORT bool isVirtual() const;
1270
1271 private:
1272 class qore_class_destructor_hierarchy_iterator* priv;
1273 };
1274
1275 DLLEXPORT const char* get_access_string(ClassAccess access);
1276
1277 #endif // _QORE_QORECLASS_H
QDOM_DEFAULT
#define QDOM_DEFAULT
the default domain (no domain)
Definition: Restrictions.h:156
AbstractQoreClassUserData
an abstract class for class-specific external user data
Definition: QoreClass.h:223
AbstractQoreClassUserData::copy
virtual AbstractQoreClassUserData * copy() const =0
for reference-counted classes, returns the same object with the reference count incremented
AbstractQoreClassUserData::doDeref
virtual void doDeref()=0
for non-reference counted classes, deletes the object immediately
BinaryNode
holds arbitrary binary data
Definition: BinaryNode.h:41
ExceptionSink
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
QoreBuiltinClass
creates a builtin class
Definition: QoreClass.h:1095
QoreBuiltinClass::QoreBuiltinClass
DLLEXPORT QoreBuiltinClass()
for use with QoreClass::copyImport()
QoreClassConstantIterator
iterates class constants
Definition: QoreClass.h:1192
QoreClassConstantIterator::next
DLLEXPORT bool next()
returns advances to the next element (or to the first element if starting to iterate) and returns tru...
QoreClassConstantIterator::valid
DLLEXPORT bool valid() const
returns true if the iterator is pointing at a valid element
QoreClassConstantIterator::QoreClassConstantIterator
DLLEXPORT QoreClassConstantIterator(const QoreClass &cls)
creates the iterator; call next() to start iterating
QoreClassConstantIterator::get
DLLEXPORT const QoreExternalConstant & get() const
returns the
QoreClassConstantIterator::~QoreClassConstantIterator
DLLEXPORT ~QoreClassConstantIterator()
destroys the object
QoreClassDestructorHierarchyIterator
iterates the class hierarchy in the order of destructor execution
Definition: QoreClass.h:1249
QoreClassDestructorHierarchyIterator::~QoreClassDestructorHierarchyIterator
DLLEXPORT ~QoreClassDestructorHierarchyIterator()
destroys the object
QoreClassDestructorHierarchyIterator::next
DLLEXPORT bool next()
returns advances to the next element (or to the first element if starting to iterate) and returns tru...
QoreClassDestructorHierarchyIterator::isVirtual
DLLEXPORT bool isVirtual() const
returns true if the class has virtual inheritance, meaning that it is a builtin class without its own...
QoreClassDestructorHierarchyIterator::valid
DLLEXPORT bool valid() const
returns true if the iterator is pointing at a valid element
QoreClassDestructorHierarchyIterator::get
DLLEXPORT const QoreClass * get() const
returns the parent class
QoreClassDestructorHierarchyIterator::QoreClassDestructorHierarchyIterator
DLLEXPORT QoreClassDestructorHierarchyIterator(const QoreClass *cls)
creates the iterator; call next() to start iterating
QoreClassHierarchyIterator
iterates the class hierarchy in the order of constructor execution
Definition: QoreClass.h:1218
QoreClassHierarchyIterator::QoreClassHierarchyIterator
DLLEXPORT QoreClassHierarchyIterator(const QoreClass &cls)
creates the iterator; call next() to start iterating
QoreClassHierarchyIterator::isVirtual
DLLEXPORT bool isVirtual() const
returns true if the class has virtual inheritance, meaning that it is a builtin class without its own...
QoreClassHierarchyIterator::valid
DLLEXPORT bool valid() const
returns true if the iterator is pointing at a valid element
QoreClassHierarchyIterator::get
DLLEXPORT const QoreClass & get() const
returns the parent class
QoreClassHierarchyIterator::~QoreClassHierarchyIterator
DLLEXPORT ~QoreClassHierarchyIterator()
destroys the object
QoreClassHierarchyIterator::next
DLLEXPORT bool next()
returns advances to the next element (or to the first element if starting to iterate) and returns tru...
QoreClassHolder
allows for temporary storage of a QoreClass pointer
Definition: QoreClass.h:1068
QoreClassHolder::QoreClassHolder
DLLLOCAL QoreClassHolder(QoreClass *c)
creates the object
Definition: QoreClass.h:1071
QoreClassHolder::release
DLLLOCAL QoreClass * release()
releases the QoreClass*
Definition: QoreClass.h:1083
QoreClassHolder::~QoreClassHolder
DLLEXPORT ~QoreClassHolder()
deletes the QoreClass object if still managed
QoreClass
defines a Qore-language class
Definition: QoreClass.h:239
QoreClass::isPseudoClass
DLLEXPORT bool isPseudoClass() const
returns true if the class is a pseudo class
QoreClass::findStaticMethod
DLLEXPORT const QoreMethod * findStaticMethod(const char *nme) const
finds a static method in the class hierarchy
QoreClass::setDeleteBlocker
DLLEXPORT void setDeleteBlocker(q_delete_blocker_t m)
sets the deleteBlocker method for the class
QoreClass::findLocalStaticMember
DLLEXPORT const QoreExternalStaticMember * findLocalStaticMember(const char *name) const
Finds the given local static member or returns nullptr.
QoreClass::getMethodGate
DLLEXPORT const QoreMethod * getMethodGate() const
returns a const pointer to the QoreMethod object of the methodGate method, if any is set
QoreClass::setDestructor
DLLEXPORT void setDestructor(q_destructor_t m)
sets the builtin destructor method for the class
QoreClass::~QoreClass
virtual DLLEXPORT ~QoreClass()
Deletes the object and frees all memory.
QoreClass::getNamespace
DLLEXPORT const QoreNamespace * getNamespace() const
Returns the namespace that owns this class.
QoreClass::hasTransientMember
DLLEXPORT bool hasTransientMember() const
Returns true if the class has at least one locally-declared transient member.
QoreClass::getDomain
DLLEXPORT int64 getDomain() const
returns the functional domain of the class
QoreClass::addBuiltinVirtualBaseClass
DLLEXPORT void addBuiltinVirtualBaseClass(QoreClass *qc)
sets "virtual" base class for a class, meaning that the base class data is appropriate for use in the...
QoreClass::findLocalMember
DLLEXPORT const QoreExternalNormalMember * findLocalMember(const char *name) const
Finds the given local member or returns nullptr.
QoreClass::addBuiltinConstant
DLLEXPORT void addBuiltinConstant(const char *name, QoreValue value, ClassAccess access=Public, const QoreTypeInfo *typeInfo=nullptr)
adds a class constant to the class
QoreClass::inHierarchy
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,...
QoreClass::addAbstractMethod
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...
QoreClass::setSerializer
DLLEXPORT void setSerializer(q_serializer_t m)
sets the serializer method for builtin classes
QoreClass::isAbstract
DLLEXPORT bool isAbstract() const
returns true if the class has at least one unimplemented abstract method variant
QoreClass::isPublicOrPrivateMember
DLLEXPORT bool isPublicOrPrivateMember(const char *str, bool &priv) const
returns true if the member is private or public
QoreClass::getMethodList
DLLEXPORT QoreListNode * getMethodList() const
returns a list strings of all non-static methods in the class, the caller owns the reference count re...
QoreClass::getClass
DLLEXPORT 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 ...
QoreClass::setManagedUserData
DLLEXPORT void setManagedUserData(AbstractQoreClassUserData *cud)
sets a pointer to user-specific data in the class
QoreClass::isPrivateMember
DLLEXPORT bool isPrivateMember(const char *str) const
returns true if the member is private
QoreClass::getProgram
DLLEXPORT QoreProgram * getProgram() const
Returns the owning QoreProgram object (if not the static system namespace)
QoreClass::copy
virtual DLLEXPORT QoreClass * copy()
Called when a class is copied.
QoreClass::addDefaultBuiltinBaseClass
DLLEXPORT void addDefaultBuiltinBaseClass(QoreClass *qc)
make a builtin class a child of another builtin class and ensures that the given class's private data...
QoreClass::QoreClass
DLLEXPORT QoreClass()
For use with QoreClass::copyImport()
QoreClass::execSystemConstructor
DLLEXPORT QoreObject * execSystemConstructor(int code=0,...) const
creates a new "system" object for use as the value of a constant, executes the system constructor on ...
QoreClass::isEqual
DLLEXPORT bool isEqual(const QoreClass &cls) const
returns true if the classes are equal
QoreClass::numUserMethods
DLLEXPORT int numUserMethods() const
returns the number of non-static user methods in this class
QoreClass::setDeserializer
DLLEXPORT void setDeserializer(q_deserializer_t m)
sets the deserializer method for builtin classes
QoreClass::execCopy
DLLEXPORT QoreObject * 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 exce...
QoreClass::setUserData
DLLEXPORT void setUserData(const void *ptr)
sets a pointer to user-specific data in the class
QoreClass::runtimeCheckInstantiateClass
DLLEXPORT int runtimeCheckInstantiateClass(ExceptionSink *xsink) const
Throws a Qore-language exception if the class cannot be instantiated.
QoreClass::rescanParents
DLLEXPORT void rescanParents()
rescan builtin parent classes in a class hierarchy; to be used with out-of-order class hierarchy cons...
QoreClass::getStaticMethodList
DLLEXPORT QoreListNode * getStaticMethodList() const
returns a list strings of all static methods in the class, the caller owns the reference count return...
QoreClass::setFinal
DLLEXPORT void setFinal()
sets the final flag of the class
QoreClass::findConstant
DLLEXPORT const QoreExternalConstant * findConstant(const char *name) const
Finds the given constant or returns nullptr if not found.
QoreClass::getConstructor
DLLEXPORT const QoreMethod * getConstructor() const
returns a const pointer to the QoreMethod object of the constuctor method, if any is set
QoreClass::setSystem
DLLEXPORT void setSystem()
marks the class as a builtin class
QoreClass::setGateAccessFlag
DLLEXPORT void setGateAccessFlag()
sets the class's gate access flag so that memberGate() and methodGate() methods will be called with a...
QoreClass::numStaticUserMethods
DLLEXPORT int numStaticUserMethods() const
returns the number of static user methods in this class
QoreClass::getCopyMethod
DLLEXPORT const QoreMethod * getCopyMethod() const
returns a const pointer to the QoreMethod object of the destructor method, if any is set
QoreClass::findMethod
DLLEXPORT const QoreMethod * findMethod(const char *nme) const
finds a normal (non-static) method in the class hierarchy
QoreClass::getMemberGateMethod
DLLEXPORT const QoreMethod * getMemberGateMethod() const
returns a const pointer to the QoreMethod object of the memberGate method, if any is set
QoreClass::findLocalMethod
DLLEXPORT const QoreMethod * findLocalMethod(const char *name) const
finds a normal (non-static) method in the class hierarchy
QoreClass::execConstructor
DLLEXPORT QoreObject * execConstructor(const QoreListNode *args, ExceptionSink *xsink) const
creates a new object and executes the constructor on it and returns the new object
QoreClass::execConstructorVariant
DLLEXPORT QoreObject * 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
QoreClass::isModulePublic
DLLEXPORT bool isModulePublic() const
returns true if the class has its module public flag set
QoreClass::addBuiltinStaticVar
DLLEXPORT void addBuiltinStaticVar(const char *name, QoreValue value, ClassAccess access=Public, const QoreTypeInfo *typeInfo=nullptr)
adds a static variable to the class
QoreClass::recheckBuiltinMethodHierarchy
DLLEXPORT void recheckBuiltinMethodHierarchy()
rechecks for inherited methods in base classes when adding builtin classes
QoreClass::getID
DLLEXPORT qore_classid_t getID() const
returns the class ID of this class
QoreClass::hasMemberGate
DLLEXPORT bool hasMemberGate() const
returns true if the class implements a "memberGate" method
QoreClass::getBinaryHash
DLLEXPORT BinaryNode * getBinaryHash() const
returns a binary hash for the class's API
QoreClass::numMethods
DLLEXPORT int numMethods() const
returns the number of non-static methods in this class (user and builtin)
QoreClass::getUserData
DLLEXPORT const void * getUserData() const
retrieves the user-specific data pointer
QoreClass::addMember
DLLEXPORT void addMember(const char *mem, ClassAccess access, const QoreTypeInfo *n_typeInfo, QoreValue initial_value=QoreValue())
adds a member
QoreClass::getPseudoClassType
DLLEXPORT qore_type_t getPseudoClassType() const
returns a pseudo-classes base type
QoreClass::hasCopy
DLLEXPORT bool hasCopy() const
returns true if the class implements a copy method
QoreClass::hasMethodGate
DLLEXPORT bool hasMethodGate() const
returns true if the class implements a "methodGate" method
QoreClass::getTypeInfo
DLLEXPORT const QoreTypeInfo * getTypeInfo() const
returns the type information structure for this class
QoreClass::getDeserializer
DLLEXPORT q_deserializer_t getDeserializer() const
returns the deserializer method or nullptr if not present
QoreClass::addBuiltinBaseClass
DLLEXPORT void addBuiltinBaseClass(QoreClass *qc)
make a builtin class a child of another builtin class
QoreClass::addBaseClass
DLLEXPORT void addBaseClass(QoreClass *qc, bool virt=false)
Adds a base class to the current class.
QoreClass::setPublicMemberFlag
DLLEXPORT void setPublicMemberFlag()
sets the class's public member flag so that undeclared member references will fail
QoreClass::getManagedUserData
DLLEXPORT AbstractQoreClassUserData * getManagedUserData() const
retrieves the user-specific data pointer
QoreClass::isSystem
DLLEXPORT bool isSystem() const
returns true if the class is a builtin class
QoreClass::copyImport
virtual DLLEXPORT QoreClass * copyImport()
Called when a class is copied for import.
QoreClass::numStaticMethods
DLLEXPORT int numStaticMethods() const
returns the number of static methods in this class (user and builtin)
QoreClass::findLocalStaticMethod
DLLEXPORT const QoreMethod * findLocalStaticMethod(const char *name) const
finds a static method in the class hierarchy
QoreClass::hasMemberNotification
DLLEXPORT bool hasMemberNotification() const
returns true if the class implements a "memberNotification" method
QoreClass::addMethod
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
QoreClass::getOrNothingTypeInfo
DLLEXPORT const QoreTypeInfo * getOrNothingTypeInfo() const
returns the "or nothing" type information structure for this class
QoreClass::getModuleName
DLLEXPORT const char * getModuleName() const
Returns the module name the class was loaded from or nullptr if it is a builtin class.
QoreClass::getSerializer
DLLEXPORT q_serializer_t getSerializer() const
returns the serializer method or nullptr if not present
QoreClass::evalPseudoMethod
DLLEXPORT QoreValue evalPseudoMethod(const QoreValue n, const char *nme, const QoreListNode *args, ExceptionSink *xsink) const
evaluates a pseudo-method on a pseudo-class
QoreClass::isInjected
DLLEXPORT bool isInjected() const
returns true if the class has been injected as a dependency injection
QoreClass::getName
DLLEXPORT const char * getName() const
returns the class name
QoreClass::setCopy
DLLEXPORT void setCopy(q_copy_t m)
sets the builtin copy method for the class
QoreClass::addConstructor
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,...
QoreClass::getSystemConstructor
DLLEXPORT const QoreMethod * getSystemConstructor() const
returns a const pointer to the QoreMethod object of the constuctor method, if any is set
QoreClass::getMemberNotificationMethod
DLLEXPORT const QoreMethod * getMemberNotificationMethod() const
returns a const pointer to the QoreMethod object of the memberNotification method,...
QoreClass::getNamespacePath
DLLEXPORT std::string getNamespacePath(bool anchored=false) const
returns the full namespace path of the class
QoreClass::findUserMethodVariant
DLLEXPORT const QoreExternalMethodVariant * 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
QoreClass::setSystemConstructor
DLLEXPORT void setSystemConstructor(q_system_constructor_t m)
sets the builtin constructor for system objects (ex: used as constant values)
QoreClass::isFinal
DLLEXPORT bool isFinal() const
returns true if the class is final
QoreClass::getDestructor
DLLEXPORT const QoreMethod * getDestructor() const
returns a const pointer to the QoreMethod object of the constructor method, if any is set
QoreClass::setSynchronousClass
DLLEXPORT void setSynchronousClass()
call this function if your builtin class requires *all* methods (except the constructor) to be run in...
QoreClass::addStaticMethod
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,...
QoreClassMemberIterator
iterates normal (non-static) members of a class
Definition: QoreClass.h:1138
QoreClassMemberIterator::getMember
DLLEXPORT const QoreExternalNormalMember & getMember() const
returns the member
QoreClassMemberIterator::getName
DLLEXPORT const char * getName() const
returns the member's name
QoreClassMemberIterator::~QoreClassMemberIterator
DLLEXPORT ~QoreClassMemberIterator()
destroys the object
QoreClassMemberIterator::next
DLLEXPORT bool next()
returns advances to the next element (or to the first element if starting to iterate) and returns tru...
QoreClassMemberIterator::valid
DLLEXPORT bool valid() const
returns true if the iterator is pointing at a valid element
QoreClassMemberIterator::QoreClassMemberIterator
DLLEXPORT QoreClassMemberIterator(const QoreClass &cls)
creates the iterator; call next() to start iterating
QoreClassStaticMemberIterator
iterates static members of a class
Definition: QoreClass.h:1165
QoreClassStaticMemberIterator::next
DLLEXPORT bool next()
returns advances to the next element (or to the first element if starting to iterate) and returns tru...
QoreClassStaticMemberIterator::valid
DLLEXPORT bool valid() const
returns true if the iterator is pointing at a valid element
QoreClassStaticMemberIterator::getName
DLLEXPORT const char * getName() const
returns the member's name
QoreClassStaticMemberIterator::QoreClassStaticMemberIterator
DLLEXPORT QoreClassStaticMemberIterator(const QoreClass &cls)
creates the iterator; call next() to start iterating
QoreClassStaticMemberIterator::getMember
DLLEXPORT const QoreExternalStaticMember & getMember() const
returns the member
QoreClassStaticMemberIterator::~QoreClassStaticMemberIterator
DLLEXPORT ~QoreClassStaticMemberIterator()
destroys the object
QoreExternalConstant
external wrapper class for constants
Definition: QoreReflection.h:200
QoreExternalMemberVarBase
external wrapper base class for class members
Definition: QoreReflection.h:137
QoreExternalMethodVariant
external wrapper class for method variants
Definition: QoreReflection.h:90
QoreExternalNormalMember
external wrapper base class for class normal members
Definition: QoreReflection.h:174
QoreExternalProgramLocation
external wrapper class for source code location information
Definition: QoreReflection.h:187
QoreExternalStaticMember
external wrapper base class for class static members
Definition: QoreReflection.h:153
QoreExternalVariant
external wrapper class for function and call variants
Definition: QoreReflection.h:38
QoreListNode
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
QoreMethod
a method in a QoreClass
Definition: QoreClass.h:125
QoreMethod::execManaged
DLLEXPORT QoreValue execManaged(QoreObject *self, const QoreListNode *args, ExceptionSink *xsink) const
evaluates the method and returns the value, does not reference the object for the call
QoreMethod::isBuiltin
DLLEXPORT bool isBuiltin() const
returns true if all variants of the method are builtin variants
QoreMethod::existsVariant
DLLEXPORT bool existsVariant(const type_vec_t &paramTypeInfo) const
returns true if a variant with the given parameter signature already exists in the method
QoreMethod::isStatic
DLLEXPORT bool isStatic() const
returns true if the method is static
QoreMethod::getFunction
DLLEXPORT const QoreExternalMethodFunction * getFunction() const
returns the function for the method
QoreMethod::isUser
DLLEXPORT bool isUser() const
returns true if all variants of the method are user variants
QoreMethod::getAccess
DLLEXPORT ClassAccess getAccess() const
returns the lowest access code of all variants in the method
QoreMethod::getNameStr
DLLEXPORT const std::string & getNameStr() const
returns the method's name
QoreMethod::isPrivate
DLLEXPORT bool isPrivate() const
returns true if all overloaded variants of a methods are private or class internal,...
QoreMethod::getClassName
DLLEXPORT const char * getClassName() const
returns the class name for the method
QoreMethod::getName
DLLEXPORT const char * getName() const
returns the method's name
QoreMethod::getMethodType
DLLEXPORT method_type_e getMethodType() const
returns the type of method
QoreMethod::getClass
DLLEXPORT const QoreClass * getClass() const
returns a pointer to the parent class
QoreMethodIterator
To be used to iterate through a class's normal (non-static) methods.
Definition: QoreClass.h:1042
QoreNamespace
contains constants, classes, and subnamespaces in QoreProgram objects
Definition: QoreNamespace.h:65
QoreObject
the implementation of Qore's object data type, reference counted, dynamically-allocated only
Definition: QoreObject.h:61
QoreParentClassIterator
iterates parent classes for a class with inheritance access information
Definition: QoreClass.h:1111
QoreParentClassIterator::getParentClass
DLLEXPORT const QoreClass & getParentClass() const
returns the parent class
QoreParentClassIterator::~QoreParentClassIterator
DLLEXPORT ~QoreParentClassIterator()
destroys the object
QoreParentClassIterator::valid
DLLEXPORT bool valid() const
returns true if the iterator is pointing at a valid element
QoreParentClassIterator::next
DLLEXPORT bool next()
returns advances to the next element (or to the first element if starting to iterate) and returns tru...
QoreParentClassIterator::QoreParentClassIterator
DLLEXPORT QoreParentClassIterator(const QoreClass &cls)
creates the iterator; call next() to start iterating
QoreParentClassIterator::getAccess
DLLEXPORT ClassAccess getAccess() const
returns the access of the parent class
QoreProgram
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only
Definition: QoreProgram.h:126
QoreStaticMethodIterator
To be used to iterate through a class's static methods.
Definition: QoreClass.h:1054
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_serializer_t
QoreHashNode *(* q_serializer_t)(const QoreObject &self, const AbstractPrivateData &data, QoreSerializationContext &context, ExceptionSink *xsink)
the type used for builtin QoreClass serializer method signatures
Definition: common.h:446
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
qore_type_t
int16_t qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode)
Definition: common.h:70
q_external_static_method_t
QoreValue(* q_external_static_method_t)(const QoreMethod &method, const void *ptr, const QoreListNode *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for external static methods
Definition: common.h:358
q_func_n_t
QoreValue(* q_func_n_t)(const QoreListNode *args, q_rt_flags_t flags, ExceptionSink *xsink)
the type used for builtin function signatures
Definition: common.h:307
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
q_system_constructor_t
void(* q_system_constructor_t)(QoreObject *self, int code, va_list args)
the type used for builtin QoreClass system constructor method signatures
Definition: common.h:390
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
q_external_constructor_t
void(* q_external_constructor_t)(const QoreMethod &method, const void *ptr, QoreObject *self, const QoreListNode *args, q_rt_flags_t rtflags, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:378
type_vec_t
std::vector< const QoreTypeInfo * > type_vec_t
vector of type information for parameter lists
Definition: common.h:251
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_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
qore_classid_t
unsigned qore_classid_t
used for the unique class ID for QoreClass objects
Definition: common.h:79
name_vec_t
std::vector< std::string > name_vec_t
vector of parameter names for parameter lists
Definition: common.h:257
q_deserializer_t
void(* q_deserializer_t)(QoreObject &self, const QoreHashNode *sdata, QoreDeserializationContext &context, ExceptionSink *xsink)
the type used for builtin QoreClass deserializer method signatures
Definition: common.h:458
q_delete_blocker_t
bool(* q_delete_blocker_t)(QoreObject *self, AbstractPrivateData *private_data)
the typed used for QoreClass deleteBlocker signatures
Definition: common.h:436
int64
long long int64
64bit integer type, cannot use int64_t here since it breaks the API on some 64-bit systems due to equ...
Definition: common.h:260
q_constructor_n_t
void(* q_constructor_n_t)(QoreObject *self, const QoreListNode *args, q_rt_flags_t rtflags, ExceptionSink *xsink)
the type used for builtin QoreClass constructor method signatures
Definition: common.h:366
arg_vec_t
std::vector< QoreValue > arg_vec_t
vector of value information for default argument lists
Definition: common.h:254
num_params
static unsigned num_params(const QoreListNode *n)
returns the number of arguments passed to the function
Definition: params.h:54
QoreValue
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:262