| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | /**************************************************************************//*  gdscript_lambda_callable.h                                            *//**************************************************************************//*                         This file is part of:                          *//*                             GODOT ENGINE                               *//*                        https://godotengine.org                         *//**************************************************************************//* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). *//* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  *//*                                                                        *//* Permission is hereby granted, free of charge, to any person obtaining  *//* a copy of this software and associated documentation files (the        *//* "Software"), to deal in the Software without restriction, including    *//* without limitation the rights to use, copy, modify, merge, publish,    *//* distribute, sublicense, and/or sell copies of the Software, and to     *//* permit persons to whom the Software is furnished to do so, subject to  *//* the following conditions:                                              *//*                                                                        *//* The above copyright notice and this permission notice shall be         *//* included in all copies or substantial portions of the Software.        *//*                                                                        *//* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        *//* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     *//* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *//* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   *//* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   *//* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      *//* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 *//**************************************************************************/#pragma once#include "gdscript.h"#include "core/object/ref_counted.h"#include "core/templates/vector.h"#include "core/variant/callable.h"#include "core/variant/variant.h"class GDScriptFunction;class GDScriptInstance;class GDScriptLambdaCallable : public CallableCustom {	GDScript::UpdatableFuncPtr function;	Ref<GDScript> script;	uint32_t h;	Vector<Variant> captures;	static bool compare_equal(const CallableCustom *p_a, const CallableCustom *p_b);	static bool compare_less(const CallableCustom *p_a, const CallableCustom *p_b);public:	bool is_valid() const override;	uint32_t hash() const override;	String get_as_text() const override;	CompareEqualFunc get_compare_equal_func() const override;	CompareLessFunc get_compare_less_func() const override;	ObjectID get_object() const override;	StringName get_method() const override;	int get_argument_count(bool &r_is_valid) const override;	void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const override;	GDScriptLambdaCallable(GDScriptLambdaCallable &) = delete;	GDScriptLambdaCallable(const GDScriptLambdaCallable &) = delete;	GDScriptLambdaCallable(Ref<GDScript> p_script, GDScriptFunction *p_function, const Vector<Variant> &p_captures);	virtual ~GDScriptLambdaCallable() = default;};// Lambda callable that references a particular object, so it can use `self` in the body.class GDScriptLambdaSelfCallable : public CallableCustom {	GDScript::UpdatableFuncPtr function;	Ref<RefCounted> reference; // For objects that are RefCounted, keep a reference.	Object *object = nullptr; // For non RefCounted objects, use a direct pointer.	uint32_t h;	Vector<Variant> captures;	static bool compare_equal(const CallableCustom *p_a, const CallableCustom *p_b);	static bool compare_less(const CallableCustom *p_a, const CallableCustom *p_b);public:	bool is_valid() const override;	uint32_t hash() const override;	String get_as_text() const override;	CompareEqualFunc get_compare_equal_func() const override;	CompareLessFunc get_compare_less_func() const override;	ObjectID get_object() const override;	StringName get_method() const override;	int get_argument_count(bool &r_is_valid) const override;	void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const override;	GDScriptLambdaSelfCallable(GDScriptLambdaSelfCallable &) = delete;	GDScriptLambdaSelfCallable(const GDScriptLambdaSelfCallable &) = delete;	GDScriptLambdaSelfCallable(Ref<RefCounted> p_self, GDScriptFunction *p_function, const Vector<Variant> &p_captures);	GDScriptLambdaSelfCallable(Object *p_self, GDScriptFunction *p_function, const Vector<Variant> &p_captures);	virtual ~GDScriptLambdaSelfCallable() = default;};
 |