IVGCVSW-1806 Refactored Android-NN-Driver, added common "getCapabilities",
"getSupportedOperations" and "prepareModel" implementations

 * Added common base ArmnnDriverImpl class
 * Added common template implementation of the driver's "getCapabilities",
   "getSupportedOperations" and "prepareModel" methods
 * Refactored ArmnnPreparedModel and RequestThread to support HAL
   v1.1 models
 * Moved "getStatus" to the common base class, as it is shared by both
   HAL implementations
 * Refactored the code where necessary

Change-Id: I747334730026d63b4002662523fb93608f67c899
diff --git a/1.0/ArmnnDriver.hpp b/1.0/ArmnnDriver.hpp
index 83484ca..18e2596 100644
--- a/1.0/ArmnnDriver.hpp
+++ b/1.0/ArmnnDriver.hpp
@@ -7,8 +7,8 @@
 
 #include <HalInterfaces.h>
 
-#include "ArmnnDriverImpl.hpp"
 #include "ArmnnDevice.hpp"
+#include "../ArmnnDriverImpl.hpp"
 
 #include <log/log.h>
 
@@ -29,36 +29,44 @@
 
 public:
     Return<void> getCapabilities(
-            ::android::hardware::neuralnetworks::V1_0::IDevice::getCapabilities_cb cb)
+            ::android::hardware::neuralnetworks::V1_0::IDevice::getCapabilities_cb cb) override
     {
         ALOGV("V1_0::ArmnnDriver::getCapabilities()");
 
-        return ArmnnDriverImpl::getCapabilities(m_Runtime, cb);
+        return armnn_driver::ArmnnDriverImpl<HalVersion_1_0>::getCapabilities(m_Runtime,
+                                                                              cb);
     }
 
     Return<void> getSupportedOperations(
             const ::android::hardware::neuralnetworks::V1_0::Model& model,
-            ::android::hardware::neuralnetworks::V1_0::IDevice::getSupportedOperations_cb cb)
+            ::android::hardware::neuralnetworks::V1_0::IDevice::getSupportedOperations_cb cb) override
     {
         ALOGV("V1_0::ArmnnDriver::getSupportedOperations()");
 
-        return ArmnnDriverImpl::getSupportedOperations(m_Runtime, m_Options, model, cb);
+        return armnn_driver::ArmnnDriverImpl<HalVersion_1_0>::getSupportedOperations(m_Runtime,
+                                                                                     m_Options,
+                                                                                     model,
+                                                                                     cb);
     }
 
     Return<ErrorStatus> prepareModel(
             const ::android::hardware::neuralnetworks::V1_0::Model& model,
-            const android::sp<IPreparedModelCallback>& cb)
+            const android::sp<IPreparedModelCallback>& cb) override
     {
         ALOGV("V1_0::ArmnnDriver::prepareModel()");
 
-        return ArmnnDriverImpl::prepareModel(m_Runtime, m_ClTunedParameters, m_Options, model, cb);
+        return armnn_driver::ArmnnDriverImpl<HalVersion_1_0>::prepareModel(m_Runtime,
+                                                                           m_ClTunedParameters,
+                                                                           m_Options,
+                                                                           model,
+                                                                           cb);
     }
 
-    Return<DeviceStatus> getStatus()
+    Return<DeviceStatus> getStatus() override
     {
         ALOGV("V1_0::ArmnnDriver::getStatus()");
 
-        return ArmnnDriverImpl::getStatus();
+        return armnn_driver::ArmnnDriverImpl<HalVersion_1_0>::getStatus();
     }
 };