Extend reference model API with eager operator execution entrypoints

- Adds a script to generate operators.h and operators.cc
- Adds jinja2 templates for generating operators.h and operators.cc
- Adds unit tests for a subset of the operators generated
- Includes the TOSA specification as a submodule
- Adds supporting C++ and header files

Signed-off-by: Grant Watson <grant.watson@arm.com>
Change-Id: I5b60db4c56113110d8e75fe1152525d258233f9c
diff --git a/reference_model/src/tensor.h b/reference_model/src/tensor.h
index a3ce4bb..08e865a 100644
--- a/reference_model/src/tensor.h
+++ b/reference_model/src/tensor.h
@@ -16,6 +16,7 @@
 #ifndef TOSA_REFERENCE_TENSOR_H
 #define TOSA_REFERENCE_TENSOR_H
 
+#include "array_proxy.h"
 #include "model_common.h"
 #include "ops/template_types.h"
 #include "tosa_generated.h"
@@ -228,17 +229,17 @@
     virtual int writeToNpyFile(const char* filename) const;
     virtual int copyValueFrom(Tensor* tensor) = 0;
 
-    virtual int readfromVector(const std::vector<float>& vals);
-    virtual int readfromVector(const std::vector<half_float::half>& vals);
-    virtual int readfromVector(const std::vector<int32_t>& vals);
-    virtual int readfromVector(const std::vector<int64_t>& vals);
-    virtual int readfromVector(const std::vector<unsigned char>& vals);
+    virtual int readfromVector(const ArrayProxy<float> vals);
+    virtual int readfromVector(const ArrayProxy<half_float::half> vals);
+    virtual int readfromVector(const ArrayProxy<int32_t> vals);
+    virtual int readfromVector(const ArrayProxy<int64_t> vals);
+    virtual int readfromVector(const ArrayProxy<unsigned char> vals);
 
-    virtual int writeToVector(std::vector<float>& vals);
-    virtual int writeToVector(std::vector<half_float::half>& vals);
-    virtual int writeToVector(std::vector<int32_t>& vals);
-    virtual int writeToVector(std::vector<int64_t>& vals);
-    virtual int writeToVector(std::vector<unsigned char>& vals);
+    virtual int writeToVector(ArrayProxy<float> vals);
+    virtual int writeToVector(ArrayProxy<half_float::half> vals);
+    virtual int writeToVector(ArrayProxy<int32_t> vals);
+    virtual int writeToVector(ArrayProxy<int64_t> vals);
+    virtual int writeToVector(ArrayProxy<unsigned char> vals);
 
     const char* bool_to_str(bool in) const
     {