Пример #1
0
CValue* CFloatValue::Calc(VALUE_OPERATOR op, CValue *val)
/*
pre:
ret: a new object containing the result of applying operator op to this
	 object and val
*/
{
	//return val->CalcFloat(op, this);
	switch (op)
	{
	case VALUE_POS_OPERATOR:
		return new CFloatValue (m_float);
		break;
	case VALUE_NEG_OPERATOR:
		return new CFloatValue (-m_float);
		break;
	case VALUE_NOT_OPERATOR:
		return new CErrorValue (op2str(op) + "only allowed on booleans");
		break;
	case VALUE_AND_OPERATOR:
	case VALUE_OR_OPERATOR:
		return new CErrorValue(val->GetText() + op2str(op) + "only allowed on booleans");
		break;
	default:
		return val->CalcFinal(VALUE_FLOAT_TYPE, op, this);
		break;
	}
}
Пример #2
0
CValue* CBoolValue::Calc(VALUE_OPERATOR op, CValue *val)
/*
pre:
ret: a new object containing the result of applying operator op to this
object and val
*/
{
	switch (op)
	{
	case VALUE_POS_OPERATOR:
	case VALUE_NEG_OPERATOR:
		{
			return new CErrorValue (op2str(op) + GetText());
			break;
		}
	case VALUE_NOT_OPERATOR:
		{
			return new CBoolValue (!m_bool);
			break;
		}
	default:
		{
			return val->CalcFinal(VALUE_BOOL_TYPE, op, this);
			break;
		}
	}
}
static int avctp_passthrough_press(struct avctp *session, uint8_t op,
					uint8_t *params, size_t params_len)
{
	uint8_t operands[7];
	size_t len;

	DBG("op 0x%02x %s params_len %zd", op, op2str(op), params_len);

	/* Button pressed */
	operands[0] = op & 0x7f;

	if (op == AVC_VENDOR_UNIQUE && params &&
				params_len == 5) {
		memcpy(&operands[2], params, params_len);
		len = params_len + 2;
		operands[1] = params_len;
	} else {
		len = 2;
		operands[1] = 0;
	}

	return avctp_send_req(session, AVC_CTYPE_CONTROL,
				AVC_SUBUNIT_PANEL, AVC_OP_PASSTHROUGH,
				operands, len,
				avctp_passthrough_rsp, NULL);
}
Пример #4
0
CValue* CErrorValue::Calc(VALUE_OPERATOR op, CValue *val)
/*
pre:
ret: a new object containing the result of applying operator op to this
	 object and val
*/
{
	CValue* errorval;

	switch (op)
	{
	case VALUE_POS_OPERATOR:
	case VALUE_NEG_OPERATOR:
	case VALUE_NOT_OPERATOR:
		{
			errorval = new CErrorValue (op2str(op) + GetText());
			break;
		}
	default:
		{
			errorval = val->CalcFinal(VALUE_ERROR_TYPE, op, this);
			break;
		}
	}
	
	return errorval;
}
Пример #5
0
CValue* CErrorValue::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val)
/*
pre: the type of val is dtype
ret: a new object containing the result of applying operator op to val and
	 this object
*/
{
	return new CErrorValue (val->GetText() + op2str(op) + GetText());
}
Пример #6
0
/**
 * pre: the type of val is dtype
 * ret: a new object containing the result of applying operator op to val and
 * this object
 */
CValue* CStringValue::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val)
{
	CValue *ret;
	
	if (op == VALUE_ADD_OPERATOR) {
		if (dtype == VALUE_ERROR_TYPE)
			ret = new CErrorValue(val->GetText() + op2str(op) +	GetText());
		else
			ret = new CStringValue(val->GetText() + GetText(),"");
	}
	else {
		if (dtype == VALUE_STRING_TYPE || dtype == VALUE_EMPTY_TYPE) {
			switch (op) {
				case VALUE_EQL_OPERATOR:
					ret = new CBoolValue(val->GetText() == GetText());
					break;
				case VALUE_NEQ_OPERATOR:
					ret = new CBoolValue(val->GetText() != GetText());
					break;
				case VALUE_GRE_OPERATOR:
					ret = new CBoolValue(val->GetText() > GetText());
					break;
				case VALUE_LES_OPERATOR:
					ret = new CBoolValue(val->GetText() < GetText());
					break;
				case VALUE_GEQ_OPERATOR:
					ret = new CBoolValue(val->GetText() >= GetText());
					break;
				case VALUE_LEQ_OPERATOR:
					ret = new CBoolValue(val->GetText() <= GetText());
					break;
				default:
					ret =  new CErrorValue(val->GetText() + op2str(op) + "[operator not allowed on strings]");
					break;
			}
		}
		else {
			ret =  new CErrorValue(val->GetText() + op2str(op) + "[operator not allowed on strings]");
		}
	}
	return ret;
}
Пример #7
0
static int avctp_passthrough_release(struct avctp *session, uint8_t op)
{
	uint8_t operands[2];

	DBG("%s", op2str(op));

	/* Button released */
	operands[0] = op | 0x80;
	operands[1] = 0;

	return avctp_send_req(session, AVC_CTYPE_CONTROL,
				AVC_SUBUNIT_PANEL, AVC_OP_PASSTHROUGH,
				operands, sizeof(operands),
				NULL, NULL);
}
Пример #8
0
static void avrcp_passthrough_dump(int level, struct frame *frm)
{
	uint8_t op, len;

	p_indent(level, frm);

	op = get_u8(frm);
	printf("Operation: 0x%02x (%s %s)\n", op, op2str(op),
					op & 0x80 ? "Released" : "Pressed");

	p_indent(level, frm);

	len = get_u8(frm);

	printf("Lenght: 0x%02x\n", len);

	raw_dump(level, frm);
}
Пример #9
0
static void try_get_value(int *num, VCOS_EVENT_FLAGS_T *event, uint32_t start, uint32_t bitmask,
                          VCOS_OPTION operation, VCOS_STATUS_T expected, int after, int *passed)
{
   VCOS_STATUS_T rc;
   uint32_t set = 0;
   vcos_event_flags_get(event, -1, VCOS_OR_CONSUME, 0, &set);
   vcos_event_flags_set(event, start, VCOS_OR);

   VCOS_TRACE("%s: mask %x op %s", __FUNCTION__, bitmask, op2str(operation));
   if((rc=vcos_event_flags_get(event, bitmask, operation, 0, &set)) != expected)
   {
      *passed = 0;
   }

   if(expected == VCOS_SUCCESS && set != start)
   {
      *passed = 0;
   }

   check_value(event, after, 1, passed);
}
Пример #10
0
void
TreePrinter::visit(BINOP *binop)
{
	FUNCLOG;
	BGN;
	result += tab;
	result += "BINOP(\n";
	result += tab + "  ";
	result += op2str(binop->op);
	result += "\n";
	result += tab;
	result += ",\n";
	assert(binop->l);
	binop->l->accept(this);
	result += tab;
	result += ",\n";
	assert(binop->r);
	binop->r->accept(this);
	result += tab;
	result += ")\n";
	END;
}
static int avctp_passthrough_release(struct avctp *session, uint8_t op,
					uint8_t *params, size_t params_len)
{
	uint8_t operands[7];
	size_t len;

	DBG("%s", op2str(op));

	/* Button released */
	operands[0] = op | 0x80;
	operands[1] = 0;

	if (op == AVC_VENDOR_UNIQUE && params &&
				params_len > sizeof(operands) - 2) {
		memcpy(&operands[2], params, params_len);
		len = params_len;
	} else
		len = 2;

	return avctp_send_req(session, AVC_CTYPE_CONTROL,
				AVC_SUBUNIT_PANEL, AVC_OP_PASSTHROUGH,
				operands, len,
				NULL, NULL);
}
Пример #12
0
/*
 * pre: the type of val is dtype
 * ret: a new object containing the result of applying operator op to val and
 * this object
 */
CValue* CIntValue::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val)
{
	CValue *ret;

	switch (dtype) {
		case VALUE_EMPTY_TYPE:
		case VALUE_INT_TYPE:
		{
			switch (op) {
				case VALUE_MOD_OPERATOR:
					ret = new CIntValue (((CIntValue *) val)->GetInt() % m_int);
					break;
				case VALUE_ADD_OPERATOR:
					ret = new CIntValue (((CIntValue *) val)->GetInt() + m_int);
					break;
				case VALUE_SUB_OPERATOR:
					ret = new CIntValue (((CIntValue *) val)->GetInt() - m_int);
					break;
				case VALUE_MUL_OPERATOR:
					ret = new CIntValue (((CIntValue *) val)->GetInt() * m_int);
					break;
				case VALUE_DIV_OPERATOR:
					if (m_int == 0) {
						if (val->GetNumber() == 0) {
							ret = new CErrorValue("Not a Number");
						}
						else {
							ret = new CErrorValue("Division by zero");
						}
					}
					else
						ret = new CIntValue (((CIntValue *) val)->GetInt() / m_int);
					break;
				case VALUE_EQL_OPERATOR:
					ret = new CBoolValue(((CIntValue *) val)->GetInt() == m_int);
					break;
				case VALUE_NEQ_OPERATOR:
					ret = new CBoolValue(((CIntValue *) val)->GetInt() != m_int);
					break;
				case VALUE_GRE_OPERATOR:
					ret = new CBoolValue(((CIntValue *) val)->GetInt() > m_int);
					break;
				case VALUE_LES_OPERATOR:
					ret = new CBoolValue(((CIntValue *) val)->GetInt() < m_int);
					break;
				case VALUE_GEQ_OPERATOR:
					ret = new CBoolValue(((CIntValue *) val)->GetInt() >= m_int);
					break;
				case VALUE_LEQ_OPERATOR:
					ret = new CBoolValue(((CIntValue *) val)->GetInt() <= m_int);
					break;
				case VALUE_NEG_OPERATOR:
					ret = new CIntValue (-m_int);
					break;
				case VALUE_POS_OPERATOR:
					ret = new CIntValue (m_int);
					break;
				case VALUE_NOT_OPERATOR:
					ret = new CBoolValue(m_int == 0);
					break;
				default:
					printf("Found op: %d\n", op);
					ret = new CErrorValue("illegal operator. please send a bug report.");
					break;
			}
			break;
		}
		case VALUE_FLOAT_TYPE:
		{
			switch (op) {
				case VALUE_MOD_OPERATOR:
					ret = new CFloatValue(fmod(((CFloatValue *) val)->GetFloat(), m_int));
					break;
				case VALUE_ADD_OPERATOR:
					ret = new CFloatValue (((CFloatValue *) val)->GetFloat() + m_int);
					break;
				case VALUE_SUB_OPERATOR:
					ret = new CFloatValue (((CFloatValue *) val)->GetFloat() - m_int);
					break;
				case VALUE_MUL_OPERATOR:
					ret = new CFloatValue (((CFloatValue *) val)->GetFloat() * m_int);
					break;
				case VALUE_DIV_OPERATOR:
					if (m_int == 0)
						ret = new CErrorValue("Division by zero");
					else
						ret = new CFloatValue (((CFloatValue *) val)->GetFloat() / m_int);
					break;
				case VALUE_EQL_OPERATOR:
					ret = new CBoolValue(((CFloatValue *) val)->GetFloat() == m_int);
					break;
				case VALUE_NEQ_OPERATOR:
					ret = new CBoolValue(((CFloatValue *) val)->GetFloat() != m_int);
					break;
				case VALUE_GRE_OPERATOR:
					ret = new CBoolValue(((CFloatValue *) val)->GetFloat() > m_int);
					break;
				case VALUE_LES_OPERATOR:
					ret = new CBoolValue(((CFloatValue *) val)->GetFloat() < m_int);
					break;
				case VALUE_GEQ_OPERATOR:
					ret = new CBoolValue(((CFloatValue *) val)->GetFloat() >= m_int);
					break;
				case VALUE_LEQ_OPERATOR:
					ret = new CBoolValue(((CFloatValue *) val)->GetFloat() <= m_int);
					break;
				case VALUE_NOT_OPERATOR:
					ret = new CBoolValue(m_int == 0);
					break;
				default:
					ret = new CErrorValue("illegal operator. please send a bug report.");
					break;
			}
			break;
		}
		case VALUE_STRING_TYPE:
		{
			switch (op) {
				case VALUE_ADD_OPERATOR:
					ret = new CStringValue(val->GetText() + GetText(),"");
					break;
				case VALUE_EQL_OPERATOR:
				case VALUE_NEQ_OPERATOR:
				case VALUE_GRE_OPERATOR:
				case VALUE_LES_OPERATOR:
				case VALUE_GEQ_OPERATOR:
				case VALUE_LEQ_OPERATOR:
					ret = new CErrorValue("[Cannot compare string with integer]" + op2str(op) + GetText());
					break;
				default:
					ret =  new CErrorValue("[operator not allowed on strings]" + op2str(op) + GetText());
					break;
			}
			break;
		}
		case VALUE_BOOL_TYPE:
			ret =  new CErrorValue("[operator not valid on boolean and integer]" + op2str(op) + GetText());
			break;
#if 0
		case VALUE_EMPTY_TYPE:
		{
			switch (op) {
				case VALUE_ADD_OPERATOR:
					ret = new CIntValue (m_int);
					break;
				case VALUE_SUB_OPERATOR:
					ret = new CIntValue (-m_int);
					break;
				default:
				{
					ret = new CErrorValue(op2str(op) +	GetText());
				}
			}
			break;
		}
#endif
	case VALUE_ERROR_TYPE:
		ret = new CErrorValue(val->GetText() + op2str(op) +	GetText());
		break;
	default:
		ret = new CErrorValue("illegal type. contact your dealer (if any)");
		break;
	}
	return ret;
}
Пример #13
0
CValue* CBoolValue::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val)
/*
pre: the type of val is dtype
ret: a new object containing the result of applying operator op to val and
this object
*/
{
	CValue *ret;
	
	switch (dtype) {
		case VALUE_EMPTY_TYPE:
		case VALUE_BOOL_TYPE:
		{
			switch (op) {
				case VALUE_AND_OPERATOR:
				{
					ret = new CBoolValue (((CBoolValue *) val)->GetBool() && m_bool);
					break;
				}
				case VALUE_OR_OPERATOR:
				{
					ret = new CBoolValue (((CBoolValue *) val)->GetBool() || m_bool);
					break;
				}
				case VALUE_EQL_OPERATOR:
				{
					ret = new CBoolValue (((CBoolValue *) val)->GetBool() == m_bool);
					break;
				}
				case VALUE_NEQ_OPERATOR:
				{
					ret = new CBoolValue (((CBoolValue *) val)->GetBool() != m_bool);
					break;
				}
				case VALUE_NOT_OPERATOR:
				{
					return new CBoolValue (!m_bool);
					break;
				}
				default:
				{
					ret =  new CErrorValue(val->GetText() + op2str(op) +
					                       "[operator not allowed on booleans]");
					break;
				}
			}
			break;
		}
		case VALUE_STRING_TYPE:
		{
			switch (op) {
				case VALUE_ADD_OPERATOR:
				{
					ret = new CStringValue(val->GetText() + GetText(),"");
					break;
				}
				default:
				{
					ret =  new CErrorValue(val->GetText() + op2str(op) + "[Only + allowed on boolean and string]");
					break;
				}
			}
			break;
		}
		default:
			ret =  new CErrorValue("[type mismatch]" + op2str(op) + GetText());
	}

	return ret;
}
Пример #14
0
CValue* CFloatValue::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val)
/*
pre: the type of val is dtype
ret: a new object containing the result of applying operator op to val and
	 this object
*/
{
	CValue *ret;
	
	switch(dtype)
	{
	case VALUE_INT_TYPE:
		{
			switch (op)
			{
			case VALUE_MOD_OPERATOR:
				ret = new CFloatValue(fmod(((CIntValue *) val)->GetInt(), m_float));
				break;
			case VALUE_ADD_OPERATOR:
				ret = new CFloatValue(((CIntValue *) val)->GetInt() + m_float);
				break;
			case VALUE_SUB_OPERATOR:
				ret = new CFloatValue(((CIntValue *) val)->GetInt() - m_float);
				break;
			case VALUE_MUL_OPERATOR:
				ret = new CFloatValue(((CIntValue *) val)->GetInt() * m_float);
				break;
			case VALUE_DIV_OPERATOR:
				if (m_float == 0)
					ret = new CErrorValue("Division by zero");
				else
					ret = new CFloatValue (((CIntValue *) val)->GetInt() / m_float);
				break;
			case VALUE_EQL_OPERATOR:
				ret = new CBoolValue(((CIntValue *) val)->GetInt() == m_float);
				break;
			case VALUE_NEQ_OPERATOR:
				ret = new CBoolValue(((CIntValue *) val)->GetInt() != m_float);
				break;
			case VALUE_GRE_OPERATOR:
				ret = new CBoolValue(((CIntValue *) val)->GetInt() > m_float);
				break;
			case VALUE_LES_OPERATOR:
				ret = new CBoolValue(((CIntValue *) val)->GetInt() < m_float);
				break;
			case VALUE_GEQ_OPERATOR:
				ret = new CBoolValue(((CIntValue *) val)->GetInt() >= m_float);
				break;
			case VALUE_LEQ_OPERATOR:
				ret = new CBoolValue(((CIntValue *) val)->GetInt() <= m_float);
				break;
			default:
				ret = new CErrorValue("illegal operator. please send a bug report.");
				break;
			}
			break;
		}
	case VALUE_EMPTY_TYPE:
	case VALUE_FLOAT_TYPE:
		{
			switch (op)
			{
			case VALUE_MOD_OPERATOR:
				ret = new CFloatValue(fmod(((CFloatValue *) val)->GetFloat(), m_float));
				break;
			case VALUE_ADD_OPERATOR:
				ret = new CFloatValue(((CFloatValue *) val)->GetFloat() + m_float);
				break;
			case VALUE_SUB_OPERATOR:
				ret = new CFloatValue(((CFloatValue *) val)->GetFloat() - m_float);
				break;
			case VALUE_MUL_OPERATOR:
				ret = new CFloatValue(((CFloatValue *) val)->GetFloat() * m_float);
				break;
			case VALUE_DIV_OPERATOR:
				if (m_float == 0)
					ret = new CErrorValue("Division by zero");
				else
					ret = new CFloatValue (((CFloatValue *) val)->GetFloat() / m_float);
				break;
			case VALUE_EQL_OPERATOR:
				ret = new CBoolValue(((CFloatValue *) val)->GetFloat() == m_float);
				break;
			case VALUE_NEQ_OPERATOR:
				ret = new CBoolValue(((CFloatValue *) val)->GetFloat() != m_float);
				break;
			case VALUE_GRE_OPERATOR:
				ret = new CBoolValue(((CFloatValue *) val)->GetFloat() > m_float);
				break;
			case VALUE_LES_OPERATOR:
				ret = new CBoolValue(((CFloatValue *) val)->GetFloat() < m_float);
				break;
			case VALUE_GEQ_OPERATOR:
				ret = new CBoolValue(((CFloatValue *) val)->GetFloat() >= m_float);
				break;
			case VALUE_LEQ_OPERATOR:
				ret = new CBoolValue(((CFloatValue *) val)->GetFloat() <= m_float);
				break;
			case VALUE_NEG_OPERATOR:
				ret = new CFloatValue (-m_float);
				break;
			case VALUE_POS_OPERATOR:
				ret = new CFloatValue (m_float);
				break;
				
			default:
				ret = new CErrorValue("illegal operator. please send a bug report.");
				break;
			}
			break;
		}
	case VALUE_STRING_TYPE:
		{
			switch(op)
			{
			case VALUE_ADD_OPERATOR:
				ret = new CStringValue(val->GetText() + GetText(),"");
				break;
			case VALUE_EQL_OPERATOR:
			case VALUE_NEQ_OPERATOR:
			case VALUE_GRE_OPERATOR:
			case VALUE_LES_OPERATOR:
			case VALUE_GEQ_OPERATOR:
			case VALUE_LEQ_OPERATOR:
				ret = new CErrorValue("[Cannot compare string with float]" + op2str(op) + GetText());
				break;
			default:
				ret =  new CErrorValue("[operator not allowed on strings]" + op2str(op) + GetText());
				break;
			}
			break;
		}
	case VALUE_BOOL_TYPE:
		ret =  new CErrorValue("[operator not valid on boolean and float]" + op2str(op) + GetText());
		break;
	case VALUE_ERROR_TYPE:
		ret = new CErrorValue(val->GetText() + op2str(op) + GetText());
		break;
	default:
		ret = new CErrorValue("illegal type. contact your dealer (if any)");
		break;
	}
	return ret;
}
Пример #15
0
CValue* CVectorValue::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val)
/*
pre: the type of val is dtype
ret: a new object containing the result of applying operator op to val and
this object
*/
{
	CValue *ret = NULL;
	
	switch(op)
	{ 
	case VALUE_ADD_OPERATOR: 
		{
			switch (dtype)
			{
			case VALUE_EMPTY_TYPE:
			case VALUE_VECTOR_TYPE: 
				{
					ret = new CVectorValue(
						val->GetVector3()[KX_X] + GetVector3()[KX_X],
						val->GetVector3()[KX_Y] + GetVector3()[KX_Y],
						val->GetVector3()[KX_Z] + GetVector3()[KX_Z],
						CValue::HEAPVALUE);
					ret->SetName(GetName());
					break;
				}
			
			default: 
				ret = new CErrorValue(val->GetText() + op2str(op) +	GetText());
			}
			break;
		}
	case VALUE_MUL_OPERATOR:
		{
			switch (dtype)
			{
				
			case VALUE_EMPTY_TYPE:
			case VALUE_VECTOR_TYPE: 
				{
					//MT_Vector3 supports 'scaling' by another vector, instead of using general transform, Gino?
					//ret = new CVectorValue(val->GetVector3().Scaled(GetVector3()),GetName());
					break;
				}
			case VALUE_FLOAT_TYPE: 
				{
					ret = new CVectorValue(
						val->GetVector3()[KX_X] * GetVector3()[KX_X],
						val->GetVector3()[KX_Y] * GetVector3()[KX_Y],
						val->GetVector3()[KX_Z] * GetVector3()[KX_Z],
						CValue::HEAPVALUE);
					ret->SetName(GetName());
					break;
				}
			
			default: 
				ret = new CErrorValue(val->GetText() + op2str(op) +	GetText());
			}
			break;

		}
	
	default:
		ret = new CErrorValue(val->GetText() + op2str(op) +	GetText());
	}

	
	return ret;
}