Merge "Add support for default impl" am: 0e67630e99 am: c0fe35850d am: a4fa61a81b
am: f5f5ef9c18
Change-Id: I67b299b712bd1172d88c55f7a1db82a741af87a1
diff --git a/libs/binder/include/binder/IInterface.h b/libs/binder/include/binder/IInterface.h
index 01c5161..5109a65 100644
--- a/libs/binder/include/binder/IInterface.h
+++ b/libs/binder/include/binder/IInterface.h
@@ -72,12 +72,18 @@
// ----------------------------------------------------------------------
#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 @@
} \
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() { } \