Beispiel #1
0
Value Iterator::Prod(Environment &env)
{
	Signal &sig = env.GetSignal();
	Value value;
	if (!Next(env, value)) return Value::Nil;
	if (!value.Is_number()) {
		const Operator *pOperatorMul = env.GetOperator(OPTYPE_Mul);
		Value valResult(value);
		while (Next(env, value)) {
			valResult = pOperatorMul->EvalBinary(env, valResult, value, FLAG_None);
			if (sig.IsSignalled()) return Value::Nil;
		}
		return valResult;
	}
	Number result = value.GetNumber();
	while (Next(env, value)) {
		if (value.Is_number()) {
			if (result == 0) break;
			result *= value.GetNumber();
		} else {
			const Operator *pOperatorMul = env.GetOperator(OPTYPE_Mul);
			Value valResult(result);
			do {
				valResult = pOperatorMul->EvalBinary(env, valResult, value, FLAG_None);
				if (sig.IsSignalled()) return Value::Nil;
			} while (Next(env, value));
			return valResult;
		}
	}
	return Value(result);
}
Beispiel #2
0
TEST(Protocol, McResultSerialize) {
    {
        McResult codeResult(R_DELETED);
        std::string result;
        StringWBuffer buffer(3, &result);
        codeResult.Serialize(&buffer);
        buffer.Flush();
        ASSERT_EQ(result, "DELETED\r\n");
    }

    {
        McResult errResult("Length of key is too long");
        std::string result;
        StringWBuffer buffer(3, &result);
        errResult.Serialize(&buffer);
        buffer.Flush();
        ASSERT_EQ(result, "ERROR Length of key is too long\r\n");
    }

    {
        McValue value1("user_123", 1445128601, std::vector<char>({'1', '2', '3', '4', '5', 'a'}));
        McValue value2("user_876", 1446128601, std::vector<char>({'6', '7', '8', '9', '0', 'z'}));

        McResult valResult(std::vector<McValue>({value1, value2}));
        std::string result;
        StringWBuffer buffer(3, &result);
        valResult.Serialize(&buffer);
        buffer.Flush();

        ASSERT_EQ(result, "user_123 1445128601 6\r\n12345a\r\nuser_876 1446128601 6\r\n67890z\r\nEND\r\n");
    }
}
Beispiel #3
0
Value Iterator::Sum(Environment &env, size_t &cnt)
{
	Signal &sig = env.GetSignal();
	cnt = 0;
	Value value;
	if (!Next(env, value)) return Value::Nil;
	if (!value.Is_number()) {
		const Operator *pOperatorAdd = env.GetOperator(OPTYPE_Add);
		Value valResult(value);
		cnt = 1;
		while (Next(env, value)) {
			valResult = pOperatorAdd->EvalBinary(env, valResult, value, FLAG_None);
			cnt++;
			if (sig.IsSignalled()) return Value::Nil;
		}
		return valResult;
	}
	Number result = value.GetNumber();
	cnt = 1;
	while (Next(env, value)) {
		if (value.Is_number()) {
			result += value.GetNumber();
			cnt++;
		} else {
			const Operator *pOperatorAdd = env.GetOperator(OPTYPE_Add);
			Value valResult(result);
			do {
				valResult = pOperatorAdd->EvalBinary(env, valResult, value, FLAG_None);
				cnt++;
				if (sig.IsSignalled()) return Value::Nil;
			} while (Next(env, value));
			return valResult;
		}
	}
	return Value(result);
}