error_code.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. //Error_code是错误码的底层通用模块,
  2. //功能:用作故障分析和处理。
  3. //用法:所有的功能接口函数return错误管理类,
  4. //然后上层判断分析错误码,并进行故障处理。
  5. #ifndef TEST_ERROR_ERROR_CODE_H
  6. #define TEST_ERROR_ERROR_CODE_H
  7. #include <string>
  8. #include <string.h>
  9. #include<iostream>
  10. //错误管理类转化为字符串 的前缀,固定长度为58
  11. //这个是由显示格式来确定的,如果要修改格式或者 Error_code长度超过8位,Error_level长度超过2位,折需要重新计算
  12. #define ERROR_NAMAGER_TO_STRING_FRONT_LENGTH 58
  13. //进程加锁的状态,
  14. enum Lock_status
  15. {
  16. UNLOCK = 0,
  17. LOCK = 1,
  18. };
  19. //设备使能状态,
  20. enum Able_status
  21. {
  22. UNABLE = 0,
  23. ENABLE = 1,
  24. };
  25. //数据是否为空
  26. enum Empty_status
  27. {
  28. NON_EMPTY = 0,
  29. EMPTY = 1,
  30. };
  31. //错误码的枚举,用来做故障分析
  32. enum Error_code
  33. {
  34. //成功,没有错误,默认值0
  35. SUCCESS = 0x00000000,
  36. //基本错误码,
  37. FAILED = 0x00000001,//失败
  38. ERROR = 0x00000002,//错误
  39. WARNING = 0x00000003,//警告
  40. PARTIAL_SUCCESS = 0x00000002,//部分成功
  41. NO_DATA = 0x00000010,//没有数据,传入参数容器内部没有数据时,
  42. INVALID_MESSAGE = 0x00000011, //无效的消息,
  43. RESPONSE_TIMEOUT = 0x00000012,
  44. PAUSE = 0x00000013, //急停
  45. TASK_CANCEL = 0x00000014, //任务取消
  46. DISCONNECT = 0x00000020, //通讯中断/断开连接
  47. UNKNOW_STATU = 0x00000021, //未知状态
  48. POINTER_IS_NULL = 0x00000101,//空指针
  49. PARAMETER_ERROR = 0x00000102,//参数错误,传入参数不符合规范时,
  50. POINTER_MALLOC_FAIL = 0x00000103,//手动分配内存失败
  51. CLASS_BASE_FUNCTION_CANNOT_USE = 0x00000201,//基类函数不允许使用,必须使用子类的
  52. CONTAINER_IS_TERMINATE = 0x00000301,//容器被终止
  53. // 错误码的规范,
  54. // 错误码是int型,32位,十六进制。
  55. // 例如0x12345678
  56. // 12表示功能模块,例如:laser雷达模块 框架制定
  57. // 34表示文件名称,例如:laser_livox.cpp 框架制定
  58. // 56表示具体的类,例如:class laser_livox 个人制定
  59. // 78表示类的函数,例如:laser_livox::start(); 个人制定
  60. // 注:错误码的制定从1开始,不要从0开始,
  61. // 0用作错误码的基数,用来位运算,来判断错误码的范围。
  62. LOCATER_MSG_RESPONSE_TYPE_ERROR, //测量反馈消息类型错误(致命)
  63. LOCATER_MSG_RESPONSE_INFO_ERROR,
  64. LOCATER_MSG_REQUEST_CANCELED,
  65. LOCATER_MSG_REQUEST_INVALID,
  66. LOCATER_MSG_RESPONSE_HAS_NO_REQUEST,
  67. LOCATER_MSG_REQUEST_REPEATED,
  68. /*
  69. * parkspace error code
  70. */
  71. PARKSPACE_REQUEST_MSG_TYPE_ERROR = 0x04010000,
  72. PARKSPACE_ALLOCMSG_RESPONSE_HAS_NO_REQUEST,
  73. PARKSPACE_SEARCHMSG_RESPONSE_HAS_NO_REQUEST,
  74. PARKSPACE_RELEASEMSG_RESPONSE_HAS_NO_REQUEST,
  75. PARKSPACE_ALLOC_REQUEST_INVALID,
  76. PARKSPACE_SEARCH_REQUEST_INVALID,
  77. PARKSPACE_RELEASE_REQUEST_INVALID,
  78. PARKSPACE_ALLOC_REQUEST_REPEATED,
  79. PARKSPACE_SEARCH_REQUEST_REPEATED,
  80. PARKSPACE_RELEASE_REQUEST_REPEATED,
  81. PARKSPACE_ALLOC_RESPONSE_TYPE_ERROR,
  82. PARKSPACE_SEARCH_RESPONSE_TYPE_ERROR,
  83. PARKSPACE_RELEASE_RESPONSE_TYPE_ERROR,
  84. PARKSPACE_ALLOC_RESPONSE_INFO_ERROR,
  85. PARKSPACE_SEARCH_RESPONSE_INFO_ERROR,
  86. PARKSPACE_RELEASE_RESPONSE_INFO_ERROR,
  87. PARKSPACE_ALLOC_REQUEST_CANCELED,
  88. PARKSPACE_SEARCH_REQUEST_CANCELED,
  89. PARKSPACE_RELEASE_REQUEST_CANCELED,
  90. //Communication module, 通信模块
  91. COMMUNICATION_BASE_ERROR_BASE = 0x11010000,
  92. COMMUNICATION_READ_PROTOBUF_ERROR, //模块,读取参数错误
  93. COMMUNICATION_BIND_ERROR,
  94. COMMUNICATION_CONNECT_ERROR,
  95. COMMUNICATION_ANALYSIS_TIME_OUT, //解析超时,
  96. COMMUNICATION_EXCUTER_IS_BUSY, //处理器正忙, 请稍等
  97. DISPATCH_ERROR_BASE= 0x13000000,
  98. DISPATCH_MANAGER_ERROR_BASE =0x13010000,
  99. DISPATCH_MANAGER_READ_PROTOBUF_ERROR, //调度管理模块,读取参数错误
  100. DISPATCH_MANAGER_STATUS_BUSY, //调度管理模块,状态正忙
  101. DISPATCH_MANAGER_STATUS_ERROR, //调度管理模块,状态错误
  102. DISPATCH_MANAGER_TASK_TYPE_ERROR, //调度管理模块,任务类型错误
  103. DISPATCH_MANAGER_IS_NOT_READY, //调度管理模块,不在准备状态
  104. CARRIER_ERROR_BASE =0x13020000,
  105. CARRIER_READ_PROTOBUF_ERROR , //搬运器模块,读取参数错误
  106. CARRIER_STATUS_BUSY , //搬运器模块,状态正忙
  107. CARRIER_STATUS_ERROR, //搬运器模块,状态错误
  108. CARRIER_STATUS_DISCONNECT, //搬运器模块,状态断连
  109. CARRIER_TASK_TYPE_ERROR , //搬运器模块,任务类型错误
  110. CARRIER_TASK_OVER_TIME , //搬运器模块,任务超时
  111. CARRIER_IS_NOT_READY , //搬运器模块,不在准备状态
  112. CARRIER_RESPONS_ERROR , //搬运器模块,指令的执行失败
  113. CARRIER_TASK_NOTHINGNESS, //搬运器模块,任务不存在
  114. SNAP7_ERROR_BASE = 0x1401000,
  115. SNAP7_READ_PROTOBUF_ERROR , //snap7通信模块,读取参数错误
  116. SNAP7_CONNECT_ERROR , //snap7通信模块,连接错误
  117. SNAP7_DISCONNECT_ERROR , //snap7通信模块,断连错误
  118. SNAP7_READ_ERROR , //snap7通信模块,读取错误
  119. SNAP7_WRITE_ERROR , //snap7通信模块,写入错误
  120. SNAP7_ANALYSIS_TIME_OUT , //解析超时
  121. SNAP7_EXCUTER_IS_BUSY , //处理器正忙 请稍等
  122. LASER_ERROR_BASE =0x01000000,
  123. LASER_BASE_ERROR_BASE =0x01010000,
  124. LASER_TASK_PARAMETER_ERROR =0x01010001, //雷达基类模块,任务输入参数错误
  125. LASER_CONNECT_FAILED, //雷达基类模块,连接失败
  126. LASER_START_FAILED, //雷达基类模块,开始扫描失败
  127. LASER_CHECK_FAILED, //雷达基类模块,检查失败
  128. LASER_STATUS_BUSY, //雷达基类模块,状态正忙
  129. LASER_STATUS_ERROR, //雷达基类模块,状态错误
  130. LASER_TASK_OVER_TIME, //雷达基类模块,任务超时
  131. LASER_QUEUE_ERROR, //雷达基类模块,数据缓存错误
  132. LIVOX_ERROR_BASE =0x01020000,
  133. LIVOX_START_FAILE, //livox模块,开始扫描失败
  134. LIVOX_TASK_TYPE_ERROR, //livox模块,任务类型错误
  135. lIVOX_CANNOT_PUSH_DATA, //livox模块,不能添加扫描的数据
  136. lIVOX_CHECK_FAILED, //livox模块,检查失败
  137. lIVOX_STATUS_BUSY, //livox模块,状态正忙
  138. lIVOX_STATUS_ERROR, //livox模块,状态错误
  139. LASER_MANAGER_ERROR_BASE= 0x01030000,
  140. LASER_MANAGER_READ_PROTOBUF_ERROR, //雷达管理模块,读取参数错误
  141. LASER_MANAGER_STATUS_BUSY, //雷达管理模块,状态正忙
  142. LASER_MANAGER_STATUS_ERROR, //雷达管理模块,状态错误
  143. LASER_MANAGER_TASK_TYPE_ERROR, //雷达管理模块,任务类型错误
  144. LASER_MANAGER_IS_NOT_READY, //雷达管理模块,不在准备状态
  145. LASER_MANAGER_TASK_OVER_TIME, //雷达管理模块,任务超时
  146. LASER_MANAGER_LASER_INDEX_ERRPR, //雷达管理模块,雷达索引错误,编号错误。
  147. LASER_MANAGER_LASER_INDEX_REPEAT, //雷达管理模块,需要扫描的雷达索引重复,可忽略的错误,提示作用
  148. LIVOX_DRIVER_ERROR_BASE =0x01040000,
  149. LIVOX_DRIVER_SN_REPEAT, //livox驱动模块,雷达广播码重复
  150. LIVOX_DRIVER_SN_ERROR, //livox驱动模块,雷达广播码错误
  151. LIVOX_SKD_INIT_FAILED, //livox驱动模块,livox_sdk初始化失败
  152. LIVOX_DRIVER_NOT_READY, //livox驱动模块,livox没有准备好.
  153. LOCATER_ERROR_BASE =0x03000000,
  154. LOCATER_MANAGER_ERROR_BASE =0x03010000,
  155. LOCATER_MANAGER_READ_PROTOBUF_ERROR, //定位管理模块,读取参数错误
  156. LOCATER_MANAGER_STATUS_BUSY, //定位管理模块,状态正忙
  157. LOCATER_MANAGER_STATUS_ERROR, //定位管理模块,状态错误
  158. LOCATER_MANAGER_TASK_TYPE_ERROR, //定位管理模块,任务类型错误
  159. LOCATER_MANAGER_IS_NOT_READY, //定位管理模块,不在准备状态
  160. LOCATER_MANAGER_CLOUD_MAP_ERROR, //定位管理模块,任务输入点云map的error
  161. LOCATER_MANAGER_TASK_OVER_TIME, //定位管理模块,任务超时
  162. LOCATER_ALGORITHM_ERROR_BASE =0x03020000,
  163. LOCATER_TASK_INIT_CLOUD_EMPTY , //定位任务初始化点云为空
  164. LOCATER_TASK_ERROR, //定位任务错误
  165. LOCATER_TASK_INPUT_CLOUD_UNINIT, //定位任务输入点云为空
  166. LOCATER_INPUT_CLOUD_EMPTY, //定位输入点云为空
  167. LOCATER_YOLO_UNINIT, //定位yolo未初始化
  168. LOCATER_POINTSIFT_UNINIT, //定位POINTSIFT未初始化
  169. LOCATER_3DCNN_UNINIT, //定位3DCNN未初始化
  170. LOCATER_INPUT_YOLO_CLOUD_EMPTY, //定位输入yolo点云为空
  171. LOCATER_Y_OUT_RANGE_BY_PLC, //定位超出plc的限制范围
  172. LOCATER_MEASURE_HEIGHT_CLOUD_EMPTY, //定位测量高点云为空
  173. LOCATER_SIFT_ERROR_BASE =0x03020100,
  174. LOCATER_SIFT_INIT_FAILED, //定位过滤模块,初始化失败
  175. LOCATER_SIFT_INPUT_CLOUD_UNINIT, //定位过滤模块,输入点云未初始化
  176. LOCATER_SIFT_INPUT_CLOUD_EMPTY, //定位过滤模块,输入点云为空
  177. LOCATER_SIFT_GRID_ERROR, //定位过滤模块,筛选网格错误
  178. LOCATER_SIFT_SELECT_ERROR, //定位过滤模块,筛选选择错误
  179. LOCATER_SIFT_CLOUD_VERY_LITTLE, //定位过滤模块,筛选点云很少
  180. LOCATER_SIFT_CREATE_INPUT_DATA_FAILED, //定位过滤模块,筛选创建输入数据失败
  181. LOCATER_SIFT_PREDICT_FAILED, //定位过滤模块,预测失败
  182. LOCATER_SIFT_PREDICT_TIMEOUT, //定位过滤模块,预测超时
  183. LOCATER_SIFT_PREDICT_NO_WHEEL_POINT, //定位过滤模块,预测结果没有车轮点云
  184. LOCATER_SIFT_PREDICT_NO_CAR_POINT, //定位过滤模块,预测结果没有车身点云
  185. LOCATER_SIFT_FILTE_OBS_FAILED, //定位过滤模块,过滤OBS失败
  186. LOCATER_SIFT_INPUT_BOX_PARAMETER_FAILED, //定位过滤模块,输入范围参数错误
  187. LOCATER_3DCNN_ERROR_BASE =0x03020300,
  188. LOCATER_3DCNN_INIT_FAILED, //定位3DCNN模块,初始化失败
  189. LOCATER_3DCNN_INPUT_CLOUD_UNINIT, //定位3DCNN模块,输入点云未初始化
  190. LOCATER_3DCNN_INPUT_CLOUD_EMPTY, //定位3DCNN模块,输入点云为空
  191. LOCATER_3DCNN_INPUT_CLOUD_MAP_ERROR, //定位3DCNN模块,输入点云的map错误
  192. LOCATER_3DCNN_PCA_OUT_ERROR, //定位3DCNN模块,pca错误
  193. LOCATER_3DCNN_EXTRACT_RECT_ERROR, //定位3DCNN模块,提取矩形错误
  194. LOCATER_3DCNN_RECT_SIZE_ERROR, //定位3DCNN模块,矩形范围错误
  195. LOCATER_3DCNN_PREDICT_FAILED, //定位3DCNN模块,预测失败
  196. LOCATER_3DCNN_VERIFY_RECT_FAILED_3, //定位3DCNN模块,验证矩形失败3
  197. LOCATER_3DCNN_VERIFY_RECT_FAILED_4, //定位3DCNN模块,验证矩形失败4
  198. LOCATER_3DCNN_KMEANS_FAILED, //定位3DCNN模块,k均值失败
  199. LOCATER_3DCNN_IIU_FAILED, //定位3DCNN模块,IIU失败
  200. LOCATER_3DCNN_PCA_OUT_CLOUD_EMPTY, //定位3DCNN模块,pca输出点云为空
  201. WANJI_LIDAR_DEVICE_ERROR_BASE =0x06080000, //万集设备模块,错误基类
  202. WANJI_LIDAR_DEVICE_STATUS_BUSY, //万集设备模块,状态正忙
  203. WANJI_LIDAR_DEVICE_STATUS_ERROR, //万集设备模块,状态错误
  204. WANJI_LIDAR_DEVICE_TASK_TYPE_ERROR, //万集设备模块,任务类型错误
  205. WANJI_LIDAR_DEVICE_TASK_OVER_TIME, //万集设备模块,任务超时
  206. WANJI_LIDAR_DEVICE_NO_CLOUD, //万集设备模块,没有点云
  207. WJ_LIDAR_COMMUNICATION_ERROR_BASE =0x06010000,
  208. WJ_LIDAR_COMMUNICATION_UNINITIALIZED, //万集通信,未初始化
  209. WJ_LIDAR_COMMUNICATION_DISCONNECT, //万集通信,断连
  210. WJ_LIDAR_COMMUNICATION_FAULT, //万集通信,故障
  211. WJ_LIDAR_CONNECT_FAILED, //万集通信,连接失败
  212. WJ_LIDAR_UNINITIALIZED, //万集通信,未初始化
  213. WJ_LIDAR_READ_FAILED, //万集通信,读取失败
  214. WJ_LIDAR_WRITE_FAILED, //万集通信,写入失败
  215. WJ_LIDAR_GET_CLOUD_TIMEOUT, //万集通信,获取点云超时
  216. WJ_PROTOCOL_ERROR_BASE =0x06020000,
  217. WJ_PROTOCOL_STATUS_BUSY, //万集解析,状态正忙
  218. WJ_PROTOCOL_STATUS_ERROR, //万集解析,状态错误
  219. WJ_PROTOCOL_INTEGRITY_ERROR, //万集解析,完整性错误
  220. WJ_PROTOCOL_PARSE_FAILED, //万集解析,解析失败
  221. WJ_PROTOCOL_EMPTY_PACKAGE, //万集解析,空包
  222. WJ_PROTOCOL_EXCEED_MAX_SIZE, //万集解析,超出最大范围
  223. WJ_REGION_ERROR_BASE =0x06030000,
  224. WJ_REGION_EMPTY_CLOUD, //万集测量,空点云
  225. WJ_REGION_EMPTY_NO_WHEEL_INFORMATION, //万集测量,没有车轮信息
  226. WJ_REGION_RECTANGLE_ANGLE_ERROR, //万集测量,矩形旋转角错误
  227. WJ_REGION_RECTANGLE_SIZE_ERROR, //万集测量,矩形大小错误
  228. WJ_REGION_RECTANGLE_SYMMETRY_ERROR, //万集测量,矩形对称错误
  229. WJ_REGION_CLUSTER_SIZE_ERROR, //万集测量,簇大小错误
  230. WJ_MANAGER_ERROR_BASE =0x06040000,
  231. WJ_MANAGER_UNINITIALIZED, //万集管理模块,未初始化
  232. WJ_MANAGER_LIDAR_DISCONNECTED, //万集管理模块,雷达断链
  233. WJ_MANAGER_PLC_DISCONNECTED, //万集管理模块,plc断链
  234. WJ_MANAGER_EMPTY_CLOUD, //万集管理模块,空点云
  235. WJ_MANAGER_READ_PROTOBUF_ERROR, //万集管理模块,读取参数错误
  236. WJ_MANAGER_INIT_ERROR, //万集管理模块,重复初始化
  237. WJ_MANAGER_TASK_TYPE_ERROR, //万集管理模块,任务类型错误
  238. WJ_MANAGER_STATUS_BUSY, //万集管理模块,状态正忙
  239. WJ_MANAGER_STATUS_ERROR, //万集管理模块,状态错误
  240. WJ_MANAGER_LASER_INDEX_ERRPR, //万集管理模块,雷达索引错误,编号错误。
  241. WJ_MANAGER_LASER_INDEX_REPEAT, //万集管理模块,需要扫描的雷达索引重复,可忽略的错误,提示作用
  242. WJ_MANAGER_TASK_OVER_TIME, //万集管理模块,任务超时
  243. WJ_LIDAR_TASK_ERROR_BASE =0x06050000,
  244. WJ_LIDAR_TASK_EMPTY_RESULT, //万集任务模块,空结果
  245. WJ_LIDAR_TASK_EMPTY_TASK, //万集任务模块,空任务
  246. WJ_LIDAR_TASK_WRONG_TYPE, //万集任务模块,错误类型
  247. WJ_LIDAR_TASK_INVALID_TASK, //万集任务模块,无效任务
  248. WJ_LIDAR_TASK_MEASURE_FAILED, //万集任务模块,测量失败
  249. };
  250. //错误等级,用来做故障处理
  251. enum Error_level
  252. {
  253. // 正常,没有错误,默认值0
  254. NORMAL = 0,
  255. // 轻微故障,可忽略的故障,NEGLIGIBLE_ERROR
  256. // 提示作用,不做任何处理,不影响代码的流程,
  257. // 用作一些不重要的事件,即使出错也不会影响到系统功能,
  258. // 例如:文件保存错误,等
  259. NEGLIGIBLE_ERROR = 1,
  260. // 一般故障,MINOR_ERROR
  261. // 用作底层功能函数的错误返回,表示该功能函数执行失败,
  262. // 返回给应用层之后,需要做故障分析和处理,
  263. // 例如:雷达数据传输失败,应用层就需要进行重新扫描,或者重连,或者重置参数等。
  264. MINOR_ERROR = 2,
  265. // 严重故障,MAJOR_ERROR
  266. // 用作应用层的任务事件的结果,表示该功能模块失败。
  267. // 通常是底层函数返回一般故障之后,应用层无法处理并解决故障,此时就要进行故障升级,
  268. // 从一般故障升级为严重故障,然后进行回退流程,回退已经执行的操作,最终回到故障待机状态。
  269. // 需要外部清除故障,并复位至正常待机状态,才能恢复功能的使用。
  270. // 例如:雷达扫描任务失败,且无法自动恢复。
  271. MAJOR_ERROR = 3,
  272. // 致命故障,CRITICAL_ERROR
  273. // 系统出现致命错误。导致系统无法正常运行,
  274. // 此时系统应该紧急停机,执行紧急流程,快速停机。
  275. // 此时不允许再执行任何函数和任务指令,防止系统故障更加严重。
  276. // 也不需要做任何错误处理了,快速执行紧急流程。
  277. // 例如:内存错误,进程挂死,关键设备失控,监控设备报警,等
  278. CRITICAL_ERROR = 4,
  279. };
  280. class Error_manager
  281. {
  282. public://外部接口函数
  283. //构造函数
  284. Error_manager();
  285. //拷贝构造
  286. Error_manager(const Error_manager & error_manager);
  287. //赋值构造
  288. Error_manager(Error_code error_code, Error_level error_level = NORMAL,
  289. const char* p_error_description = NULL, int description_length = 0);
  290. //赋值构造
  291. Error_manager(Error_code error_code, Error_level error_level , std::string & error_aggregate_string);
  292. //析构函数
  293. ~Error_manager();
  294. //初始化
  295. void error_manager_init();
  296. //初始化
  297. void error_manager_init(Error_code error_code, Error_level error_level = NORMAL,
  298. const char* p_error_description = NULL, int description_length = 0);
  299. //初始化
  300. void error_manager_init(Error_code error_code, Error_level error_level , std::string & error_aggregate_string);
  301. //重置
  302. void error_manager_reset(Error_code error_code, Error_level error_level = NORMAL,
  303. const char* p_error_description = NULL, int description_length = 0);
  304. //重置
  305. void error_manager_reset(Error_code error_code, Error_level error_level , std::string & error_aggregate_string);
  306. //重置
  307. void error_manager_reset(const Error_manager & error_manager);
  308. //清除所有内容
  309. void error_manager_clear_all();
  310. //重载=
  311. Error_manager& operator=(const Error_manager & error_manager);
  312. //重载=,支持Error_manager和Error_code的直接转化,会清空错误等级和描述
  313. Error_manager& operator=(Error_code error_code);
  314. //重载==
  315. bool operator==(const Error_manager & error_manager);
  316. //重载==,支持Error_manager和Error_code的直接比较
  317. bool operator==(Error_code error_code);
  318. //重载!=
  319. bool operator!=(const Error_manager & error_manager);
  320. //重载!=,支持Error_manager和Error_code的直接比较
  321. bool operator!=(Error_code error_code);
  322. //重载<<,支持cout<<
  323. friend std::ostream & operator<<(std::ostream &out, Error_manager &error_manager);
  324. //获取错误码
  325. Error_code get_error_code();
  326. //获取错误等级
  327. Error_level get_error_level();
  328. //获取错误描述的指针,(浅拷贝)
  329. char* get_error_description();
  330. //复制错误描述,(深拷贝)
  331. //output:p_error_description 错误描述的字符串指针,不可以为NULL,必须要有实际的内存
  332. //output:description_length 错误描述的字符串长度,不可以为0,长度最好足够大,一般256即可。
  333. void copy_error_description(const char* p_error_description, int description_length);
  334. //复制错误描述,(深拷贝)
  335. //output:error_description_string 错误描述的string
  336. void copy_error_description(std::string & error_description_string);
  337. //设置错误码
  338. void set_error_code(Error_code error_code);
  339. //比较错误等级并升级,取高等级的结果
  340. void set_error_level_up(Error_level error_level);
  341. //比较错误等级并降级,取低等级的结果
  342. void set_error_level_down(Error_level error_level);
  343. //错误等级,设定到固定值
  344. void set_error_level_location(Error_level error_level);
  345. //设置错误描述
  346. void set_error_description(const char* p_error_description, int description_length = 0);
  347. //设置错误描述
  348. void set_error_description(std::string & error_description_string);
  349. //尾部追加错误描述
  350. void add_error_description(const char* p_error_description, int description_length = 0);
  351. //尾部追加错误描述
  352. void add_error_description(std::string & error_description_string);
  353. //比较错误是否相同,
  354. // 注:只比较错误码和等级
  355. bool is_equal_error_manager(const Error_manager & error_manager);
  356. //比较并覆盖错误,讲低级错误转为字符串存放于描述中,
  357. //如果错误相同,则保留this的,将输入参数转入描述。
  358. void compare_and_cover_error(const Error_manager & error_manager);
  359. //比较并覆盖错误,讲低级错误转为字符串存放于描述中,
  360. //如果错误相同,则保留this的,将输入参数转入描述。
  361. void compare_and_cover_error( Error_manager * p_error_manager);
  362. //将所有的错误信息,格式化为字符串,用作日志打印。
  363. //output:p_error_description 错误汇总的字符串指针,不可以为NULL,必须要有实际的内存
  364. //output:description_length 错误汇总的字符串长度,不可以为0,长度最好足够大,一般256即可。
  365. void translate_error_to_string(char* p_error_aggregate, int aggregate_length);
  366. //output:error_description_string 错误汇总的string
  367. void translate_error_to_string(std::string & error_aggregate_string);
  368. //错误码转字符串的简易版,可支持cout<<
  369. //return 错误汇总的string
  370. std::string to_string();
  371. protected:
  372. Error_code m_error_code; //错误码
  373. Error_level m_error_level; //错误等级
  374. char* pm_error_description; //错误描述
  375. int m_description_length; //错误描述的字符长度
  376. protected://内部功能函数
  377. public:
  378. //释放错误描述的内存,
  379. void free_description();
  380. //重新分配错误描述的内存,并从外部拷贝新的(深拷贝)
  381. //input:p_error_description 错误描述的字符串指针,可以为NULL,
  382. //input:description_length 错误描述的字符串长度,如果为0,则从p_error_description里面获取有效的长度
  383. void reallocate_memory_and_copy_string(const char* p_error_description, int description_length = 0);
  384. //重新分配错误描述的内存,并从外部拷贝新的(深拷贝)
  385. //input:error_aggregate_string 错误描述的string
  386. void reallocate_memory_and_copy_string(std::string & error_aggregate_string);
  387. };
  388. #endif //TEST_ERROR_ERROR_CODE_H