upd: support string compare with other type

This commit is contained in:
2023-11-10 11:03:53 +08:00
parent fd284edbe1
commit d5b99b0c4e

View File

@ -380,6 +380,8 @@ bool Greater(std::any a, std::any b) {
return (*ptr_a_float) > (*ptr_b_float); return (*ptr_a_float) > (*ptr_b_float);
else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr)) else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr))
return (*ptr_a_string) > (*ptr_b_string); return (*ptr_a_string) > (*ptr_b_string);
else if (((ptr_a_string != nullptr) || (ptr_b_string != nullptr)))
return Any2String(a) > Any2String(b);
else else
throw FatalError("Greater: Type Error", 54); throw FatalError("Greater: Type Error", 54);
} }
@ -401,6 +403,8 @@ bool Less(std::any a, std::any b) {
return (*ptr_a_float) < (*ptr_b_float); return (*ptr_a_float) < (*ptr_b_float);
else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr)) else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr))
return (*ptr_a_string) < (*ptr_b_string); return (*ptr_a_string) < (*ptr_b_string);
else if (((ptr_a_string != nullptr) || (ptr_b_string != nullptr)))
return Any2String(a) < Any2String(b);
else else
throw FatalError("Less: Type Error", 55); throw FatalError("Less: Type Error", 55);
} }
@ -422,6 +426,8 @@ bool Equal(std::any a, std::any b) {
return (*ptr_a_float) == (*ptr_b_float); return (*ptr_a_float) == (*ptr_b_float);
else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr)) else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr))
return (*ptr_a_string) == (*ptr_b_string); return (*ptr_a_string) == (*ptr_b_string);
else if (((ptr_a_string != nullptr) || (ptr_b_string != nullptr)))
return Any2String(a) == Any2String(b);
else else
throw FatalError("Equal: Type Error", 56); throw FatalError("Equal: Type Error", 56);
} }
@ -443,6 +449,8 @@ bool NotEqual(std::any a, std::any b) {
return (*ptr_a_float) != (*ptr_b_float); return (*ptr_a_float) != (*ptr_b_float);
else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr)) else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr))
return (*ptr_a_string) != (*ptr_b_string); return (*ptr_a_string) != (*ptr_b_string);
else if (((ptr_a_string != nullptr) || (ptr_b_string != nullptr)))
return Any2String(a) != Any2String(b);
else else
throw FatalError("NotEqual: Type Error", 57); throw FatalError("NotEqual: Type Error", 57);
} }
@ -464,6 +472,8 @@ bool GreaterEqual(std::any a, std::any b) {
return (*ptr_a_float) >= (*ptr_b_float); return (*ptr_a_float) >= (*ptr_b_float);
else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr)) else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr))
return (*ptr_a_string) >= (*ptr_b_string); return (*ptr_a_string) >= (*ptr_b_string);
else if (((ptr_a_string != nullptr) || (ptr_b_string != nullptr)))
return Any2String(a) >= Any2String(b);
else else
throw FatalError("GreaterEqual: Type Error", 58); throw FatalError("GreaterEqual: Type Error", 58);
} }
@ -485,6 +495,8 @@ bool LessEqual(std::any a, std::any b) {
return (*ptr_a_float) <= (*ptr_b_float); return (*ptr_a_float) <= (*ptr_b_float);
else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr)) else if ((ptr_a_string != nullptr) && (ptr_b_string != nullptr))
return (*ptr_a_string) <= (*ptr_b_string); return (*ptr_a_string) <= (*ptr_b_string);
else if (((ptr_a_string != nullptr) || (ptr_b_string != nullptr)))
return Any2String(a) <= Any2String(b);
else else
throw FatalError("LessEqual: Type Error", 59); throw FatalError("LessEqual: Type Error", 59);
} }