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/RequestThread.hpp b/RequestThread.hpp
index 2448dbe..41ad213 100644
--- a/RequestThread.hpp
+++ b/RequestThread.hpp
@@ -11,6 +11,7 @@
 #include <condition_variable>
 
 #include "ArmnnDriver.hpp"
+#include "ArmnnDriverImpl.hpp"
 
 #include <CpuExecutor.h>
 #include <armnn/ArmNN.hpp>
@@ -18,8 +19,10 @@
 namespace armnn_driver
 {
 
+template<typename HalVersion>
 class ArmnnPreparedModel;
 
+template<typename HalVersion>
 class RequestThread
 {
 public:
@@ -35,7 +38,7 @@
     /// @param[in] inputTensors pointer to the input tensors for the request
     /// @param[in] outputTensors pointer to the output tensors for the request
     /// @param[in] callback the android notification callback
-    void PostMsg(armnn_driver::ArmnnPreparedModel* model,
+    void PostMsg(armnn_driver::ArmnnPreparedModel<HalVersion>* model,
                  std::shared_ptr<std::vector<::android::nn::RunTimePoolInfo>>& memPools,
                  std::shared_ptr<armnn::InputTensors>& inputTensors,
                  std::shared_ptr<armnn::OutputTensors>& outputTensors,
@@ -48,7 +51,7 @@
     /// storage for a prepared model and args for the asyncExecute call
     struct AsyncExecuteData
     {
-        AsyncExecuteData(ArmnnPreparedModel* model,
+        AsyncExecuteData(ArmnnPreparedModel<HalVersion>* model,
                          std::shared_ptr<std::vector<::android::nn::RunTimePoolInfo>>& memPools,
                          std::shared_ptr<armnn::InputTensors>& inputTensors,
                          std::shared_ptr<armnn::OutputTensors>& outputTensors,
@@ -61,7 +64,7 @@
         {
         }
 
-        armnn_driver::ArmnnPreparedModel* m_Model;
+        armnn_driver::ArmnnPreparedModel<HalVersion>* m_Model;
         std::shared_ptr<std::vector<::android::nn::RunTimePoolInfo>> m_MemPools;
         std::shared_ptr<armnn::InputTensors> m_InputTensors;
         std::shared_ptr<armnn::OutputTensors> m_OutputTensors;