多个工作流统一处理返回算法

来源:互联网 发布:我的淘宝登陆 编辑:程序博客网 时间:2024/06/06 12:51

 

避免重复使用if语句,或直接执行return语句,避免使用goto语句

//Title: Tackle the multple workflow together by once at the end//Author: Aletenze//Time: 2011-12-10//Version: 1.0.0.2/* 接口通用返回码-1 - 参数错误-2 - 串口未打开-3 - 写串口数据失败-4 - 读串口数据失败-5 - 包检验出错-6 - 包错-7 - 固件错误-999 - 未知错误(异常)*/#define SUCCESS_RETURN_VALUE (0) //函数成功执行返回值#define  TL_SUCCESS(0)#define  PARAM_ERR(-1)#define  PORT_DISOPEN_ERR(-2)#define  WRITEDATA_ERR(-3)#define  READDATA_ERR(-4)#define  PKG_CHECK_ERR(-5)#define  PKG_DATA_ERR(-6)#define  FIRMWARE_ERR           (-7)#define  UNKNOWN_ERR(-999)#define  MAX_PROCESS_COUNT (1<<31) //最大的整数, max(int)#define BREAK_WHILE_VALUE MAX_PROCESS_COUNT //最大的process数目int process1(); //工作1int process2();// 工作2int process3(); //工作3int LogInfo(LPCTSTR format,...); // 记录日志函数int getRet(int param1, int param2){int nRet=0;const UINT PROCESSNUM=3;int processcount=0;int temp_success_return=true;ostringstream logos;//---------------------检查参数是否正确----------------------if(!Check_param(param1,param2)){processcount=PARAM_ERR;}//---------------------开始执行工作流---------------------while(temp_success_return && processcount<PROCESSNUM && processcount>=0){switch (processcount){case 0:{//"{}"以内为可变内容,只要最终得到一个nRet值即可// 为了保证,这个算法的正常执行,避免死循环,请不要在"{}"//内部更改 processcount的值,也不要执行“break”动作nRet=process1();}temp_success_return=(SUCCESS_RETURN_VALUE==nRet);processcount++;break;case 1:{//"{}"以内为可变内容,只要最终得到一个nRet值即可// 为了保证,这个算法的正常执行,避免死循环,请不要在"{}"//内部更改 processcount的值,也不要执行“break”动作nRet=process2();}temp_success_return=(SUCCESS_RETURN_VALUE==nRet);processcount++;break;case 2:{//"{}"以内为可变内容,只要最终得到一个nRet值即可// 为了保证,这个算法的正常执行,避免死循环,请不要在"{}"//内部更改 processcount的值,也不要执行“break”动作nRet=process3();}temp_success_return=(SUCCESS_RETURN_VALUE==nRet);processcount++;break;default:processcount=BREAK_WHILE_VALUE;}}//---------------------结束工作流处理,进行结果判断---------------------switch(processcount){case PARAM_ERR:{logos<<"Param , Return "}case 1:{logos<<"process1, Return "switch(nRet){case -101:logos<<"-101";break;case -102:logos<<"-102";break;default:logos<<"未知返回值";}}break;case 2:{logos<<"process2, Return "switch(nRet){case -201:logos<<"-201";break;case -202:logos<<"-202";break;default:logos<<"未知返回值";}}break;case 3:{logos<<"process3, Return "switch(nRet){case -301:logos<<"-301";break;case -302:logos<<"-302";break;default:logos<<"未知返回值";}}break;default:logos<<"哈哈^_^这个算法你还不会用,嘻嘻,好好分析一下,你会用的~~~";}LogInfo("%s\n",logos.str().c_str());return nRet;}