## Aurora Interfaces This library implements the macros required to define Aurora style interfaces. Defines two classes implementable by SWIG, CppSharp, and classical event interface inheritance; and implementable by std::function for modern C++ and runtime language bindings respectively. The former is simply defined as a structure containing virtual methods as laid out by AUI_METHODs. Latterly, the base interface is extended and implemented by an array of overloaded method defintions and std::function member fields. The latter type variant includes type defintions of each functional type, where each method type is defined as IMyInterfaceFunctional::methodName_t; and includes a copy and a move constructor for when the implementation is available at time of construction. ## Example usage: #### In your common header: ``` #if defined(MY_LIB_GEN_BINDINGS) #define LIB_INTERFACE(name, list) AUI_INTERFACE_IMPL(name, list) #define #define LIB_INTERFACE(name, list) AUI_INTERFACE_FWD(name, list) #endif ``` #### In your public API: ``` LIB_INTERFACE(IInputMouseSubscriber, AUI_METHOD(void, onButtonPress, (AuUInt8, mb)), AUI_METHOD(void, onButtonTick, (AuUInt8, mb)), AUI_METHOD(void, onButtonUp, (AuUInt8, mb)) ); ``` #### In a dedicated translation unit: ``` #define MY_LIB_GEN_BINDINGS #include <...> ``` #### Usage Runtime Binding and Modern C++ ``` // My language binding IInputMouseSubscriberFunctional test; test.onButtonPress = [](AuUInt8 btn) { }; AuSPtr handle = AuUnsafeRaiiToShared(&test); // use handle with an Aurora API ``` #### Usage C++ Native, SWIG, and CppSharp ``` struct MyEventHandler : public IInputMouseSubscriber { void onButtonPress(AuUInt8 mb) override; void onButtonTick(AuUInt8 mb) override; void onButtonUp(AuUInt8 mb) override; }; auto handle = AuMakeShared(); ``` ##### Not recommended for small projects and/or people with a shred of sanity left ##### Possibly useful for API developers