Qore Programming Language  1.12.1
QoreObject.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3  QoreObject.h
4 
5  thread-safe object definition
6 
7  Qore Programming Language
8 
9  Copyright (C) 2003 - 2022 Qore Technologies, s.r.o.
10 
11  Permission is hereby granted, free of charge, to any person obtaining a
12  copy of this software and associated documentation files (the "Software"),
13  to deal in the Software without restriction, including without limitation
14  the rights to use, copy, modify, merge, publish, distribute, sublicense,
15  and/or sell copies of the Software, and to permit persons to whom the
16  Software is furnished to do so, subject to the following conditions:
17 
18  The above copyright notice and this permission notice shall be included in
19  all copies or substantial portions of the Software.
20 
21  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27  DEALINGS IN THE SOFTWARE.
28 
29  Note that the Qore library is released under a choice of three open-source
30  licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
31  information.
32 */
33 
34 #ifndef _QORE_QOREOBJECT_H
35 
36 #define _QORE_QOREOBJECT_H
37 
38 class AutoVLock;
39 class VRMutex;
40 class BuiltinCopy;
41 class BuiltinNormalMethodVariantBase;
42 class BuiltinCopyVariantBase;
44 class QoreProgram;
45 
47 
60 class QoreObject : public AbstractQoreNode {
61  friend class qore_object_private;
62  friend class ObjectRSetHelper;
63  friend class ObjectRSet;
64  friend class qore_object_dereference_helper;
65 
66 public:
68 
72  DLLEXPORT QoreObject(const QoreClass* oc, QoreProgram* p);
73 
75 
80  DLLEXPORT QoreObject(const QoreClass* oc, QoreProgram* p, AbstractPrivateData* data);
81 
83  DLLEXPORT bool hasMember(const char* mem, ExceptionSink* xsink) const;
84 
86 
88  DLLEXPORT virtual bool getAsBoolImpl() const;
89 
91 
97  DLLEXPORT virtual int getAsString(QoreString &str, int foff, ExceptionSink* xsink) const;
98 
100 
107  DLLEXPORT virtual QoreString* getAsString(bool& del, int foff, ExceptionSink* xsink) const;
108 
110  DLLEXPORT virtual AbstractQoreNode* realCopy() const;
111 
113 
117  DLLEXPORT virtual bool is_equal_soft(const AbstractQoreNode* v, ExceptionSink* xsink) const;
118 
120 
124  DLLEXPORT virtual bool is_equal_hard(const AbstractQoreNode* v, ExceptionSink* xsink) const;
125 
127  DLLEXPORT virtual const char* getTypeName() const;
128 
130  DLLLOCAL static const char* getStaticTypeName() {
131  return "object";
132  }
133 
135  DLLLOCAL static qore_type_t getStaticTypeCode() {
136  return NT_OBJECT;
137  }
138 
140 
144  DLLEXPORT bool validInstanceOf(qore_classid_t cid) const;
145 
147 
149  DLLEXPORT bool validInstanceOf(const QoreClass& qc) const;
150 
152 
156  DLLEXPORT bool validInstanceOfStrict(const QoreClass& qc) const;
157 
159 
164  DLLEXPORT void setValue(const char* key, QoreValue val, ExceptionSink* xsink);
165 
167 
170  DLLEXPORT QoreListNode* getMemberList(ExceptionSink* xsink) const;
171 
173 
177  DLLEXPORT void deleteMemberValue(const QoreString* key, ExceptionSink* xsink);
178 
180 
184  DLLEXPORT void deleteMemberValue(const char* key, ExceptionSink* xsink);
185 
187 
191  DLLEXPORT void removeMember(const QoreString* key, ExceptionSink* xsink);
192 
194 
198  DLLEXPORT void removeMember(const char* key, ExceptionSink* xsink);
199 
201 
206  DLLEXPORT QoreValue takeMember(const QoreString* key, ExceptionSink* xsink);
207 
209 
214  DLLEXPORT QoreValue takeMember(const char* key, ExceptionSink* xsink);
215 
217 
220  DLLEXPORT int size(ExceptionSink* xsink) const;
221 
223 
227  DLLEXPORT bool compareSoft(const QoreObject* obj, ExceptionSink* xsink) const;
228 
230 
234  DLLEXPORT bool compareHard(const QoreObject* obj, ExceptionSink* xsink) const;
235 
237 
242  DLLEXPORT QoreValue getReferencedMemberNoMethod(const char* mem, ExceptionSink* xsink) const;
243 
245 
251  DLLEXPORT int64 getMemberAsBigInt(const char* mem, bool& found, ExceptionSink* xsink) const;
252 
254 
257  DLLEXPORT QoreHashNode* copyData(ExceptionSink* xsink) const;
258 
260 
265 
267 
272 
274 
279  template <class T>
280  DLLLOCAL T* getReferencedPrivateData(qore_classid_t key, ExceptionSink* xsink) const {
282  assert(!rv || dynamic_cast<T*>(rv));
283  return reinterpret_cast<T*>(rv);
284  }
285 
287 
294 
296 
302  template <class T>
305  assert(!rv || dynamic_cast<T*>(rv));
306  return reinterpret_cast<T*>(rv);
307  }
308 
310 
315  DLLEXPORT QoreValue evalMethod(const QoreString* name, const QoreListNode* args, ExceptionSink* xsink);
316 
318 
323  DLLEXPORT QoreValue evalMethod(const char* name, const QoreListNode* args, ExceptionSink* xsink);
324 
326 
331  DLLEXPORT QoreValue evalMethod(const QoreMethod& method, const QoreListNode* args, ExceptionSink* xsink);
332 
334 
344  DLLEXPORT QoreValue evalMethod(const QoreMethod& method, const QoreClass* class_ctx, const QoreListNode* args, ExceptionSink* xsink);
345 
347 
350  DLLEXPORT void doDelete(ExceptionSink* xsink);
351 
353 
357  DLLEXPORT const QoreClass* getClass(qore_classid_t cid) const;
358 
360 
367  DLLEXPORT const QoreClass* getClass(qore_classid_t cid, bool& priv) const;
368 
370 
376  DLLEXPORT ClassAccess getClassAccess(const QoreClass& cls) const;
377 
379 
382  DLLEXPORT const QoreClass* getClass() const;
383 
385 
388  DLLEXPORT const char* getClassName() const;
389 
391 
398  DLLEXPORT const QoreClass* getSurfaceClass() const;
399 
401 
408  DLLEXPORT const char* getSurfaceClassName() const;
409 
411 
414  DLLEXPORT bool isValid() const;
415 
417 
420  DLLEXPORT QoreProgram* getProgram() const;
421 
423 
426  DLLEXPORT bool isSystemObject() const;
427 
429 
434  DLLEXPORT void tRef() const;
435 
437 
440  DLLEXPORT void tDeref();
441 
443  DLLEXPORT void realRef();
444 
446  DLLEXPORT void realDeref(ExceptionSink* xsink);
447 
449 
457  DLLEXPORT QoreValue getMemberValueNoMethod(const QoreString* key, AutoVLock* vl, ExceptionSink* xsink) const;
458 
460 
466  DLLEXPORT QoreValue getMemberValueNoMethod(const char* key, AutoVLock* vl, ExceptionSink* xsink) const;
467 
469 
475  DLLEXPORT QoreValue getReferencedMemberNoMethod(const char* key, const QoreClass* cls, ExceptionSink* xsink) const;
476 
478 
487  DLLEXPORT int setMemberValue(const char* key, const QoreClass* cls, const QoreValue val, ExceptionSink* xsink);
488 
490 
494  DLLEXPORT void externalDelete(qore_classid_t key, ExceptionSink* xsink);
495 
497  DLLEXPORT QoreValue evalMethodVariant(const QoreMethod& method, const QoreExternalMethodVariant* variant, const QoreListNode* args, ExceptionSink* xsink);
498 
500 
502  DLLEXPORT QoreValue evalMethodVariant(const QoreMethod& method, const QoreClass* class_ctx, const QoreExternalMethodVariant* variant, const QoreListNode* args, ExceptionSink* xsink);
503 
505 
507  DLLEXPORT static QoreValue evalStaticMethod(const QoreMethod& method, const QoreListNode* args, ExceptionSink* xsink);
508 
510 
512  DLLEXPORT static QoreValue evalStaticMethod(const QoreMethod& method, const QoreClass* class_ctx, const QoreListNode* args, ExceptionSink* xsink);
513 
515 
517  DLLEXPORT static QoreValue evalStaticMethodVariant(const QoreMethod& method, const QoreExternalMethodVariant* variant, const QoreListNode* args, ExceptionSink* xsink);
518 
520 
522  DLLEXPORT static QoreValue evalStaticMethodVariant(const QoreMethod& method, const QoreClass* class_ctx, const QoreExternalMethodVariant* variant, const QoreListNode* args, ExceptionSink* xsink);
523 
525 
531  DLLEXPORT QoreValue evalMember(const QoreString* member, ExceptionSink* xsink);
532 
534 
541  DLLEXPORT QoreValue evalMember(const char* member, ExceptionSink* xsink);
542 
544 
546  DLLLOCAL QoreObject* objectRefSelf() const {
547  ref();
548  return const_cast<QoreObject*>(this);
549  }
550 
551  DLLLOCAL int getStatus() const;
552 
553  DLLLOCAL class KeyNode* getReferencedPrivateDataNode(qore_classid_t key);
554 
556 
561 
563 
570  const BuiltinNormalMethodVariantBase* meth, const QoreListNode* args, ExceptionSink* xsink);
571 
573  DLLLOCAL void evalCopyMethodWithPrivateData(const QoreClass &thisclass, const BuiltinCopyVariantBase* meth,
574  QoreObject* self, ExceptionSink* xsink);
575 
577 
581  DLLLOCAL void addPrivateDataToString(QoreString* str, ExceptionSink* xsink) const;
582 
584 
587  DLLLOCAL void obliterate(ExceptionSink* xsink);
588 
590 
594  DLLLOCAL void defaultSystemDestructor(qore_classid_t classID, ExceptionSink* xsink);
595 
596  // returns a new hash consisting of just the members of value_list
597  DLLLOCAL QoreHashNode* getSlice(const QoreListNode* value_list, ExceptionSink* xsink) const;
598 
600  DLLLOCAL QoreObject(const QoreClass* oc, QoreProgram* p, QoreHashNode* d);
601 
603  DLLLOCAL bool hasMemberNotification() const;
604 
606  DLLLOCAL void execMemberNotification(const char* member, ExceptionSink* xsink);
607 
608 protected:
610 
614  DLLEXPORT virtual bool derefImpl(ExceptionSink* xsink);
615 
617 
619  DLLLOCAL virtual QoreValue evalImpl(bool& needs_deref, ExceptionSink* xsink) const;
620 
622  DLLLOCAL virtual void customRef() const;
623 
625  DLLLOCAL virtual void customDeref(ExceptionSink* xsink);
626 
628  DLLLOCAL virtual ~QoreObject();
629 
630 private:
632  class qore_object_private* priv;
633 
635  DLLLOCAL QoreObject(const QoreObject&);
636 
638  DLLLOCAL QoreObject& operator=(const QoreObject&);
639 };
640 
642 
645 public:
646  DLLLOCAL QoreObjectWeakRefHolder() {
647  }
648 
649  DLLLOCAL QoreObjectWeakRefHolder(QoreObject* obj) : obj(obj) {
650  if (obj) {
651  obj->tRef();
652  }
653  }
654 
655  DLLLOCAL ~QoreObjectWeakRefHolder() {
656  discard();
657  }
658 
659  DLLLOCAL QoreObject* release() {
660  QoreObject* rv = obj;
661  obj = nullptr;
662  return rv;
663  }
664 
665  DLLLOCAL void reset(QoreObject* obj = nullptr) {
666  discard();
667  this->obj = obj;
668  }
669 
670  DLLLOCAL QoreObject* operator*() {
671  return obj;
672  }
673 
674  DLLLOCAL const QoreObject* operator*() const {
675  return obj;
676  }
677 
678  DLLLOCAL QoreObject* operator->() {
679  return obj;
680  }
681 
682  DLLLOCAL const QoreObject* operator->() const {
683  return obj;
684  }
685 
686  DLLLOCAL operator bool() {
687  return (bool)obj;
688  }
689 
690  DLLLOCAL operator bool() const {
691  return (bool)obj;
692  }
693 
694 private:
695  QoreObject* obj = nullptr;
696 
697  DLLLOCAL void discard() {
698  if (obj) {
699  obj->tDeref();
700  }
701  }
702 
703  void* operator new(size_t) = delete;
705  QoreObjectWeakRefHolder& operator=(QoreObjectWeakRefHolder& orig) = delete;
706 };
707 
709 template <class T>
711 public:
712  DLLLOCAL PrivateDataRefHolder(ExceptionSink* xsink) : ReferenceHolder<T>(xsink) {
713  }
714 
715  DLLLOCAL PrivateDataRefHolder(const QoreObject* o, qore_classid_t cid, ExceptionSink* xsink) : ReferenceHolder<T>(reinterpret_cast<T*>(o->getReferencedPrivateData(cid, xsink)), xsink) {
716  }
717 
719  DLLLOCAL void operator=(T *nv) {
720  if (this->p)
721  this->p->deref(this->xsink);
722  this->p = nv;
723  }
724 };
725 
727 template <class T>
729 public:
730  DLLLOCAL TryPrivateDataRefHolder(const QoreObject* o, qore_classid_t cid, ExceptionSink* xsink) : ReferenceHolder<T>(reinterpret_cast<T*>(o->tryGetReferencedPrivateData(cid, xsink)), xsink) {
731  }
732 
734  DLLLOCAL void operator=(T *nv) {
735  if (this->p)
736  this->p->deref(this->xsink);
737  this->p = nv;
738  }
739 };
740 
741 class QorePrivateObjectAccessHelper {
742 public:
743  DLLLOCAL QorePrivateObjectAccessHelper(ExceptionSink* xs) : xsink(xs), ptr(0) {
744  }
745 
746  DLLLOCAL operator bool() const {
747  return (bool)ptr;
748  }
749 
750 private:
751  DLLLOCAL QorePrivateObjectAccessHelper(const QorePrivateObjectAccessHelper&) = delete;
752  DLLLOCAL QorePrivateObjectAccessHelper& operator=(const QorePrivateObjectAccessHelper&) = delete;
753  DLLLOCAL void* operator new(size_t) = delete;
754 
755 protected:
756  ExceptionSink* xsink;
757  void* ptr;
758 };
759 
760 #endif
the base class for all data to be used as private data of Qore objects
Definition: AbstractPrivateData.h:44
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:57
DLLEXPORT void ref() const
increments the reference count
AutoVLock is a container for safely managing global variable and object lock handovers,...
Definition: AutoVLock.h:80
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
convenience class for holding AbstractPrivateData references
Definition: QoreObject.h:710
DLLLOCAL void operator=(T *nv)
assigns a new pointer to the holder, dereferences the current pointer if any
Definition: QoreObject.h:719
defines a Qore-language class
Definition: QoreClass.h:249
external wrapper class for method variants
Definition: QoreReflection.h:90
This is the hash or associative list container type in Qore, dynamically allocated only,...
Definition: QoreHashNode.h:50
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
a method in a QoreClass
Definition: QoreClass.h:135
the implementation of Qore's object data type, reference counted, dynamically-allocated only
Definition: QoreObject.h:60
DLLEXPORT AbstractPrivateData * getReferencedPrivateData(qore_classid_t key, ExceptionSink *xsink) const
returns the private data corresponding to the class ID passed with an incremented reference count,...
virtual DLLEXPORT const char * getTypeName() const
returns the type name as a c string
virtual DLLEXPORT bool derefImpl(ExceptionSink *xsink)
runs the destructor if necessary and dereferences all members
DLLLOCAL bool hasMemberNotification() const
returns true if the class has a memberNotification method
DLLEXPORT void tRef() const
increments the existence reference count
DLLLOCAL QoreValue evalBuiltinMethodWithPrivateData(const QoreMethod &method, const BuiltinNormalMethodVariantBase *meth, const QoreListNode *args, ExceptionSink *xsink)
called to evaluate a builtin method when private data is available
DLLEXPORT bool compareSoft(const QoreObject *obj, ExceptionSink *xsink) const
tests for equality ("deep compare" including all contained values) with possible type conversion of c...
virtual DLLLOCAL void customRef() const
custom reference handler
DLLEXPORT QoreValue evalMember(const QoreString *member, ExceptionSink *xsink)
returns the value of the member with an incremented reference count, or executes the memberGate() met...
virtual DLLLOCAL void customDeref(ExceptionSink *xsink)
custom dereference handler - with delete
DLLEXPORT void tDeref()
decrements the existence reference count, when it reaches 0 the C++ object ("this") will be deleted
virtual DLLEXPORT int getAsString(QoreString &str, int foff, ExceptionSink *xsink) const
concatenate the verbose string representation of the list (including all contained values) to an exis...
DLLEXPORT const char * getClassName() const
returns the name of the class
DLLEXPORT QoreValue evalMethod(const QoreString *name, const QoreListNode *args, ExceptionSink *xsink)
evaluates the given method with the arguments passed and returns the return value,...
DLLEXPORT bool isValid() const
returns true if the object is valid
DLLEXPORT bool isSystemObject() const
returns true if the object is a system object (created with the system constructor)
DLLEXPORT void removeMember(const QoreString *key, ExceptionSink *xsink)
removes a member from the object without explicitly calling destructors; the value is only dereferenc...
DLLEXPORT void realDeref(ExceptionSink *xsink)
decrements the standard reference count of the object for references that cannot be part of a recursi...
DLLEXPORT QoreHashNode * copyData(ExceptionSink *xsink) const
retuns all member data of the object (or 0 if there's an exception), caller owns the QoreHashNode ref...
DLLEXPORT bool compareHard(const QoreObject *obj, ExceptionSink *xsink) const
tests for equality ("deep compare" including all contained values) with possible type conversion of c...
DLLEXPORT int size(ExceptionSink *xsink) const
returns the number of members of the object
virtual DLLEXPORT AbstractQoreNode * realCopy() const
performs a the same object with its reference count increased
virtual DLLLOCAL ~QoreObject()
destructor
DLLLOCAL void defaultSystemDestructor(qore_classid_t classID, ExceptionSink *xsink)
runs the destructor for system objects
DLLEXPORT void setValue(const char *key, QoreValue val, ExceptionSink *xsink)
sets the value of the given member to the given value
static DLLLOCAL qore_type_t getStaticTypeCode()
returns the type code (useful in templates)
Definition: QoreObject.h:135
DLLEXPORT QoreProgram * getProgram() const
returns the QoreProgram object associated with this object
DLLLOCAL void addPrivateDataToString(QoreString *str, ExceptionSink *xsink) const
concatenates info about private data to a string
DLLLOCAL void execMemberNotification(const char *member, ExceptionSink *xsink)
executes the member notification on the object the given member
DLLEXPORT QoreValue getMemberValueNoMethod(const QoreString *key, AutoVLock *vl, ExceptionSink *xsink) const
returns the pointer to the value of the member
static DLLEXPORT QoreValue evalStaticMethodVariant(const QoreMethod &method, const QoreExternalMethodVariant *variant, const QoreListNode *args, ExceptionSink *xsink)
executes a static method variant
DLLEXPORT void deleteMemberValue(const QoreString *key, ExceptionSink *xsink)
removes a member from the object, if the member's value is an object it is deleted as well (destructo...
DLLEXPORT QoreValue evalMethodVariant(const QoreMethod &method, const QoreExternalMethodVariant *variant, const QoreListNode *args, ExceptionSink *xsink)
executes a normal object method variant
DLLLOCAL void evalCopyMethodWithPrivateData(const QoreClass &thisclass, const BuiltinCopyVariantBase *meth, QoreObject *self, ExceptionSink *xsink)
called on the old object (this) to acquire private data, copy method called with pointer to "self" (n...
DLLLOCAL void obliterate(ExceptionSink *xsink)
destroys all members and dereferences all private data structures
DLLLOCAL AbstractPrivateData * getAndClearPrivateData(qore_classid_t key, ExceptionSink *xsink)
retrieves the private data pointer and clears it from the object's private data store,...
DLLEXPORT void doDelete(ExceptionSink *xsink)
runs the destructor on the object (if it hasn't already been deleted)
DLLEXPORT QoreValue getReferencedMemberNoMethod(const char *mem, ExceptionSink *xsink) const
returns the value of the given member with the reference count incremented, the caller owns any refer...
DLLEXPORT bool validInstanceOf(qore_classid_t cid) const
returns true if this object is a valid instance of the classid passed
DLLEXPORT void externalDelete(qore_classid_t key, ExceptionSink *xsink)
call this function when an object's private data is deleted externally
static DLLEXPORT QoreValue evalStaticMethod(const QoreMethod &method, const QoreListNode *args, ExceptionSink *xsink)
executes a static method
DLLEXPORT ClassAccess getClassAccess(const QoreClass &cls) const
returns the accessibility of the class in the object's hierachy or Inaccessible the object does not i...
static DLLLOCAL const char * getStaticTypeName()
returns the type name (useful in templates)
Definition: QoreObject.h:130
DLLEXPORT void setPrivate(qore_classid_t key, AbstractPrivateData *pd)
sets private data for the object against the class ID passed, used in C++ functions implementing Qore...
virtual DLLEXPORT bool is_equal_hard(const AbstractQoreNode *v, ExceptionSink *xsink) const
tests for equality ("deep compare" including all contained values) without type conversions (hard com...
DLLEXPORT bool validInstanceOfStrict(const QoreClass &qc) const
returns true if this object is a valid instance of the classid passed; does not check for injected co...
DLLEXPORT int64 getMemberAsBigInt(const char *mem, bool &found, ExceptionSink *xsink) const
returns the value of the given member as an int64
DLLEXPORT AbstractPrivateData * tryGetReferencedPrivateData(qore_classid_t key, ExceptionSink *xsink) const
returns the private data corresponding to the class ID passed with an incremented reference count if ...
DLLEXPORT const QoreClass * getClass() const
returns a pointer to the QoreClass of this object
DLLEXPORT QoreValue takeMember(const QoreString *key, ExceptionSink *xsink)
removes a member from the object without explicitly calling destructors and returns the value removed...
DLLLOCAL QoreObject * objectRefSelf() const
Returns the object with the reference count increased.
Definition: QoreObject.h:546
DLLEXPORT QoreListNode * getMemberList(ExceptionSink *xsink) const
returns the list of members, caller owns the list returned
DLLEXPORT const char * getSurfaceClassName() const
returns the name of the class or to the name of the injection target class in case the class was inje...
DLLEXPORT void realRef()
increments the standard reference count of the object for references that cannot be part of a recursi...
DLLEXPORT QoreObject(const QoreClass *oc, QoreProgram *p)
creates an object as belonging to the given class, the QoreProgram object is referenced for the life ...
virtual DLLEXPORT bool is_equal_soft(const AbstractQoreNode *v, ExceptionSink *xsink) const
tests for equality ("deep compare" including all contained values) with possible type conversion (sof...
DLLEXPORT int setMemberValue(const char *key, const QoreClass *cls, const QoreValue val, ExceptionSink *xsink)
sets the value of the given member as accessed from the given class
DLLEXPORT const QoreClass * getSurfaceClass() const
returns a pointer to the QoreClass of this object or to the injection target class in case the class ...
DLLEXPORT bool hasMember(const char *mem, ExceptionSink *xsink) const
returns true if the object has the given member (note that the member may not have a value)
virtual DLLLOCAL QoreValue evalImpl(bool &needs_deref, ExceptionSink *xsink) const
should never be called, does nothing
virtual DLLEXPORT bool getAsBoolImpl() const
returns false unless perl-boolean-evaluation is enabled, in which case it returns false only when emp...
Convenience class for holding temporary / weak references to objects.
Definition: QoreObject.h:644
supports parsing and executing Qore-language code, reference counted, dynamically-allocated only
Definition: QoreProgram.h:127
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:93
a templated class to manage a reference count of an object that can throw a Qore-language exception w...
Definition: ReferenceHolder.h:52
convenience class for holding AbstractPrivateData references
Definition: QoreObject.h:728
DLLLOCAL void operator=(T *nv)
assigns a new pointer to the holder, dereferences the current pointer if any
Definition: QoreObject.h:734
int16_t qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode)
Definition: common.h:70
unsigned qore_classid_t
used for the unique class ID for QoreClass objects
Definition: common.h:79
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
const qore_type_t NT_OBJECT
type value for QoreObject
Definition: node_types.h:52
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:275