std::pair<float, Vector3D> dekartToPolar(Point3D point) { using RetType = std::pair<float, Vector3D>; float scalar = std::sqrt(point.X()*point.X() + point.Y()*point.Y() + point.Z()*point.Z()); if (scalar == 0) { return RetType(0, Vector3D(0, 0)); } float beta = std::asin(point.Z() / scalar); if (point.X() == 0) { return RetType(scalar, Vector3D(beta, pi/2)); } float alpha = std::atan(point.Y() / point.X()); return RetType(scalar, Vector3D(alpha, beta)); }
RetType dispatchByItemKind_gen(DirectiveExecutable item,Visitor& vis) { switch(item.kind()) { case BRIG_KIND_DIRECTIVE_FUNCTION: return vis(DirectiveFunction(item)); case BRIG_KIND_DIRECTIVE_INDIRECT_FUNCTION: return vis(DirectiveIndirectFunction(item)); case BRIG_KIND_DIRECTIVE_KERNEL: return vis(DirectiveKernel(item)); case BRIG_KIND_DIRECTIVE_SIGNATURE: return vis(DirectiveSignature(item)); default: assert(false); break; } return RetType(); }
RetType extract_field(planner_node_type ptype, CallArgs... call_args) { switch(ptype) { case planner_node_type::CONSTANT_NODE: return FieldExtractionVisitor<planner_node_type::CONSTANT_NODE>::get(call_args...); case planner_node_type::APPEND_NODE: return FieldExtractionVisitor<planner_node_type::APPEND_NODE>::get(call_args...); case planner_node_type::BINARY_TRANSFORM_NODE: return FieldExtractionVisitor<planner_node_type::BINARY_TRANSFORM_NODE>::get(call_args...); case planner_node_type::LOGICAL_FILTER_NODE: return FieldExtractionVisitor<planner_node_type::LOGICAL_FILTER_NODE>::get(call_args...); case planner_node_type::PROJECT_NODE: return FieldExtractionVisitor<planner_node_type::PROJECT_NODE>::get(call_args...); case planner_node_type::RANGE_NODE: return FieldExtractionVisitor<planner_node_type::RANGE_NODE>::get(call_args...); case planner_node_type::SARRAY_SOURCE_NODE: return FieldExtractionVisitor<planner_node_type::SARRAY_SOURCE_NODE>::get(call_args...); case planner_node_type::SFRAME_SOURCE_NODE: return FieldExtractionVisitor<planner_node_type::SFRAME_SOURCE_NODE>::get(call_args...); case planner_node_type::TRANSFORM_NODE: return FieldExtractionVisitor<planner_node_type::TRANSFORM_NODE>::get(call_args...); case planner_node_type::GENERALIZED_TRANSFORM_NODE: return FieldExtractionVisitor<planner_node_type::GENERALIZED_TRANSFORM_NODE>::get(call_args...); case planner_node_type::LAMBDA_TRANSFORM_NODE: return FieldExtractionVisitor<planner_node_type::LAMBDA_TRANSFORM_NODE>::get(call_args...); case planner_node_type::UNION_NODE: return FieldExtractionVisitor<planner_node_type::UNION_NODE>::get(call_args...); case planner_node_type::REDUCE_NODE: return FieldExtractionVisitor<planner_node_type::REDUCE_NODE>::get(call_args...); case planner_node_type::GENERALIZED_UNION_PROJECT_NODE: return FieldExtractionVisitor<planner_node_type::GENERALIZED_UNION_PROJECT_NODE>::get(call_args...); case planner_node_type::IDENTITY_NODE: return FieldExtractionVisitor<planner_node_type::IDENTITY_NODE>::get(call_args...); case planner_node_type::INVALID: ASSERT_MSG(false, "Infering type of an invalid node"); return RetType(); } return RetType(); }
RetType dispatchByItemKind_gen(Operand item,Visitor& vis) { switch(item.kind()) { case BRIG_KIND_OPERAND_ADDRESS: return vis(OperandAddress(item)); case BRIG_KIND_OPERAND_ALIGN: return vis(OperandAlign(item)); case BRIG_KIND_OPERAND_CODE_LIST: return vis(OperandCodeList(item)); case BRIG_KIND_OPERAND_CODE_REF: return vis(OperandCodeRef(item)); case BRIG_KIND_OPERAND_CONSTANT_BYTES: return vis(OperandConstantBytes(item)); case BRIG_KIND_OPERAND_CONSTANT_IMAGE: return vis(OperandConstantImage(item)); case BRIG_KIND_OPERAND_CONSTANT_OPERAND_LIST: return vis(OperandConstantOperandList(item)); case BRIG_KIND_OPERAND_CONSTANT_SAMPLER: return vis(OperandConstantSampler(item)); case BRIG_KIND_OPERAND_OPERAND_LIST: return vis(OperandOperandList(item)); case BRIG_KIND_OPERAND_REGISTER: return vis(OperandRegister(item)); case BRIG_KIND_OPERAND_STRING: return vis(OperandString(item)); case BRIG_KIND_OPERAND_WAVESIZE: return vis(OperandWavesize(item)); default: assert(false); break; } return RetType(); }
RetType dispatchByItemKind_gen(Code item,Visitor& vis) { switch(item.kind()) { case BRIG_KIND_DIRECTIVE_ARG_BLOCK_END: return vis(DirectiveArgBlockEnd(item)); case BRIG_KIND_DIRECTIVE_ARG_BLOCK_START: return vis(DirectiveArgBlockStart(item)); case BRIG_KIND_DIRECTIVE_COMMENT: return vis(DirectiveComment(item)); case BRIG_KIND_DIRECTIVE_CONTROL: return vis(DirectiveControl(item)); case BRIG_KIND_DIRECTIVE_EXTENSION: return vis(DirectiveExtension(item)); case BRIG_KIND_DIRECTIVE_FBARRIER: return vis(DirectiveFbarrier(item)); case BRIG_KIND_DIRECTIVE_FUNCTION: return vis(DirectiveFunction(item)); case BRIG_KIND_DIRECTIVE_INDIRECT_FUNCTION: return vis(DirectiveIndirectFunction(item)); case BRIG_KIND_DIRECTIVE_KERNEL: return vis(DirectiveKernel(item)); case BRIG_KIND_DIRECTIVE_LABEL: return vis(DirectiveLabel(item)); case BRIG_KIND_DIRECTIVE_LOC: return vis(DirectiveLoc(item)); case BRIG_KIND_DIRECTIVE_MODULE: return vis(DirectiveModule(item)); case BRIG_KIND_DIRECTIVE_PRAGMA: return vis(DirectivePragma(item)); case BRIG_KIND_DIRECTIVE_SIGNATURE: return vis(DirectiveSignature(item)); case BRIG_KIND_DIRECTIVE_VARIABLE: return vis(DirectiveVariable(item)); case BRIG_KIND_INST_ADDR: return vis(InstAddr(item)); case BRIG_KIND_INST_ATOMIC: return vis(InstAtomic(item)); case BRIG_KIND_INST_BASIC: return vis(InstBasic(item)); case BRIG_KIND_INST_BR: return vis(InstBr(item)); case BRIG_KIND_INST_CMP: return vis(InstCmp(item)); case BRIG_KIND_INST_CVT: return vis(InstCvt(item)); case BRIG_KIND_INST_IMAGE: return vis(InstImage(item)); case BRIG_KIND_INST_LANE: return vis(InstLane(item)); case BRIG_KIND_INST_MEM: return vis(InstMem(item)); case BRIG_KIND_INST_MEM_FENCE: return vis(InstMemFence(item)); case BRIG_KIND_INST_MOD: return vis(InstMod(item)); case BRIG_KIND_INST_QUERY_IMAGE: return vis(InstQueryImage(item)); case BRIG_KIND_INST_QUERY_SAMPLER: return vis(InstQuerySampler(item)); case BRIG_KIND_INST_QUEUE: return vis(InstQueue(item)); case BRIG_KIND_INST_SEG: return vis(InstSeg(item)); case BRIG_KIND_INST_SEG_CVT: return vis(InstSegCvt(item)); case BRIG_KIND_INST_SIGNAL: return vis(InstSignal(item)); case BRIG_KIND_INST_SOURCE_TYPE: return vis(InstSourceType(item)); case BRIG_KIND_NONE: return vis(DirectiveNone(item)); default: assert(false); break; } return RetType(); }
RetType dispatchByItemKind_gen(Directive item,Visitor& vis) { switch(item.kind()) { case BRIG_KIND_DIRECTIVE_ARG_BLOCK_END: return vis(DirectiveArgBlockEnd(item)); case BRIG_KIND_DIRECTIVE_ARG_BLOCK_START: return vis(DirectiveArgBlockStart(item)); case BRIG_KIND_DIRECTIVE_COMMENT: return vis(DirectiveComment(item)); case BRIG_KIND_DIRECTIVE_CONTROL: return vis(DirectiveControl(item)); case BRIG_KIND_DIRECTIVE_EXTENSION: return vis(DirectiveExtension(item)); case BRIG_KIND_DIRECTIVE_FBARRIER: return vis(DirectiveFbarrier(item)); case BRIG_KIND_DIRECTIVE_FUNCTION: return vis(DirectiveFunction(item)); case BRIG_KIND_DIRECTIVE_INDIRECT_FUNCTION: return vis(DirectiveIndirectFunction(item)); case BRIG_KIND_DIRECTIVE_KERNEL: return vis(DirectiveKernel(item)); case BRIG_KIND_DIRECTIVE_LABEL: return vis(DirectiveLabel(item)); case BRIG_KIND_DIRECTIVE_LOC: return vis(DirectiveLoc(item)); case BRIG_KIND_DIRECTIVE_MODULE: return vis(DirectiveModule(item)); case BRIG_KIND_DIRECTIVE_PRAGMA: return vis(DirectivePragma(item)); case BRIG_KIND_DIRECTIVE_SIGNATURE: return vis(DirectiveSignature(item)); case BRIG_KIND_DIRECTIVE_VARIABLE: return vis(DirectiveVariable(item)); case BRIG_KIND_NONE: return vis(DirectiveNone(item)); default: assert(false); break; } return RetType(); }
RetType dispatchByItemKind_gen(Inst item,Visitor& vis) { switch(item.kind()) { case BRIG_KIND_INST_ADDR: return vis(InstAddr(item)); case BRIG_KIND_INST_ATOMIC: return vis(InstAtomic(item)); case BRIG_KIND_INST_BASIC: return vis(InstBasic(item)); case BRIG_KIND_INST_BR: return vis(InstBr(item)); case BRIG_KIND_INST_CMP: return vis(InstCmp(item)); case BRIG_KIND_INST_CVT: return vis(InstCvt(item)); case BRIG_KIND_INST_IMAGE: return vis(InstImage(item)); case BRIG_KIND_INST_LANE: return vis(InstLane(item)); case BRIG_KIND_INST_MEM: return vis(InstMem(item)); case BRIG_KIND_INST_MEM_FENCE: return vis(InstMemFence(item)); case BRIG_KIND_INST_MOD: return vis(InstMod(item)); case BRIG_KIND_INST_QUERY_IMAGE: return vis(InstQueryImage(item)); case BRIG_KIND_INST_QUERY_SAMPLER: return vis(InstQuerySampler(item)); case BRIG_KIND_INST_QUEUE: return vis(InstQueue(item)); case BRIG_KIND_INST_SEG: return vis(InstSeg(item)); case BRIG_KIND_INST_SEG_CVT: return vis(InstSegCvt(item)); case BRIG_KIND_INST_SIGNAL: return vis(InstSignal(item)); case BRIG_KIND_INST_SOURCE_TYPE: return vis(InstSourceType(item)); default: assert(false); break; } return RetType(); }
boost::optional<std::pair<std::shared_ptr<MasterNode>, std::string>> Master::bindClientToDomain(const std::shared_ptr<MasterClient>& client) { using RetType = std::pair<std::shared_ptr<MasterNode>, std::string>; auto room = client->room(); std::vector<Balancer<RetType>::Item> items; { std::lock_guard<std::recursive_mutex> lock(nodeConnectionsMutex); std::lock_guard<std::recursive_mutex> lock2(nodeThrottlesMutex); std::lock_guard<std::recursive_mutex> lock3(versionsMutex); for (const auto& c: nodes) { auto node = c.second; if (!node->isConnected()) continue; // Has room? auto verOrNone = node->findDomainForRoom(room); if (verOrNone) { auto ver = *verOrNone; if (client->doesAcceptVersion(ver)) return RetType(node, ver); } // Get node throttle value auto it = nodeThrottles.find(node->nodeInfo().nodeName); if (it == nodeThrottles.end()) continue; double nodeThrottle = it->second; if (nodeThrottle <= 0.0) continue; // For every domains of the node... for (const auto& domain: node->domainStatuses()) { auto it2 = versions.find(domain.versionName); if (it2 == versions.end()) continue; // Get version throttle value double versionThrottle = it2->second.throttle; if (versionThrottle <= 0.0) continue; // Client accepts the version? if (!client->doesAcceptVersion(it2->first)) continue; // Add as balancer item Balancer<RetType>::Item item; item.key = RetType(node, domain.versionName); item.current = static_cast<double>(domain.numClients); item.desired = nodeThrottle * versionThrottle; items.emplace_back(std::move(item)); } } } // Invoke balancer return Balancer<RetType>().performBalancing(items); }
//获取牌型 BYTE CGameLogic::GetCardType(const BYTE cbCardData[], BYTE cbCardCount,BYTE *bcOutCadData ) { //合法判断 ASSERT(5==cbCardCount); if (5!=cbCardCount) return CT_ERROR; //排序扑克 BYTE cbCardDataSort[CARD_COUNT]; CopyMemory(cbCardDataSort,cbCardData,sizeof(BYTE)*cbCardCount); SortCardList(cbCardDataSort,cbCardCount,ST_NEW); if(bcOutCadData != NULL) { CopyMemory(bcOutCadData,cbCardDataSort,cbCardCount); } int n = 0; BYTE bcMakeMax[5]; memset(bcMakeMax,0,5); int iBigValue = 0; BYTE iSingleA[2]; int iIndex = 0; bcMakeMax[0]= cbCardDataSort[n]; int iGetTenCount = 0; for (int iten = 0;iten<cbCardCount;iten++) { if(GetCardLogicValue(cbCardDataSort[iten])==10||GetCardLogicValue(cbCardDataSort[iten])==11) { iGetTenCount++; } } if( iGetTenCount>=3) { if(GetCardColor(cbCardDataSort[0])==0x04&&GetCardColor(cbCardDataSort[1])==0x04) { if(bcOutCadData != NULL) { bcOutCadData[0] = cbCardDataSort[0]; bcOutCadData[1] = cbCardDataSort[3]; bcOutCadData[2] = cbCardDataSort[4]; bcOutCadData[3] = cbCardDataSort[1]; bcOutCadData[4] = cbCardDataSort[2]; } return CT_SPECIAL_NIUNIUDW; } if(GetCardColor(cbCardDataSort[0])==0x04) { //大小王与最小的组合成牛 if(bcOutCadData != NULL) { bcOutCadData[0] = cbCardDataSort[0]; bcOutCadData[1] = cbCardDataSort[3]; bcOutCadData[2] = cbCardDataSort[4]; bcOutCadData[3] = cbCardDataSort[1]; bcOutCadData[4] = cbCardDataSort[2]; } if(cbCardDataSort[0]==0x42) return CT_SPECIAL_NIUNIUDW; else return CT_SPECIAL_NIUNIUXW; }else { return RetType(GetCardLogicValue(cbCardDataSort[3])+GetCardLogicValue(cbCardDataSort[4])); } } if(iGetTenCount==2||(iGetTenCount==1&&GetCardColor(cbCardDataSort[0])==0x04)) { if(GetCardColor(cbCardDataSort[0])==0x04&&GetCardColor(cbCardDataSort[1])==0x04) { if(bcOutCadData != NULL) { bcOutCadData[0] = cbCardDataSort[0]; bcOutCadData[1] = cbCardDataSort[3]; bcOutCadData[2] = cbCardDataSort[4]; bcOutCadData[3] = cbCardDataSort[1]; bcOutCadData[4] = cbCardDataSort[2]; } return CT_SPECIAL_NIUNIUDW; }else { //如果有一张王 其他任意三张组合为10则是牛牛 if(GetCardColor(cbCardDataSort[0])==0x04) { for ( n=1;n<cbCardCount;n++) { for (int j = 1;j<cbCardCount;j++) { if(j != n) { for (int w = 1;w<cbCardCount;w++) { if(w != n&&w!=j) { //如果剩余的四张中任意三张能组合位10的整数倍 if((GetCardLogicValue(cbCardDataSort[n])+GetCardLogicValue(cbCardDataSort[j])+GetCardLogicValue(cbCardDataSort[w]))%10==0) { int add = 0; for (int y = 1;y<cbCardCount;y++) { if(y != n&&y!=j&&y!=w) { iSingleA[add] =cbCardDataSort[y]; add++; } } if(bcOutCadData != NULL) { bcOutCadData[0] = cbCardDataSort[n]; bcOutCadData[1] = cbCardDataSort[j]; bcOutCadData[2] = cbCardDataSort[w]; bcOutCadData[3] = cbCardDataSort[0]; bcOutCadData[4] = iSingleA[0]; } if(cbCardDataSort[0]==0x42) return CT_SPECIAL_NIUNIUDW; else return CT_SPECIAL_NIUNIUXW; } } } } } } //如果有一张王 其他任意三张组合不为10则 取两张点数最大的组合 BYTE bcTmp[4]; int iBig = 0; int in = 0; for ( in = 1;in<cbCardCount;in++) { for (int j = 1;j<cbCardCount;j++) { if(in != j) { BYTE bclogic = (GetCardLogicValue(cbCardDataSort[in])+GetCardLogicValue(cbCardDataSort[j]))%10; if(bclogic>iBig) { iBig = bclogic; int add = 0; bcTmp[0]=cbCardDataSort[in]; bcTmp[1]=cbCardDataSort[j]; for (int y = 1;y<cbCardCount;y++) { if(y != in&&y!=j) { iSingleA[add] =cbCardDataSort[y]; add++; } } bcTmp[2]=iSingleA[0]; bcTmp[3]=iSingleA[1]; } } } } if(bcOutCadData != NULL) { bcOutCadData[0] = cbCardDataSort[0]; bcOutCadData[1] = bcTmp[2]; bcOutCadData[2] = bcTmp[3]; bcOutCadData[3] = bcTmp[0]; bcOutCadData[4] = bcTmp[1]; } if(iGetTenCount==1&&GetCardColor(cbCardDataSort[0])==0x04) { //下面还能组合 有两张为 10 也可以组合成牛牛 }else { //如果没有则比较 完与最小组合最大点数和组合 return RetType(GetCardLogicValue(bcTmp[0])+GetCardLogicValue(bcTmp[1])); } }else { if((GetCardLogicValue(cbCardDataSort[2])+GetCardLogicValue(cbCardDataSort[3])+GetCardLogicValue(cbCardDataSort[4]))%10==0) { if(bcOutCadData != NULL) { bcOutCadData[0] = cbCardDataSort[2]; bcOutCadData[1] = cbCardDataSort[3]; bcOutCadData[2] = cbCardDataSort[4]; bcOutCadData[3] = cbCardDataSort[0]; bcOutCadData[4] = cbCardDataSort[1]; } return CT_SPECIAL_NIUNIU; }else { for ( n= 2;n<cbCardCount;n++) { for (int j = 2;j<cbCardCount;j++) { if(j != n) { if((GetCardLogicValue(cbCardDataSort[n])+GetCardLogicValue(cbCardDataSort[j]))%10==0) { int add = 0; for (int y = 2;y<cbCardCount;y++) { if(y != n&&y!=j) { iSingleA[add] =cbCardDataSort[y]; add++; } } if(iBigValue<=iSingleA[0]%10) { iBigValue = GetCardLogicValue(iSingleA[0])%10; if(bcOutCadData != NULL) { bcOutCadData[0]= cbCardDataSort[0]; bcOutCadData[1]= cbCardDataSort[n]; bcOutCadData[2]= cbCardDataSort[j]; bcOutCadData[3]= cbCardDataSort[1]; bcOutCadData[4]= iSingleA[0]; } if(iBigValue==0) { return CT_SPECIAL_NIUNIU; } } } } } } if(iBigValue != 0) { return RetType(iBigValue); } } } } iGetTenCount = 1; } //4个组合 if(iGetTenCount==1) { if(GetCardColor(cbCardDataSort[0])==0x04) { for ( n= 1;n<cbCardCount;n++) { for (int j = 1;j<cbCardCount;j++) { if(j != n) { //任意两张组合成牛 if((GetCardLogicValue(cbCardDataSort[n])+GetCardLogicValue(cbCardDataSort[j]))%10==0) { int add = 0; for (int y = 1;y<cbCardCount;y++) { if(y != n&&y!=j) { iSingleA[add] =cbCardDataSort[y]; add++; } } if(bcOutCadData != NULL) { bcOutCadData[0] = cbCardDataSort[0]; bcOutCadData[1] = iSingleA[0]; bcOutCadData[2] = iSingleA[1]; bcOutCadData[3] = cbCardDataSort[n]; bcOutCadData[4] = cbCardDataSort[j]; } if(cbCardDataSort[0]==0x42) return CT_SPECIAL_NIUNIUDW; else return CT_SPECIAL_NIUNIUXW; } } } } //取4张中组合最大的点数 BYTE bcTmp[4]; int iBig = 0; int in = 0; for ( in = 1;in<cbCardCount;in++) { for (int j = 1;j<cbCardCount;j++) { if(in != j) { BYTE bclogic = (GetCardLogicValue(cbCardDataSort[in])+GetCardLogicValue(cbCardDataSort[j]))%10; if(bclogic>iBig) { iBig = bclogic; int add = 0; bcTmp[0]=cbCardDataSort[in]; bcTmp[1]=cbCardDataSort[j]; for (int y = 1;y<cbCardCount;y++) { if(y != in&&y!=j) { iSingleA[add] =cbCardDataSort[y]; add++; } } bcTmp[2]=iSingleA[0]; bcTmp[3]=iSingleA[1]; } } } } if(bcOutCadData != NULL) { bcOutCadData[0] = cbCardDataSort[0]; bcOutCadData[1] = bcTmp[2]; bcOutCadData[2] = bcTmp[3]; bcOutCadData[3] = bcTmp[0]; bcOutCadData[4] = bcTmp[1]; } return RetType(GetCardLogicValue(bcTmp[0])+GetCardLogicValue(bcTmp[1])); } //取4张中任两张组合为10 然后求另外两张的组合看是否是组合中最大 for ( n= 1;n<cbCardCount;n++) { for (int j = 1;j<cbCardCount;j++) { if(j != n) { if((GetCardLogicValue(cbCardDataSort[n])+GetCardLogicValue(cbCardDataSort[j]))%10==0) { int add = 0; for (int y = 1;y<cbCardCount;y++) { if(y != n&&y!=j) { iSingleA[add] =cbCardDataSort[y]; add++; } } if(iBigValue<=(GetCardLogicValue(iSingleA[0])+GetCardLogicValue(iSingleA[1]))%10) { iBigValue = GetCardLogicValue(iSingleA[0])+GetCardLogicValue(iSingleA[1])%10; bcMakeMax[0]= cbCardDataSort[0]; bcMakeMax[1]= cbCardDataSort[j]; bcMakeMax[2]= cbCardDataSort[n]; bcMakeMax[3]= iSingleA[0]; bcMakeMax[4]= iSingleA[1]; if(bcOutCadData != NULL) { CopyMemory(bcOutCadData,bcMakeMax,cbCardCount); } if(iBigValue==0) { return CT_SPECIAL_NIUNIU; } } } } } } if(iBigValue!= 0) { return RetType(iBigValue); }else { //如果组合不成功 iGetTenCount = 0; } } if(iGetTenCount==0) { //5个组合 for ( n= 0;n<cbCardCount;n++) { for (int j = 0;j<cbCardCount;j++) { if(j != n) { for (int w = 0;w<cbCardCount;w++) { if(w != n&&w!=j) { int valueAdd = GetCardLogicValue(cbCardDataSort[n]); valueAdd += GetCardLogicValue(cbCardDataSort[j]); valueAdd += GetCardLogicValue(cbCardDataSort[w]); if(valueAdd%10==0) { int add = 0; for (int y = 0;y<cbCardCount;y++) { if(y != n&&y!=j&&y!=w) { iSingleA[add] =cbCardDataSort[y]; add++; } } if(iBigValue<=(GetCardLogicValue(iSingleA[0])+GetCardLogicValue(iSingleA[1]))%10) { iBigValue = GetCardLogicValue(iSingleA[0])+GetCardLogicValue(iSingleA[1])%10; bcMakeMax[0]= cbCardDataSort[n]; bcMakeMax[1]= cbCardDataSort[j]; bcMakeMax[2]= cbCardDataSort[w]; bcMakeMax[3]= iSingleA[0]; bcMakeMax[4]= iSingleA[1]; if(bcOutCadData != NULL) { CopyMemory(bcOutCadData,bcMakeMax,cbCardCount); } if(iBigValue==0) { return CT_SPECIAL_NIUNIU; } } } } } } } } if(iBigValue!=0) { return RetType(iBigValue); } else { return CT_POINT; } } return CT_POINT; }