diff options
-rw-r--r-- | libs/binder/include/binder/IInterface.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libs/binder/include/binder/IInterface.h b/libs/binder/include/binder/IInterface.h index 01c5161e49..5109a65a5d 100644 --- a/libs/binder/include/binder/IInterface.h +++ b/libs/binder/include/binder/IInterface.h @@ -72,12 +72,18 @@ protected: // ---------------------------------------------------------------------- #define DECLARE_META_INTERFACE(INTERFACE) \ +public: \ static const ::android::String16 descriptor; \ static ::android::sp<I##INTERFACE> asInterface( \ const ::android::sp<::android::IBinder>& obj); \ virtual const ::android::String16& getInterfaceDescriptor() const; \ I##INTERFACE(); \ virtual ~I##INTERFACE(); \ + static bool setDefaultImpl(std::unique_ptr<I##INTERFACE> impl); \ + static const std::unique_ptr<I##INTERFACE>& getDefaultImpl(); \ +private: \ + static std::unique_ptr<I##INTERFACE> default_impl; \ +public: \ #define IMPLEMENT_META_INTERFACE(INTERFACE, NAME) \ @@ -100,6 +106,19 @@ protected: } \ return intr; \ } \ + std::unique_ptr<I##INTERFACE> I##INTERFACE::default_impl; \ + bool I##INTERFACE::setDefaultImpl(std::unique_ptr<I##INTERFACE> impl)\ + { \ + if (!I##INTERFACE::default_impl && impl) { \ + I##INTERFACE::default_impl = std::move(impl); \ + return true; \ + } \ + return false; \ + } \ + const std::unique_ptr<I##INTERFACE>& I##INTERFACE::getDefaultImpl() \ + { \ + return I##INTERFACE::default_impl; \ + } \ I##INTERFACE::I##INTERFACE() { } \ I##INTERFACE::~I##INTERFACE() { } \ |