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));
}
Ejemplo n.º 2
0
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();
}
Ejemplo n.º 3
0
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(); 
}
Ejemplo n.º 4
0
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();
}
Ejemplo n.º 5
0
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();
}
Ejemplo n.º 6
0
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();
}
Ejemplo n.º 7
0
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();
}
Ejemplo n.º 8
0
	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);
	}
Ejemplo n.º 9
0
//获取牌型
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;
}