Пример #1
0
//	Checks roll for valid dice values.
bool IsRollValid(const Roll& roll)
{
	//	Iterate over the roll, testing the values for validity.
	Roll::const_iterator rollIterator;
	for (rollIterator = roll.begin(); rollIterator != roll.end(); ++rollIterator)
	{
		if (!IsValueValid(*rollIterator))
		{
			return false;
		}
	}

	return true;
}
Пример #2
0
void Searching(CharItem charItems[], CharValue charValues[], int index, ResultCallbackPtr callback) {
	if (index == max_char_count) {
		callback(charItems);
		return;
	}

	for (int i = 0; i < max_number_count; ++i) {
		if (IsValueValid(charItems[index], charValues[i])) {
			charItems[index].value = charValues[i].value;
			charValues[i].used = true;
			Searching(charItems, charValues, index + 1, callback);
			charValues[i].used = false;
		}
	}
}
Пример #3
0
//通过暴力穷举法对每个字符进行匹配后验证 
void SearchingResult(CHAR_ITEM ci[], CHAR_VALUE cv[],
    int index, CharListReadyFuncPtr callback)
{
	int max_char_count = 9; //ci[]的长度 
	int max_number_count = 10; //0-9
	
    if(index == max_char_count) //如果所有字符都已经匹配上数字,进行验证 
    {
        callback(ci); //验证函数 
        return;
    }

    for(int i = 0; i < max_number_count; ++i)
    {
        if(IsValueValid(ci[index], cv[i])) //去掉不需要匹配的情况 
        {
            cv[i].used = true;/*set used sign*/
            ci[index].value = cv[i].value;
            SearchingResult(ci, cv, index + 1, callback);
            cv[i].used = false;/*clear used sign*/
        }
    }
}
Пример #4
0
AJ_Status AJCFG_UpdateConfigurationsHandler(AJ_Message* msg)
{
    AJ_Status status = AJ_OK;
    AJ_Arg array;
    AJ_Arg dict;
    AJ_Message reply;
    char* key;
    char* sig;
    char* value;
    char* language;
    int8_t langIndex = AJSVC_PROPERTY_STORE_ERROR_LANGUAGE_INDEX;
    uint8_t numOfUpdatedItems = 0;
    uint8_t errorReply = FALSE;

    AJ_InfoPrintf(("Handling UpdateConfigurations request\n"));

    status = AJ_UnmarshalArgs(msg, "s", &language);
    if (status != AJ_OK) {
        goto Exit;
    }
    AJ_InfoPrintf(("Lang=%s\n", language));
    errorReply = !AJSVC_IsLanguageSupported(msg, &reply, language, &langIndex);
    if (!errorReply) {
        status = AJ_UnmarshalContainer(msg, &array, AJ_ARG_ARRAY);
        if (status != AJ_OK) {
            goto Exit;
        }
        while (1) {
            status = AJ_UnmarshalContainer(msg, &dict, AJ_ARG_DICT_ENTRY);
            if (status != AJ_OK) {
                break;
            }
            status = AJ_UnmarshalArgs(msg, "s", &key);
            if (status != AJ_OK) {
                break;
            }
            status = AJ_UnmarshalVariant(msg, (const char**)&sig);
            if (status != AJ_OK) {
                break;
            }
            status = AJ_UnmarshalArgs(msg, sig, &value);
            if (status != AJ_OK) {
                break;
            }
            AJ_InfoPrintf(("key=%s value=%s\n", key, value));
            if (IsValueValid(msg, &reply, key, value)) {
                status = AJSVC_PropertyStore_Update(key, langIndex, value);
                if (status == AJ_OK) {
                    numOfUpdatedItems++;
                } else if (status == AJ_ERR_INVALID) {
                    if (!errorReply) {
                        AJ_MarshalErrorMsg(msg, &reply, AJSVC_ERROR_INVALID_VALUE);
                        errorReply = TRUE;
                    }
                } else if (status == AJ_ERR_FAILURE) {
                    if (!errorReply) {
                        AJ_MarshalErrorMsg(msg, &reply, AJSVC_ERROR_UPDATE_NOT_ALLOWED);
                        errorReply = TRUE;
                    }
                }
            } else {
                errorReply = TRUE;
            }
            status = AJ_UnmarshalCloseContainer(msg, &dict);
            if (status != AJ_OK) {
                break;
            }
        }
        if (status != AJ_OK && status != AJ_ERR_NO_MORE) {
            goto Exit;
        }
        status = AJ_UnmarshalCloseContainer(msg, &array);
        if (status != AJ_OK) {
            goto Exit;
        }
    }
    if (!errorReply) {
        status = AJ_MarshalReplyMsg(msg, &reply);
        if (status != AJ_OK) {
            goto Exit;
        }
    }
    status = AJ_DeliverMsg(&reply);
    if (status != AJ_OK) {
        goto Exit;
    }

Exit:

    if (numOfUpdatedItems) {
        if (errorReply) {
            AJSVC_PropertyStore_LoadAll(); // Discard partial successful updates
        } else {
            AJSVC_PropertyStore_SaveAll();
            AJ_AboutSetShouldAnnounce();
        }
    }

    return status;
}