void ParseWordRecognizedArray(std::vector<WordConfidencePair>& results, const AL::ALValue& value, float recognitionThreshold) { // unexpected data if (value.getType() != AL::ALValue::TypeArray) MODULE_ERROR("invalid array type"); // unexpected data if (value.getSize() % 2 != 0) MODULE_ERROR("invalid array size"); for (int i = 0; i < (int)value.getSize(); i += 2) { AL::ALValue wordValue = value[i]; AL::ALValue confidenceValue = value[i + 1]; float confidence = confidenceValue.operator float &(); if (confidence >= recognitionThreshold) { WordConfidencePair pair = { wordValue.toString(), confidence }; results.push_back(pair); } } std::sort(results.begin(), results.end(), WordConfidencePairComparison()); }
gmVariable GMALProxy::CallReturnVariable(const char* function, gmVariable arg) { const std::string function_string = std::string(function); AL::ALValue result = AL::ALValue(); switch (arg.m_type) { case GM_INT: result = _proxy.call<AL::ALValue>(function_string, arg.GetInt()); break; case GM_FLOAT: result = _proxy.call<AL::ALValue>(function_string, arg.GetFloat()); break; case GM_VEC2: result = _proxy.call<AL::ALValue>(function_string, arg.GetVec2().x, arg.GetVec2().y); break; case GM_STRING: result = _proxy.call<AL::ALValue>(function_string, std::string(arg.GetCStringSafe())); break; default: result = _proxy.call<AL::ALValue>(function_string); break; } gmVariable result_variable; result_variable.Nullify(); switch (result.getType()) { case AL::ALValue::TypeBool: result_variable = gmVariable(int(result.operator bool &() ? 1 : 0)); break; case AL::ALValue::TypeInt: result_variable = gmVariable(int(result.operator int &())); break; case AL::ALValue::TypeFloat: result_variable = gmVariable(float(result.operator float &())); break; case AL::ALValue::TypeString: result_variable = gmVariable(VirtualMachine::Get()->GetVM().AllocStringObject(result.toString().c_str())); break; default: break; } return result_variable; }