From be0eb30b2e7c8edd8ff15409ab12df19bc510a69 Mon Sep 17 00:00:00 2001
From: Oren <oren_segal@student.uml.edu>
Date: Wed, 22 Jul 2015 09:52:21 -0400
Subject: [PATCH] work on platform config + added support to c++0x

---
 src/aparapi/com.amd.aparapi.jni/build.xml     |  2 +
 .../build_altera_ocl_v15.xml                  |  2 +
 .../src/cpp/runKernel/ConfigSettings.h        | 96 +++++++++++++++++++
 3 files changed, 100 insertions(+)

diff --git a/src/aparapi/com.amd.aparapi.jni/build.xml b/src/aparapi/com.amd.aparapi.jni/build.xml
index 6743cac8..7df8d34e 100644
--- a/src/aparapi/com.amd.aparapi.jni/build.xml
+++ b/src/aparapi/com.amd.aparapi.jni/build.xml
@@ -603,6 +603,8 @@ First consider editing the properties in build.properties
         <!-- !!! oren change -> add debug info, no optimizations 
          <arg value="-O3" />
         -->
+      	<!-- !!! oren change -> add support for ISO C++ 2011 (C++0x) requires GCC 4.3 and later -->      	
+      	<arg value="-std=c++0x" />
          <arg value="-O0" />
          <arg value="-g" />
          <arg value="-fPIC" />
diff --git a/src/aparapi/com.amd.aparapi.jni/build_altera_ocl_v15.xml b/src/aparapi/com.amd.aparapi.jni/build_altera_ocl_v15.xml
index 779ee17b..941105fd 100644
--- a/src/aparapi/com.amd.aparapi.jni/build_altera_ocl_v15.xml
+++ b/src/aparapi/com.amd.aparapi.jni/build_altera_ocl_v15.xml
@@ -641,6 +641,8 @@ First consider editing the properties in build.properties
          <arg value="-O3" />
          <arg value="-O0" />
         -->
+      	<!-- !!! oren change -> add support for ISO C++ 2011 (C++0x) requires GCC 4.3 and later -->      	
+      	<arg value="-std=c++0x" />
          <arg value="-O3" />
          <arg value="-g" />
          <arg value="-fPIC" />
diff --git a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.h b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.h
index daa94a62..c002386f 100644
--- a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.h
+++ b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.h
@@ -5,6 +5,11 @@
 // configuration settings for building platform specific code
 // TODO: consider moving parts of this to a configuration file later on and load settings dynamically
 
+#include <string>
+#include <map>
+#include <tuple>
+#include <memory>
+
 // use values from JNI config
 #include "com_amd_aparapi_internal_jni_KernelRunnerJNI.h"
 
@@ -23,6 +28,97 @@
 #define DEFAULT_FLOW  com_amd_aparapi_internal_jni_KernelRunnerJNI_JNI_FLAG_DEFAULT_FLOW
 ///////////////////////////
 
+#define FILE_EXT_LENGTH 8
+
+class PlatformConfig
+{
+public:
+	PlatformConfig(int flowSupport, const char *fileExt, char fileSep)
+    {
+		setFlowSupport(flowSupport);
+        setFileExtension(fileExt);
+		setFileSeperator(fileSep);
+    }
+
+	void setFlowSupport(int flowSupport)
+	{
+		m_flowSupport = flowSupport;
+	}
+
+	int getFlowSupport()
+	{
+		return m_flowSupport;
+	}
+
+	void setFileExtension(const char *fileExt)
+	{
+		m_fileExt = fileExt;
+	}
+
+	const char *getFileExtension()
+	{
+		return m_fileExt.c_str();
+	}
+
+	void setFileSeperator(char fileSep)
+	{
+		m_fileSep = fileSep;
+	}
+
+	char getFileSeperator()
+	{
+		return m_fileSep;
+	}
+
+protected:
+	// data
+	int m_flowSupport;
+	//char m_fileExt[FILE_EXT_LENGTH];
+	std::string m_fileExt;
+	char m_fileSep;
+};
+
+class PlatformConfigFactory
+{
+public:
+	  typedef std::shared_ptr<PlatformConfig> PlatformConfigPtr;
+	  typedef std::pair<std::string,PlatformConfigPtr> PlatformConfigTuple;
+	  typedef std::map<std::string,PlatformConfigTuple> PlatformConfigMap;
+
+	  static PlatformConfigFactory &getPlatformConfigFactory()//openclManager *oclMgr)
+	  {
+		  static PlatformConfigFactory *pcf;
+		  if(pcf==NULL)
+			  pcf = new PlatformConfigFactory();
+		  return *pcf;
+	  }
+
+	  bool registerPlatformConfig(const char *name, PlatformConfigPtr platformConfigPtr)
+	  {
+		  m_platformConfigMap[name]=PlatformConfigTuple(name,platformConfigPtr);
+		  return true;
+	  }
+
+#define REGISTER_PLLATFORM_CONFIG(name,platformConfigPtr) bool name##PlatformConfig=PlatformConfigFactory::getPlatformConfigFactory().register(#name,platformConfigPtr);
+
+
+	  PlatformConfigPtr findPlatformConfigByName(const char *name)
+	  {
+		  PlatformConfigMap::iterator itr = m_platformConfigMap.find(name);
+		          if (itr != m_platformConfigMap.end())
+		          {
+		              return itr->second.second;
+		          }
+		          else
+		        	  return PlatformConfigPtr();
+	  }
+
+	  // data
+	  PlatformConfigMap m_platformConfigMap;
+
+
+
+};
 
 ///////////////////////////
 // define platform settings
-- 
GitLab