Integrate MLGO into CLGEMM and CLGEMMLowpMatrixMultiplyCore: Part1

* Create a new public handle class CLGEMMHeuristicsHandle
  It is responsible for the loading and lifetime management of the
  underlying heuristics

* Add to_string utility to several mlgo constructs for logging

Resolves: COMPMID-3843, COMPMID-3844

Signed-off-by: SiCong Li <sicong.li@arm.com>
Change-Id: Ib9c65e076daa6a9a204999cde9abf366dbabc496
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5001
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
diff --git a/src/runtime/CL/mlgo/Utils.h b/src/runtime/CL/mlgo/Utils.h
index 2e324dd..c634a88 100644
--- a/src/runtime/CL/mlgo/Utils.h
+++ b/src/runtime/CL/mlgo/Utils.h
@@ -21,14 +21,16 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef SRC_MLGO_UTILS_H
-#define SRC_MLGO_UTILS_H
+#ifndef SRC_RUNTIME_CL_MLGO_UTILS_H
+#define SRC_RUNTIME_CL_MLGO_UTILS_H
 
 #include "src/runtime/CL/mlgo/Common.h"
 #include "src/runtime/CL/mlgo/HeuristicTree.h"
+#include "src/runtime/CL/mlgo/MLGOHeuristics.h"
 #include "src/runtime/CL/mlgo/MLGOParser.h"
 
 #include <ostream>
+#include <string>
 
 namespace arm_compute
 {
@@ -37,14 +39,19 @@
 std::ostream &operator<<(std::ostream &os, const GEMMConfigNative &config);
 std::ostream &operator<<(std::ostream &os, const GEMMConfigReshapedOnlyRHS &config);
 std::ostream &operator<<(std::ostream &os, const GEMMConfigReshaped &config);
-std::ostream &operator<<(std::ostream &os, const HeuristicType &ht);
-std::ostream &operator<<(std::ostream &os, const DataType &dt);
+std::ostream &operator<<(std::ostream &os, HeuristicType ht);
+std::ostream &operator<<(std::ostream &os, DataType dt);
 std::ostream &operator<<(std::ostream &os, const HeuristicTree::Index &index);
+std::ostream &operator<<(std::ostream &os, const Query &query);
+std::string to_string(const GEMMConfigNative &config);
+std::string to_string(const GEMMConfigReshapedOnlyRHS &config);
+std::string to_string(const GEMMConfigReshaped &config);
+std::string to_string(const Query &query);
 namespace parser
 {
-std::ostream &operator<<(std::ostream &os, CharPosition tok);
+std::ostream &operator<<(std::ostream &os, const CharPosition &pos);
 } // namespace parser
 } // namespace mlgo
 } // namespace arm_compute
 
-#endif //SRC_MLGO_UTILS_H
\ No newline at end of file
+#endif //SRC_RUNTIME_CL_MLGO_UTILS_H
\ No newline at end of file