ai_error.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef AI_ERROR_HPP
00013 #define AI_ERROR_HPP
00014
00015 #include "ai_object.hpp"
00016 #include <map>
00017
00023 #define EnforcePrecondition(returnval, condition) \
00024 if (!(condition)) { \
00025 AIObject::SetLastError(AIError::ERR_PRECONDITION_FAILED); \
00026 return returnval; \
00027 }
00028
00035 #define EnforcePreconditionCustomError(returnval, condition, error_code) \
00036 if (!(condition)) { \
00037 AIObject::SetLastError(error_code); \
00038 return returnval; \
00039 }
00040
00044 class AIError : public AIObject {
00045 public:
00046 static const char *GetClassName() { return "AIError"; }
00047
00051 enum ErrorCategories {
00052 ERR_CAT_NONE = 0,
00053 ERR_CAT_GENERAL,
00054 ERR_CAT_VEHICLE,
00055 ERR_CAT_STATION,
00056 ERR_CAT_BRIDGE,
00057 ERR_CAT_TUNNEL,
00058 ERR_CAT_TILE,
00059 ERR_CAT_SIGN,
00060 ERR_CAT_RAIL,
00061 ERR_CAT_ROAD,
00062 ERR_CAT_ORDER,
00063 ERR_CAT_MARINE,
00064 ERR_CAT_WAYPOINT,
00065
00070 ERR_CAT_BIT_SIZE = 8,
00071 };
00072
00076 enum ErrorMessages {
00078 ERR_NONE = ERR_CAT_NONE << ERR_CAT_BIT_SIZE,
00080 ERR_UNKNOWN,
00082 ERR_PRECONDITION_FAILED,
00084 ERR_PRECONDITION_STRING_TOO_LONG,
00086 ERR_NEWGRF_SUPPLIED_ERROR,
00087
00089 ERR_GENERAL_BASE = ERR_CAT_GENERAL << ERR_CAT_BIT_SIZE,
00090
00092 ERR_NOT_ENOUGH_CASH,
00093
00095 ERR_LOCAL_AUTHORITY_REFUSES,
00096
00098 ERR_ALREADY_BUILT,
00099
00101 ERR_AREA_NOT_CLEAR,
00102
00104 ERR_OWNED_BY_ANOTHER_COMPANY,
00105
00107 ERR_NAME_IS_NOT_UNIQUE,
00108
00110 ERR_FLAT_LAND_REQUIRED,
00111
00113 ERR_LAND_SLOPED_WRONG,
00114
00116 ERR_VEHICLE_IN_THE_WAY,
00117
00119 ERR_SITE_UNSUITABLE,
00120
00122 ERR_TOO_CLOSE_TO_EDGE,
00123
00125 ERR_STATION_TOO_SPREAD_OUT,
00126 };
00127
00133 static ErrorCategories GetErrorCategory();
00134
00139 static AIErrorType GetLastError();
00140
00145 static char *GetLastErrorString();
00146
00147 #ifndef EXPORT_SKIP
00148
00154 static AIErrorType StringToError(StringID internal_string_id);
00155
00162 static void RegisterErrorMap(StringID internal_string_id, AIErrorType ai_error_msg);
00163
00170 static void RegisterErrorMapString(AIErrorType ai_error_msg, const char *message);
00171 #endif
00172
00173 private:
00174 typedef std::map<StringID, AIErrorType> AIErrorMap;
00175 typedef std::map<AIErrorType, const char *> AIErrorMapString;
00176
00177 static AIErrorMap error_map;
00178 static AIErrorMapString error_map_string;
00179 };
00180
00181 #endif