Explorar o código

Add static member function for accessing settings

Daniele Bartolini %!s(int64=12) %!d(string=hai) anos
pai
achega
10068352d4

+ 19 - 0
src/core/settings/FloatSetting.cpp

@@ -25,6 +25,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #include "FloatSetting.h"
+#include "StringUtils.h"
 
 namespace crown
 {
@@ -109,5 +110,23 @@ FloatSetting& FloatSetting::operator=(const float value)
 	return *this;
 }
 
+//-----------------------------------------------------------------------------
+FloatSetting* FloatSetting::find_setting(const char* name)
+{
+	FloatSetting* head = g_float_settings_head;
+
+	while (head != NULL)
+	{
+		if (string::strcmp(name, head->name()) == 0)
+		{
+			return head;
+		}
+
+		head = head->m_next;
+	}
+
+	return NULL;
+}
+
 } // namespace crown
 

+ 19 - 14
src/core/settings/FloatSetting.h

@@ -38,29 +38,34 @@ class FloatSetting
 {
 public:
 
-						FloatSetting(const char* name, const char* synopsis, float value, float min, float max);
+							FloatSetting(const char* name, const char* synopsis, float value, float min, float max);
 
-	const char*			name() const;
-	const char*			synopsis() const;
+	const char*				name() const;
+	const char*				synopsis() const;
 
-	float				value() const;
-	float				min() const;
-	float				max() const;
+	float					value() const;
+	float					min() const;
+	float					max() const;
 
-						operator float();
+							operator float();
 
-	FloatSetting&		operator=(const float value);
+	FloatSetting&			operator=(const float value);
+
+public:
+
+	/// Returns the setting @name or NULL if not found.
+	static FloatSetting*	find_setting(const char* name);
 
 private:
 
-	const char*			m_name;
-	const char*			m_synopsis;
+	const char*				m_name;
+	const char*				m_synopsis;
 
-	float				m_value;
-	float				m_min;
-	float				m_max;
+	float					m_value;
+	float					m_min;
+	float					m_max;
 
-	FloatSetting*		m_next;
+	FloatSetting*			m_next;
 };
 
 } // namespace crown

+ 19 - 0
src/core/settings/IntSetting.cpp

@@ -25,6 +25,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 */
 
 #include "IntSetting.h"
+#include "StringUtils.h"
 
 namespace crown
 {
@@ -109,5 +110,23 @@ IntSetting& IntSetting::operator=(const int32_t value)
 	return *this;
 }
 
+//-----------------------------------------------------------------------------
+IntSetting*	IntSetting::find_setting(const char* name)
+{
+	IntSetting* head = g_int_settings_head;
+
+	while (head != NULL)
+	{
+		if (string::strcmp(name, head->name()) == 0)
+		{
+			return head;
+		}
+
+		head = head->m_next;
+	}
+
+	return NULL;
+}
+
 } // namespace crown
 

+ 5 - 0
src/core/settings/IntSetting.h

@@ -51,6 +51,11 @@ public:
 
 	IntSetting&			operator=(const int32_t value);
 
+public:
+
+	/// Returns the setting @name or NULL if not found.
+	static IntSetting*	find_setting(const char* name);
+
 private:
 
 	const char*			m_name;

+ 51 - 1
src/core/settings/StringSetting.cpp

@@ -1,10 +1,38 @@
+/*
+Copyright (c) 2013 Daniele Bartolini, Michele Rossi
+Copyright (c) 2012 Daniele Bartolini, Simone Boscaratto
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+*/
+
 #include "StringSetting.h"
+#include "StringUtils.h"
 
 namespace crown
 {
 
 static StringSetting* g_string_settings_head = NULL;
 
+//-----------------------------------------------------------------------------
 StringSetting::StringSetting(const char* name, const char* synopsis, const char* value) :
 	m_name(name),
 	m_synopsis(synopsis),
@@ -25,26 +53,48 @@ StringSetting::StringSetting(const char* name, const char* synopsis, const char*
 	}
 }
 
+//-----------------------------------------------------------------------------
 const char* StringSetting::name() const
 {
 	return m_name;
 }
 
+//-----------------------------------------------------------------------------
 const char* StringSetting::synopsis() const
 {
 	return m_synopsis;
 }
 
+//-----------------------------------------------------------------------------
 const char*	StringSetting::value() const
 {
 	return m_value;
 }
 
-StringSetting&	StringSetting::operator=(const char* value)
+//-----------------------------------------------------------------------------
+StringSetting& StringSetting::operator=(const char* value)
 {
 	m_value = value;
 
 	return *this;
 }
 
+//-----------------------------------------------------------------------------
+StringSetting* StringSetting::find_setting(const char* name)
+{
+	StringSetting* head = g_string_settings_head;
+
+	while (head != NULL)
+	{
+		if (string::strcmp(name, head->name()) == 0)
+		{
+			return head;
+		}
+
+		head = head->m_next;
+	}
+
+	return NULL;
+}
+
 } // namespace crown

+ 40 - 9
src/core/settings/StringSetting.h

@@ -1,3 +1,29 @@
+/*
+Copyright (c) 2013 Daniele Bartolini, Michele Rossi
+Copyright (c) 2012 Daniele Bartolini, Simone Boscaratto
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+*/
+
 #pragma once
 
 #include "Types.h"
@@ -10,22 +36,27 @@ class StringSetting
 {
 public:
 
-						StringSetting(const char* name, const char* synopsis, const char* value);
+							StringSetting(const char* name, const char* synopsis, const char* value);
+
+	const char*				name() const;
+	const char*				synopsis() const;
 
-	const char*			name() const;
-	const char*			synopsis() const;
+	const char*				value() const;
 
-	const char*			value() const;
+	StringSetting&			operator=(const char* value);
+
+public:
 
-	StringSetting&		operator=(const char* value);
+	/// Returns the setting @name or NULL if not found.
+	static StringSetting*	find_setting(const char* name);
 
 private:
 
-	const char*			m_name;
-	const char*			m_synopsis;
-	const char*			m_value;
+	const char*				m_name;
+	const char*				m_synopsis;
+	const char*				m_value;
 
-	StringSetting*		m_next;
+	StringSetting*			m_next;
 };
 
 } // namespace crown