(svn r12544) [NoAI] -Codechange: do not force dependency on OTTD internal strings when defining errors. noai
authorrubidium
Thu, 03 Apr 2008 13:28:46 +0000
branchnoai
changeset 9861 53fc03195e31
parent 9860 4f554e7b1985
child 9862 26f6a061eae6
(svn r12544) [NoAI] -Codechange: do not force dependency on OTTD internal strings when defining errors.
src/ai/api/ai_error.cpp
src/ai/api/ai_error.hpp
src/ai/api/ai_error.hpp.sq
src/ai/api/squirrel_export.awk
--- a/src/ai/api/ai_error.cpp	Wed Apr 02 11:14:29 2008 +0000
+++ b/src/ai/api/ai_error.cpp	Thu Apr 03 13:28:46 2008 +0000
@@ -19,11 +19,7 @@
 
 /* static */ const char *AIError::GetLastErrorString()
 {
-	if (AIObject::GetLastError() == STR_NULL) return strdup("ERR_NONE");
-
-	AIErrorMapString::iterator it = error_map_string.find(AIObject::GetLastError());
-	if (it == error_map_string.end()) return strdup("ERR_UNKNOWN");
-	return (*it).second;
+	return (*error_map_string.find(AIError::GetLastError())).second;
 }
 
 /* static */ void AIError::RegisterErrorMap(uint internal_string_id, uint ai_error_msg)
@@ -31,9 +27,9 @@
 	error_map[internal_string_id] = ai_error_msg;
 }
 
-/* static */ void AIError::RegisterErrorMapString(uint internal_string_id, const char *message)
+/* static */ void AIError::RegisterErrorMapString(uint ai_error_msg, const char *message)
 {
-	error_map_string[internal_string_id] = message;
+	error_map_string[ai_error_msg] = message;
 }
 
 /* static */ AIError::ErrorCategories AIError::GetErrorCategory() {
--- a/src/ai/api/ai_error.hpp	Wed Apr 02 11:14:29 2008 +0000
+++ b/src/ai/api/ai_error.hpp	Thu Apr 03 13:28:46 2008 +0000
@@ -34,8 +34,10 @@
 	 * General error messages (0x0100 - 0x0200).
 	 */
 	enum ErrorMessages {
-		ERR_NONE = ERR_CAT_NONE << ERR_CAT_BIT_SIZE,  //!< Initial error value
-		ERR_UNKNOWN,                                  //!< If an error occured and the error wasn't mapped
+		/** Initial error value */
+		ERR_NONE = ERR_CAT_NONE << ERR_CAT_BIT_SIZE,  // []
+		/** If an error occured and the error wasn't mapped */
+		ERR_UNKNOWN,                                  // []
 
 		/** Base for general errors */
 		ERR_GENERAL_BASE = ERR_CAT_GENERAL << ERR_CAT_BIT_SIZE,
@@ -86,10 +88,10 @@
 	/**
 	 * Map an internal OpenTTD error message to it's NoAI equivalent.
 	 * @note DO NOT INVOKE THIS METHOD YOURSELF! The calls are autogenerated.
-	 * @param internal_string_id The OpenTTD StringID used for an error.
+	 * @param ai_error_msg The NoAI error message representation.
 	 * @param message The string representation of this error message, used for debug purposes.
 	 */
-	static void RegisterErrorMapString(uint internal_string_id, const char *message);
+	static void RegisterErrorMapString(uint ai_error_msg, const char *message);
 
 private:
 	typedef std::map<uint, uint> AIErrorMap;
--- a/src/ai/api/ai_error.hpp.sq	Wed Apr 02 11:14:29 2008 +0000
+++ b/src/ai/api/ai_error.hpp.sq	Thu Apr 03 13:28:46 2008 +0000
@@ -33,16 +33,19 @@
 	SQAIError.DefSQConst(engine, AIError::ERR_AREA_NOT_CLEAR,                   "ERR_AREA_NOT_CLEAR");
 	SQAIError.DefSQConst(engine, AIError::ERR_AREA_IS_OWNED_BY_ANOTHER_COMPANY, "ERR_AREA_IS_OWNED_BY_ANOTHER_COMPANY");
 
-	AIError::RegisterErrorMap      (STR_0003_NOT_ENOUGH_CASH_REQUIRES,    AIError::ERR_NOT_ENOUGH_CASH);
-	AIError::RegisterErrorMapString(STR_0003_NOT_ENOUGH_CASH_REQUIRES,            "ERR_NOT_ENOUGH_CASH");
-	AIError::RegisterErrorMap      (STR_2009_LOCAL_AUTHORITY_REFUSES,     AIError::ERR_LOCAL_AUTHORITY_REFUSES);
-	AIError::RegisterErrorMapString(STR_2009_LOCAL_AUTHORITY_REFUSES,             "ERR_LOCAL_AUTHORITY_REFUSES");
-	AIError::RegisterErrorMap      (STR_1007_ALREADY_BUILT,               AIError::ERR_ALREADY_BUILT);
-	AIError::RegisterErrorMapString(STR_1007_ALREADY_BUILT,                       "ERR_ALREADY_BUILT");
-	AIError::RegisterErrorMap      (STR_2004_BUILDING_MUST_BE_DEMOLISHED, AIError::ERR_AREA_NOT_CLEAR);
-	AIError::RegisterErrorMapString(STR_2004_BUILDING_MUST_BE_DEMOLISHED,         "ERR_AREA_NOT_CLEAR");
-	AIError::RegisterErrorMap      (STR_1024_AREA_IS_OWNED_BY_ANOTHER,    AIError::ERR_AREA_IS_OWNED_BY_ANOTHER_COMPANY);
-	AIError::RegisterErrorMapString(STR_1024_AREA_IS_OWNED_BY_ANOTHER,            "ERR_AREA_IS_OWNED_BY_ANOTHER_COMPANY");
+	AIError::RegisterErrorMap(STR_0003_NOT_ENOUGH_CASH_REQUIRES,    AIError::ERR_NOT_ENOUGH_CASH);
+	AIError::RegisterErrorMap(STR_2009_LOCAL_AUTHORITY_REFUSES,     AIError::ERR_LOCAL_AUTHORITY_REFUSES);
+	AIError::RegisterErrorMap(STR_1007_ALREADY_BUILT,               AIError::ERR_ALREADY_BUILT);
+	AIError::RegisterErrorMap(STR_2004_BUILDING_MUST_BE_DEMOLISHED, AIError::ERR_AREA_NOT_CLEAR);
+	AIError::RegisterErrorMap(STR_1024_AREA_IS_OWNED_BY_ANOTHER,    AIError::ERR_AREA_IS_OWNED_BY_ANOTHER_COMPANY);
+
+	AIError::RegisterErrorMapString(AIError::ERR_NONE,                             "ERR_NONE");
+	AIError::RegisterErrorMapString(AIError::ERR_UNKNOWN,                          "ERR_UNKNOWN");
+	AIError::RegisterErrorMapString(AIError::ERR_NOT_ENOUGH_CASH,                  "ERR_NOT_ENOUGH_CASH");
+	AIError::RegisterErrorMapString(AIError::ERR_LOCAL_AUTHORITY_REFUSES,          "ERR_LOCAL_AUTHORITY_REFUSES");
+	AIError::RegisterErrorMapString(AIError::ERR_ALREADY_BUILT,                    "ERR_ALREADY_BUILT");
+	AIError::RegisterErrorMapString(AIError::ERR_AREA_NOT_CLEAR,                   "ERR_AREA_NOT_CLEAR");
+	AIError::RegisterErrorMapString(AIError::ERR_AREA_IS_OWNED_BY_ANOTHER_COMPANY, "ERR_AREA_IS_OWNED_BY_ANOTHER_COMPANY");
 
 	SQAIError.DefSQStaticMethod(engine, &AIError::GetClassName,           "GetClassName",           1, "x");
 	SQAIError.DefSQStaticMethod(engine, &AIError::GetErrorCategory,       "GetErrorCategory",       1, "x");
--- a/src/ai/api/squirrel_export.awk	Wed Apr 02 11:14:29 2008 +0000
+++ b/src/ai/api/squirrel_export.awk	Thu Apr 03 13:28:46 2008 +0000
@@ -28,7 +28,8 @@
 BEGIN {
 	enum_size = 0
 	enum_value_size = 0
-	enum_error_size = 0
+	enum_string_to_error_size = 0
+	enum_error_to_string_size = 0
 	struct_size = 0
 	method_size = 0
 	static_method_size = 0
@@ -187,18 +188,28 @@
 	}
 	if (enum_value_size != 0) print ""
 
+	# Mapping of OTTD strings to errors
 	mlen = 0
-	for (i = 1; i <= enum_error_size; i++) {
-		if (mlen <= length(enum_error_string_mapping[i])) mlen = length(enum_error_string_mapping[i])
+	for (i = 1; i <= enum_string_to_error_size; i++) {
+		if (mlen <= length(enum_string_to_error_mapping_string[i])) mlen = length(enum_string_to_error_mapping_string[i])
 	}
-	for (i = 1; i <= enum_error_size; i++) {
-		print "	AIError::RegisterErrorMap      (" enum_error_string_mapping[i] ", " substr(spaces, 1, mlen - length(enum_error_string_mapping[i]))  cls "::" enum_error_value_mapping[i] ");"
-		print "	AIError::RegisterErrorMapString(" enum_error_string_mapping[i] ", " substr(spaces, 1, mlen - length(enum_error_string_mapping[i]) + length(cls) + 1) "\"" enum_error_value_mapping[i] "\");"
+	for (i = 1; i <= enum_string_to_error_size; i++) {
+		print "	AIError::RegisterErrorMap(" enum_string_to_error_mapping_string[i] ", " substr(spaces, 1, mlen - length(enum_string_to_error_mapping_string[i]))  cls "::" enum_string_to_error_mapping_error[i] ");"
 
-		delete enum_error_string_mapping[i]
-		delete enum_error_value_mapping[i]
+		delete enum_string_to_error_mapping_string[i]
 	}
-	if (enum_error_size != 0) print ""
+	if (enum_string_to_error_size != 0) print ""
+
+	# Mapping of errors to human 'readable' strings.
+	mlen = 0
+	for (i = 1; i <= enum_error_to_string_size; i++) {
+		if (mlen <= length(enum_error_to_string_mapping[i])) mlen = length(enum_error_to_string_mapping[i])
+	}
+	for (i = 1; i <= enum_error_to_string_size; i++) {
+		print "	AIError::RegisterErrorMapString(" cls "::" enum_error_to_string_mapping[i] ", " substr(spaces, 1, mlen - length(enum_error_to_string_mapping[i])) "\"" enum_error_to_string_mapping[i] "\");"
+		delete enum_error_to_string_mapping[i]
+	}
+	if (enum_error_to_string_size != 0) print ""
 
 	# Static methods
 	mlen = 0
@@ -232,7 +243,8 @@
 
 	enum_size = 0
 	enum_value_size = 0
-	enum_error_size = 0
+	enum_string_to_error_size = 0
+	enum_error_to_string_size = 0
 	struct_size = 0
 	method_size = 0
 	static_method_size = 0
@@ -260,19 +272,19 @@
 			# }
 
 			# Set the mappings
-			if (match($0, "\\[.+\\]") != 0) {
+			if (match($0, "\\[.*\\]") != 0) {
 				mappings = substr($0, RSTART, RLENGTH);
 				gsub("([\\[[:space:]\\]])", "", mappings);
 
 				split(mappings, mapitems, ",");
 				for (i = 1; i <= length(mapitems); i++) {
-					enum_error_size++
-					enum_error_string_mapping[enum_error_size] = mapitems[i]
-					enum_error_value_mapping[enum_error_size] = $1
+					enum_string_to_error_size++
+					enum_string_to_error_mapping_string[enum_string_to_error_size] = mapitems[i]
+					enum_string_to_error_mapping_error[enum_string_to_error_size] = $1
 				}
 
-				# Mark this index as an error
-				enum_is_error_mapping[enum_value_size] = 1
+				enum_error_to_string_size++
+				enum_error_to_string_mapping[enum_error_to_string_size] = $1
 			}
 		}
 		next