4.0.0 (2023-10-23) * Completely reworked object system to use a central vtable for all virtual functions instead of having copies of function pointers in every object instance. Instead of object->method(object), use call_virtual(method, object). Since macros don't recursively nest, use call_virtual2() and call_virtual3() for nested virtual calls as necessary. * Two separate definitions are now required for subclasses. Instead of putting both ivars and method function pointers in a _structContents definition, define _ivars for instance variables, and _vtable(self_type) for virtual method function pointers. _ivars should be placed at the beginning of every _ivars declaration, and _vtable(self_type) should be placed at the beginning of every _vtable(self_type) declaration. * SUPERCLASS is no longer necessary in implementation files. Instead, #define _superclass in your header, and #define stemobject_implementation in your implementation file. * Added stemobject_vtable_begin, stemobject_vtable_entry, and stemobject_vtable_end. Use in your implementation file after defining stemobject_implementation to associate vtable entries with function implementations. * Added stemobject_assign_vtable() macro which must be used when initializing a non-heap-allocated object before calling an init function, making it possible to call virtual functions during init. * stemobject_struct_definition() has been renamed to stemobject_declare(). Call it in your header after defining _superclass, _ivars, and _vtable(self_type). * Added basic reflection. StemObject_isExactClass() and StemObject_isClassOrSubclass() can be used to determine the identity of an arbitrary StemObject instance. 3.1.1 (2014-06-29) * Added support for modern Xcode/iOS SDK versions 3.1.0 (2013-12-25) * init methods now return a success boolean * stemobject_create_implementation returns NULL if init was unsuccessful 3.0.2 (2013-07-08) * Added 64-bit Windows and Linux support 3.0.1 (2012-02-12) * stemobject_copy_implementation fixed not to expect a void * selfPtr parameter * _init() methods no longer use compat_type. Implementation and documentation updated accordingly. 3.0.0 (2012-01-03) * Instance methods no longer use compat_type for the self parameter * _structContents definitions are now macros which take self_type as a parameter * Added stemobject_struct_defintion macro to replace manual struct definitions * Added call_super macro 2.1.0 (2012-06-12) * Removed StemObject_create * Added stemobject_copy_implementation 2.0.0 (2010-07-29) * Added compat_type macro for specifying intended function parameter class/superclass * Added private_ivar and protected_ivar macros for specifying intended instance variable visibility * Added stemobject_create_implementation macro for simplifying *_create() functions * Synced with template_stemlib Stable_2010-07-14 1.1.0 (2010-06-02) * Refreshed makefile from template_stemlib Stable_2010-06-02 1.0.0 (2010-04-06) * Initial version