PrimitiveValue AssignmentExpression::eval (EvaluationContext * evaluationContext) const { shared_ptr<Variable> var = boost::dynamic_pointer_cast<Variable>(mVariable); if (!var) return errorValue (error::Eval_BadType, "Variable expected on left side"); PrimitiveValue right = mArgument->eval(evaluationContext); if (right.error()) return right; evaluationContext->setVariable (var->id(), right); return right; }
virtual void onEnum( Token& fieldToken, const char *buffer, std::vector<Token>& tokens, std::size_t fromIndex, std::size_t toIndex, std::uint64_t actingVersion) { const Token& typeToken = tokens.at(fromIndex + 1); const Encoding& encoding = typeToken.encoding(); printScope(); std::cout << fieldToken.name() << "="; for (size_t i = fromIndex + 1; i < toIndex; i++) { const Token &token = tokens.at(i); const PrimitiveValue constValue = token.encoding().constValue(); if (typeToken.isConstantEncoding()) { std::cout << token.name(); break; } if (encoding.primitiveType() == PrimitiveType::CHAR) { if (encoding.getAsInt(buffer) == constValue.getAsInt()) { std::cout << token.name(); break; } } else if (encoding.primitiveType() == PrimitiveType::UINT8) { if (encoding.getAsUInt(buffer) == constValue.getAsUInt()) { std::cout << token.name(); break; } } } std::cout << "\n"; }
void onEnum( Token& fieldToken, const char *buffer, std::vector<Token>& tokens, std::size_t fromIndex, std::size_t toIndex, std::uint64_t actingVersion) { cout << m_eventNumber << ": Enum " << fieldToken.name() << "\n"; const Token& typeToken = tokens.at(fromIndex + 1); const Encoding& encoding = typeToken.encoding(); switch (EventNumber(m_eventNumber)) { case EN_available: { EXPECT_EQ(fieldToken.fieldId(), fieldIdAvailable); EXPECT_EQ(encoding.primitiveType(), PrimitiveType::UINT8); const std::uint64_t value = encoding.getAsUInt(buffer); EXPECT_EQ(value, static_cast<std::uint64_t>(1)); bool found = false; for (size_t i = fromIndex + 1; i < toIndex; i++) { const Token& token = tokens.at(i); const std::uint64_t constValue = token.encoding().constValue().getAsUInt(); cout << " " << token.name() << " = " << constValue << "\n"; if (constValue == value) { EXPECT_EQ(token.name(), std::string("T")); found = true; } } EXPECT_TRUE(found); break; } case EN_code: { EXPECT_EQ(fieldToken.fieldId(), fieldIdCode); EXPECT_EQ(encoding.primitiveType(), PrimitiveType::CHAR); const std::int64_t value = encoding.getAsInt(buffer); EXPECT_EQ(value, static_cast<std::int64_t>('A')); bool found = false; for (size_t i = fromIndex + 1; i < toIndex; i++) { const Token& token = tokens.at(i); const std::int64_t constValue = token.encoding().constValue().getAsUInt(); cout << " " << token.name() << " = " << constValue << "\n"; if (constValue == value) { EXPECT_EQ(token.name(), std::string("A")); found = true; } } EXPECT_TRUE(found); break; } case EN_discountedModel: { EXPECT_EQ(fieldToken.fieldId(), fieldIdDiscountedModel); EXPECT_EQ(encoding.primitiveType(), PrimitiveType::CHAR); EXPECT_EQ(encoding.presence(), Presence::SBE_CONSTANT); EXPECT_TRUE(typeToken.isConstantEncoding()); EXPECT_EQ(typeToken.encodedLength(), 0); const PrimitiveValue value = encoding.constValue(); EXPECT_EQ(value.getAsInt(), static_cast<std::int64_t>('C')); bool found = false; for (size_t i = fromIndex + 1; i < toIndex; i++) { const Token& token = tokens.at(i); const std::int64_t constValue = token.encoding().constValue().getAsInt(); cout << " " << token.name() << " = " << constValue << "\n"; if (constValue == value.getAsInt()) { EXPECT_EQ(token.name(), std::string("C")); found = true; } } EXPECT_TRUE(found); break; } default: FAIL() << "unknown Enum event number " << m_eventNumber; } m_eventNumber++; }