|
@@ -1213,22 +1213,44 @@ public:
|
|
|
|
|
|
////
|
|
////
|
|
|
|
|
|
|
|
+template <class Left>
|
|
class OperatorEvaluatorInStringFind {
|
|
class OperatorEvaluatorInStringFind {
|
|
public:
|
|
public:
|
|
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
|
static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
|
- const String &str_a = *VariantGetInternalPtr<String>::get_ptr(&p_left);
|
|
|
|
|
|
+ const Left &str_a = *VariantGetInternalPtr<Left>::get_ptr(&p_left);
|
|
const String &str_b = *VariantGetInternalPtr<String>::get_ptr(&p_right);
|
|
const String &str_b = *VariantGetInternalPtr<String>::get_ptr(&p_right);
|
|
|
|
|
|
*r_ret = str_b.find(str_a) != -1;
|
|
*r_ret = str_b.find(str_a) != -1;
|
|
r_valid = true;
|
|
r_valid = true;
|
|
}
|
|
}
|
|
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
|
static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
|
- const String &str_a = *VariantGetInternalPtr<String>::get_ptr(left);
|
|
|
|
|
|
+ const Left &str_a = *VariantGetInternalPtr<Left>::get_ptr(left);
|
|
const String &str_b = *VariantGetInternalPtr<String>::get_ptr(right);
|
|
const String &str_b = *VariantGetInternalPtr<String>::get_ptr(right);
|
|
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = str_b.find(str_a) != -1;
|
|
*VariantGetInternalPtr<bool>::get_ptr(r_ret) = str_b.find(str_a) != -1;
|
|
}
|
|
}
|
|
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
|
static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
|
- PtrToArg<bool>::encode(PtrToArg<String>::convert(right).find(PtrToArg<String>::convert(left)) != -1, r_ret);
|
|
|
|
|
|
+ PtrToArg<bool>::encode(PtrToArg<String>::convert(right).find(PtrToArg<Left>::convert(left)) != -1, r_ret);
|
|
|
|
+ }
|
|
|
|
+ static Variant::Type get_return_type() { return Variant::BOOL; }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+template <class Left>
|
|
|
|
+class OperatorEvaluatorInStringNameFind {
|
|
|
|
+public:
|
|
|
|
+ static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) {
|
|
|
|
+ const Left &str_a = *VariantGetInternalPtr<Left>::get_ptr(&p_left);
|
|
|
|
+ const String str_b = VariantGetInternalPtr<StringName>::get_ptr(&p_right)->operator String();
|
|
|
|
+
|
|
|
|
+ *r_ret = str_b.find(str_a) != -1;
|
|
|
|
+ r_valid = true;
|
|
|
|
+ }
|
|
|
|
+ static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) {
|
|
|
|
+ const Left &str_a = *VariantGetInternalPtr<Left>::get_ptr(left);
|
|
|
|
+ const String str_b = VariantGetInternalPtr<StringName>::get_ptr(right)->operator String();
|
|
|
|
+ *VariantGetInternalPtr<bool>::get_ptr(r_ret) = str_b.find(str_a) != -1;
|
|
|
|
+ }
|
|
|
|
+ static void ptr_evaluate(const void *left, const void *right, void *r_ret) {
|
|
|
|
+ PtrToArg<bool>::encode(PtrToArg<StringName>::convert(right).operator String().find(PtrToArg<Left>::convert(left)) != -1, r_ret);
|
|
}
|
|
}
|
|
static Variant::Type get_return_type() { return Variant::BOOL; }
|
|
static Variant::Type get_return_type() { return Variant::BOOL; }
|
|
};
|
|
};
|