Merge pull request #61194 from reduz/new-hash-set

Add a new HashSet template
This commit is contained in:
Rémi Verschelde 2022-05-21 01:06:21 +02:00 committed by GitHub
commit 8adf048045
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
243 changed files with 1400 additions and 662 deletions

View file

@ -148,7 +148,7 @@ void AudioStreamPlayer2D::_update_panning() {
Vector2 global_pos = get_global_position();
RBSet<Viewport *> viewports = world_2d->get_viewports();
HashSet<Viewport *> viewports = world_2d->get_viewports();
viewports.insert(get_viewport()); // TODO: This is a mediocre workaround for #50958. Remove when that bug is fixed!
volume_vector.resize(4);

View file

@ -44,7 +44,7 @@ class RayCast2D : public Node2D {
int against_shape = 0;
Vector2 collision_point;
Vector2 collision_normal;
RBSet<RID> exclude;
HashSet<RID> exclude;
uint32_t collision_mask = 1;
bool exclude_parent_body = true;

View file

@ -46,7 +46,7 @@ class ShapeCast2D : public Node2D {
RID shape_rid;
Vector2 target_position = Vector2(0, 50);
RBSet<RID> exclude;
HashSet<RID> exclude;
real_t margin = 0.0;
uint32_t collision_mask = 1;
bool exclude_parent_body = true;

View file

@ -37,7 +37,7 @@ class Viewport;
class VisibleOnScreenNotifier2D : public Node2D {
GDCLASS(VisibleOnScreenNotifier2D, Node2D);
RBSet<Viewport *> viewports;
HashSet<Viewport *> viewports;
Rect2 rect;

View file

@ -387,7 +387,7 @@ Vector<AudioFrame> AudioStreamPlayer3D::_update_panning() {
Ref<World3D> world_3d = get_world_3d();
ERR_FAIL_COND_V(world_3d.is_null(), output_volume_vector);
RBSet<Camera3D *> cameras = world_3d->get_cameras();
HashSet<Camera3D *> cameras = world_3d->get_cameras();
cameras.insert(get_viewport()->get_camera_3d());
PhysicsDirectSpaceState3D *space_state = PhysicsServer3D::get_singleton()->space_get_direct_state(world_3d->get_space());

View file

@ -78,7 +78,7 @@ private:
bool capture_input_on_drag = false;
bool ray_pickable = true;
RBSet<uint32_t> debug_shapes_to_update;
HashSet<uint32_t> debug_shapes_to_update;
int debug_shapes_count = 0;
Transform3D debug_shape_old_transform;

View file

@ -118,7 +118,7 @@ public:
virtual void set_mesh_alpha_texture(Ref<Image> p_alpha_texture, unsigned int p_id) = 0;
virtual void commit() = 0;
virtual void set_mesh_filter(const RBSet<int> &p_mesh_ids) = 0;
virtual void set_mesh_filter(const HashSet<int> &p_mesh_ids) = 0;
virtual void clear_mesh_filter() = 0;
static Ref<LightmapRaycaster> create();

View file

@ -46,7 +46,7 @@ class RayCast3D : public Node3D {
Vector3 collision_normal;
Vector3 target_position = Vector3(0, -1, 0);
RBSet<RID> exclude;
HashSet<RID> exclude;
uint32_t collision_mask = 1;
bool exclude_parent_body = true;

View file

@ -131,7 +131,7 @@ private:
}
};
RBSet<SkinReference *> skin_bindings;
HashSet<SkinReference *> skin_bindings;
void _skin_changed();

View file

@ -37,7 +37,7 @@ class SpringArm3D : public Node3D {
GDCLASS(SpringArm3D, Node3D);
Ref<Shape3D> shape;
RBSet<RID> excluded_objects;
HashSet<RID> excluded_objects;
real_t spring_length = 1.0;
real_t current_spring_length = 0.0;
bool keep_child_basis = false;

View file

@ -162,7 +162,7 @@ class VehicleBody3D : public RigidDynamicBody3D {
real_t m_steeringValue = 0.0;
real_t m_currentVehicleSpeedKmHour = 0.0;
RBSet<RID> exclude;
HashSet<RID> exclude;
Vector<Vector3> m_forwardWS;
Vector<Vector3> m_axle;

View file

@ -184,7 +184,7 @@ private:
int cache_update_prop_size = 0;
TrackNodeCache::BezierAnim *cache_update_bezier[NODE_CACHE_UPDATE_MAX];
int cache_update_bezier_size = 0;
RBSet<TrackNodeCache *> playing_caches;
HashSet<TrackNodeCache *> playing_caches;
uint64_t accum_pass = 1;
float speed_scale = 1.0;

View file

@ -267,7 +267,7 @@ private:
};
HashMap<NodePath, TrackCache *> track_cache;
RBSet<TrackCache *> playing_caches;
HashSet<TrackCache *> playing_caches;
Ref<AnimationNode> root;

View file

@ -345,8 +345,8 @@ void SceneDebugger::remove_from_cache(const String &p_filename, Node *p_node) {
return;
}
HashMap<String, RBSet<Node *>> &edit_cache = debugger->live_scene_edit_cache;
HashMap<String, RBSet<Node *>>::Iterator E = edit_cache.find(p_filename);
HashMap<String, HashSet<Node *>> &edit_cache = debugger->live_scene_edit_cache;
HashMap<String, HashSet<Node *>>::Iterator E = edit_cache.find(p_filename);
if (E) {
E->value.erase(p_node);
if (E->value.size() == 0) {
@ -408,12 +408,12 @@ SceneDebuggerObject::SceneDebuggerObject(ObjectID p_id) {
}
void SceneDebuggerObject::_parse_script_properties(Script *p_script, ScriptInstance *p_instance) {
typedef HashMap<const Script *, RBSet<StringName>> ScriptMemberMap;
typedef HashMap<const Script *, HashSet<StringName>> ScriptMemberMap;
typedef HashMap<const Script *, HashMap<StringName, Variant>> ScriptConstantsMap;
ScriptMemberMap members;
if (p_instance) {
members[p_script] = RBSet<StringName>();
members[p_script] = HashSet<StringName>();
p_script->get_members(&(members[p_script]));
}
@ -424,7 +424,7 @@ void SceneDebuggerObject::_parse_script_properties(Script *p_script, ScriptInsta
Ref<Script> base = p_script->get_base_script();
while (base.is_valid()) {
if (p_instance) {
members[base.ptr()] = RBSet<StringName>();
members[base.ptr()] = HashSet<StringName>();
base->get_members(&(members[base.ptr()]));
}
@ -435,7 +435,7 @@ void SceneDebuggerObject::_parse_script_properties(Script *p_script, ScriptInsta
}
// Members
for (KeyValue<const Script *, RBSet<StringName>> sm : members) {
for (KeyValue<const Script *, HashSet<StringName>> sm : members) {
for (const StringName &E : sm.value) {
Variant m;
if (p_instance->get(E, m)) {
@ -624,7 +624,7 @@ void LiveEditor::_node_set_func(int p_id, const StringName &p_prop, const Varian
base = scene_tree->root->get_node(live_edit_root);
}
HashMap<String, RBSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
HashMap<String, HashSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
if (!E) {
return; //scene not editable
}
@ -668,7 +668,7 @@ void LiveEditor::_node_call_func(int p_id, const StringName &p_method, const Var
base = scene_tree->root->get_node(live_edit_root);
}
HashMap<String, RBSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
HashMap<String, HashSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
if (!E) {
return; //scene not editable
}
@ -753,7 +753,7 @@ void LiveEditor::_create_node_func(const NodePath &p_parent, const String &p_typ
base = scene_tree->root->get_node(live_edit_root);
}
HashMap<String, RBSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
HashMap<String, HashSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
if (!E) {
return; //scene not editable
}
@ -797,7 +797,7 @@ void LiveEditor::_instance_node_func(const NodePath &p_parent, const String &p_p
base = scene_tree->root->get_node(live_edit_root);
}
HashMap<String, RBSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
HashMap<String, HashSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
if (!E) {
return; //scene not editable
}
@ -835,15 +835,15 @@ void LiveEditor::_remove_node_func(const NodePath &p_at) {
base = scene_tree->root->get_node(live_edit_root);
}
HashMap<String, RBSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
HashMap<String, HashSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
if (!E) {
return; //scene not editable
}
for (RBSet<Node *>::Element *F = E->value.front(); F;) {
RBSet<Node *>::Element *N = F->next();
Vector<Node *> to_delete;
Node *n = F->get();
for (HashSet<Node *>::Iterator F = E->value.begin(); F; ++F) {
Node *n = *F;
if (base && !base->is_ancestor_of(n)) {
continue;
@ -854,9 +854,11 @@ void LiveEditor::_remove_node_func(const NodePath &p_at) {
}
Node *n2 = n->get_node(p_at);
memdelete(n2);
to_delete.push_back(n2);
}
F = N;
for (int i = 0; i < to_delete.size(); i++) {
memdelete(to_delete[i]);
}
}
@ -871,15 +873,14 @@ void LiveEditor::_remove_and_keep_node_func(const NodePath &p_at, ObjectID p_kee
base = scene_tree->root->get_node(live_edit_root);
}
HashMap<String, RBSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
HashMap<String, HashSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
if (!E) {
return; //scene not editable
}
for (RBSet<Node *>::Element *F = E->value.front(); F;) {
RBSet<Node *>::Element *N = F->next();
Node *n = F->get();
Vector<Node *> to_remove;
for (HashSet<Node *>::Iterator F = E->value.begin(); F; ++F) {
Node *n = *F;
if (base && !base->is_ancestor_of(n)) {
continue;
@ -889,13 +890,14 @@ void LiveEditor::_remove_and_keep_node_func(const NodePath &p_at, ObjectID p_kee
continue;
}
to_remove.push_back(n);
}
for (int i = 0; i < to_remove.size(); i++) {
Node *n = to_remove[i];
Node *n2 = n->get_node(p_at);
n2->get_parent()->remove_child(n2);
live_edit_remove_list[n][p_keep_id] = n2;
F = N;
}
}
@ -910,15 +912,16 @@ void LiveEditor::_restore_node_func(ObjectID p_id, const NodePath &p_at, int p_a
base = scene_tree->root->get_node(live_edit_root);
}
HashMap<String, RBSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
HashMap<String, HashSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
if (!E) {
return; //scene not editable
}
for (RBSet<Node *>::Element *F = E->value.front(); F;) {
RBSet<Node *>::Element *N = F->next();
for (HashSet<Node *>::Iterator F = E->value.begin(); F;) {
HashSet<Node *>::Iterator N = F;
++N;
Node *n = F->get();
Node *n = *F;
if (base && !base->is_ancestor_of(n)) {
continue;
@ -963,7 +966,7 @@ void LiveEditor::_duplicate_node_func(const NodePath &p_at, const String &p_new_
base = scene_tree->root->get_node(live_edit_root);
}
HashMap<String, RBSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
HashMap<String, HashSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
if (!E) {
return; //scene not editable
}
@ -1002,7 +1005,7 @@ void LiveEditor::_reparent_node_func(const NodePath &p_at, const NodePath &p_new
base = scene_tree->root->get_node(live_edit_root);
}
HashMap<String, RBSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
HashMap<String, HashSet<Node *>>::Iterator E = live_scene_edit_cache.find(live_edit_scene);
if (!E) {
return; //scene not editable
}

View file

@ -138,7 +138,7 @@ private:
NodePath live_edit_root;
String live_edit_scene;
HashMap<String, RBSet<Node *>> live_scene_edit_cache;
HashMap<String, HashSet<Node *>> live_scene_edit_cache;
HashMap<Node *, HashMap<ObjectID, Node *>> live_edit_remove_list;
void _send_tree();

View file

@ -143,7 +143,7 @@ VARIANT_ENUM_CAST(BaseButton::ActionMode)
class ButtonGroup : public Resource {
GDCLASS(ButtonGroup, Resource);
friend class BaseButton;
RBSet<BaseButton *> buttons;
HashSet<BaseButton *> buttons;
protected:
static void _bind_methods();

View file

@ -58,7 +58,7 @@ private:
String indent_text = "\t";
bool auto_indent = false;
RBSet<char32_t> auto_indent_prefixes;
HashSet<char32_t> auto_indent_prefixes;
bool indent_using_spaces = false;
int _calculate_spaces_till_next_left_indent(int p_column) const;
@ -214,7 +214,7 @@ private:
int code_completion_longest_line = 0;
Rect2i code_completion_rect;
RBSet<char32_t> code_completion_prefixes;
HashSet<char32_t> code_completion_prefixes;
List<ScriptLanguage::CodeCompletionOption> code_completion_option_submitted;
List<ScriptLanguage::CodeCompletionOption> code_completion_option_sources;
String code_completion_base;

View file

@ -1696,7 +1696,7 @@ void GraphEdit::set_warped_panning(bool p_warped) {
warped_panning = p_warped;
}
int GraphEdit::_set_operations(SET_OPERATIONS p_operation, RBSet<StringName> &r_u, const RBSet<StringName> &r_v) {
int GraphEdit::_set_operations(SET_OPERATIONS p_operation, HashSet<StringName> &r_u, const HashSet<StringName> &r_v) {
switch (p_operation) {
case GraphEdit::IS_EQUAL: {
for (const StringName &E : r_u) {
@ -1718,10 +1718,13 @@ int GraphEdit::_set_operations(SET_OPERATIONS p_operation, RBSet<StringName> &r_
return 1;
} break;
case GraphEdit::DIFFERENCE: {
for (RBSet<StringName>::Element *E = r_u.front(); E; E = E->next()) {
if (r_v.has(E->get())) {
r_u.erase(E->get());
for (HashSet<StringName>::Iterator E = r_u.begin(); E;) {
HashSet<StringName>::Iterator N = E;
++N;
if (r_v.has(*E)) {
r_u.remove(E);
}
E = N;
}
return r_u.size();
} break;
@ -1739,17 +1742,17 @@ int GraphEdit::_set_operations(SET_OPERATIONS p_operation, RBSet<StringName> &r_
return -1;
}
HashMap<int, Vector<StringName>> GraphEdit::_layering(const RBSet<StringName> &r_selected_nodes, const HashMap<StringName, RBSet<StringName>> &r_upper_neighbours) {
HashMap<int, Vector<StringName>> GraphEdit::_layering(const HashSet<StringName> &r_selected_nodes, const HashMap<StringName, HashSet<StringName>> &r_upper_neighbours) {
HashMap<int, Vector<StringName>> l;
RBSet<StringName> p = r_selected_nodes, q = r_selected_nodes, u, z;
HashSet<StringName> p = r_selected_nodes, q = r_selected_nodes, u, z;
int current_layer = 0;
bool selected = false;
while (!_set_operations(GraphEdit::IS_EQUAL, q, u)) {
_set_operations(GraphEdit::DIFFERENCE, p, u);
for (const StringName &E : p) {
RBSet<StringName> n = r_upper_neighbours[E];
HashSet<StringName> n = r_upper_neighbours[E];
if (_set_operations(GraphEdit::IS_SUBSET, n, z)) {
Vector<StringName> t;
t.push_back(E);
@ -1759,7 +1762,7 @@ HashMap<int, Vector<StringName>> GraphEdit::_layering(const RBSet<StringName> &r
selected = true;
t.append_array(l[current_layer]);
l.insert(current_layer, t);
RBSet<StringName> V;
HashSet<StringName> V;
V.insert(E);
_set_operations(GraphEdit::UNION, u, V);
}
@ -1801,7 +1804,7 @@ Vector<StringName> GraphEdit::_split(const Vector<StringName> &r_layer, const Ha
return left;
}
void GraphEdit::_horizontal_alignment(Dictionary &r_root, Dictionary &r_align, const HashMap<int, Vector<StringName>> &r_layers, const HashMap<StringName, RBSet<StringName>> &r_upper_neighbours, const RBSet<StringName> &r_selected_nodes) {
void GraphEdit::_horizontal_alignment(Dictionary &r_root, Dictionary &r_align, const HashMap<int, Vector<StringName>> &r_layers, const HashMap<StringName, HashSet<StringName>> &r_upper_neighbours, const HashSet<StringName> &r_selected_nodes) {
for (const StringName &E : r_selected_nodes) {
r_root[E] = E;
r_align[E] = E;
@ -1841,7 +1844,7 @@ void GraphEdit::_horizontal_alignment(Dictionary &r_root, Dictionary &r_align, c
}
}
void GraphEdit::_crossing_minimisation(HashMap<int, Vector<StringName>> &r_layers, const HashMap<StringName, RBSet<StringName>> &r_upper_neighbours) {
void GraphEdit::_crossing_minimisation(HashMap<int, Vector<StringName>> &r_layers, const HashMap<StringName, HashSet<StringName>> &r_upper_neighbours) {
if (r_layers.size() == 1) {
return;
}
@ -1879,7 +1882,7 @@ void GraphEdit::_crossing_minimisation(HashMap<int, Vector<StringName>> &r_layer
}
}
void GraphEdit::_calculate_inner_shifts(Dictionary &r_inner_shifts, const Dictionary &r_root, const Dictionary &r_node_names, const Dictionary &r_align, const RBSet<StringName> &r_block_heads, const HashMap<StringName, Pair<int, int>> &r_port_info) {
void GraphEdit::_calculate_inner_shifts(Dictionary &r_inner_shifts, const Dictionary &r_root, const Dictionary &r_node_names, const Dictionary &r_align, const HashSet<StringName> &r_block_heads, const HashMap<StringName, Pair<int, int>> &r_port_info) {
for (const StringName &E : r_block_heads) {
real_t left = 0;
StringName u = E;
@ -2052,7 +2055,7 @@ void GraphEdit::arrange_nodes() {
}
Dictionary node_names;
RBSet<StringName> selected_nodes;
HashSet<StringName> selected_nodes;
for (int i = get_child_count() - 1; i >= 0; i--) {
GraphNode *gn = Object::cast_to<GraphNode>(get_child(i));
@ -2063,7 +2066,7 @@ void GraphEdit::arrange_nodes() {
node_names[gn->get_name()] = gn;
}
HashMap<StringName, RBSet<StringName>> upper_neighbours;
HashMap<StringName, HashSet<StringName>> upper_neighbours;
HashMap<StringName, Pair<int, int>> port_info;
Vector2 origin(FLT_MAX, FLT_MAX);
@ -2078,7 +2081,7 @@ void GraphEdit::arrange_nodes() {
if (gn->is_selected()) {
selected_nodes.insert(gn->get_name());
RBSet<StringName> s;
HashSet<StringName> s;
for (List<Connection>::Element *E = connections.front(); E; E = E->next()) {
GraphNode *p_from = Object::cast_to<GraphNode>(node_names[E->get().from]);
if (E->get().to == gn->get_name() && p_from->is_selected()) {
@ -2115,7 +2118,7 @@ void GraphEdit::arrange_nodes() {
HashMap<StringName, Vector2> new_positions;
Vector2 default_position(FLT_MAX, FLT_MAX);
Dictionary inner_shift;
RBSet<StringName> block_heads;
HashSet<StringName> block_heads;
for (const StringName &E : selected_nodes) {
inner_shift[E] = 0.0f;

View file

@ -218,8 +218,11 @@ private:
uint64_t key = 0;
};
bool operator<(const ConnType &p_type) const {
return key < p_type.key;
static uint32_t hash(const ConnType &p_conn) {
return hash_one_uint64(p_conn.key);
}
bool operator==(const ConnType &p_type) const {
return key == p_type.key;
}
ConnType(uint32_t a = 0, uint32_t b = 0) {
@ -228,9 +231,9 @@ private:
}
};
RBSet<ConnType> valid_connection_types;
RBSet<int> valid_left_disconnect_types;
RBSet<int> valid_right_disconnect_types;
HashSet<ConnType, ConnType> valid_connection_types;
HashSet<int> valid_left_disconnect_types;
HashSet<int> valid_right_disconnect_types;
HashMap<StringName, Vector<GraphNode *>> comment_enclosed_nodes;
void _update_comment_enclosed_nodes_list(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes);
@ -258,12 +261,12 @@ private:
UNION,
};
int _set_operations(SET_OPERATIONS p_operation, RBSet<StringName> &r_u, const RBSet<StringName> &r_v);
HashMap<int, Vector<StringName>> _layering(const RBSet<StringName> &r_selected_nodes, const HashMap<StringName, RBSet<StringName>> &r_upper_neighbours);
int _set_operations(SET_OPERATIONS p_operation, HashSet<StringName> &r_u, const HashSet<StringName> &r_v);
HashMap<int, Vector<StringName>> _layering(const HashSet<StringName> &r_selected_nodes, const HashMap<StringName, HashSet<StringName>> &r_upper_neighbours);
Vector<StringName> _split(const Vector<StringName> &r_layer, const HashMap<StringName, Dictionary> &r_crossings);
void _horizontal_alignment(Dictionary &r_root, Dictionary &r_align, const HashMap<int, Vector<StringName>> &r_layers, const HashMap<StringName, RBSet<StringName>> &r_upper_neighbours, const RBSet<StringName> &r_selected_nodes);
void _crossing_minimisation(HashMap<int, Vector<StringName>> &r_layers, const HashMap<StringName, RBSet<StringName>> &r_upper_neighbours);
void _calculate_inner_shifts(Dictionary &r_inner_shifts, const Dictionary &r_root, const Dictionary &r_node_names, const Dictionary &r_align, const RBSet<StringName> &r_block_heads, const HashMap<StringName, Pair<int, int>> &r_port_info);
void _horizontal_alignment(Dictionary &r_root, Dictionary &r_align, const HashMap<int, Vector<StringName>> &r_layers, const HashMap<StringName, HashSet<StringName>> &r_upper_neighbours, const HashSet<StringName> &r_selected_nodes);
void _crossing_minimisation(HashMap<int, Vector<StringName>> &r_layers, const HashMap<StringName, HashSet<StringName>> &r_upper_neighbours);
void _calculate_inner_shifts(Dictionary &r_inner_shifts, const Dictionary &r_root, const Dictionary &r_node_names, const Dictionary &r_align, const HashSet<StringName> &r_block_heads, const HashMap<StringName, Pair<int, int>> &r_port_info);
float _calculate_threshold(StringName p_v, StringName p_w, const Dictionary &r_node_names, const HashMap<int, Vector<StringName>> &r_layers, const Dictionary &r_root, const Dictionary &r_align, const Dictionary &r_inner_shift, real_t p_current_threshold, const HashMap<StringName, Vector2> &r_node_positions);
void _place_block(StringName p_v, float p_delta, const HashMap<int, Vector<StringName>> &r_layers, const Dictionary &r_root, const Dictionary &r_align, const Dictionary &r_node_name, const Dictionary &r_inner_shift, Dictionary &r_sink, Dictionary &r_shift, HashMap<StringName, Vector2> &r_node_positions);

View file

@ -29,12 +29,13 @@
/*************************************************************************/
#include "grid_container.h"
#include "core/templates/rb_set.h"
void GridContainer::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_SORT_CHILDREN: {
HashMap<int, int> col_minw; // Max of min_width of all controls in each col (indexed by col).
HashMap<int, int> row_minh; // Max of min_height of all controls in each row (indexed by row).
RBMap<int, int> col_minw; // Max of min_width of all controls in each col (indexed by col).
RBMap<int, int> row_minh; // Max of min_height of all controls in each row (indexed by row).
RBSet<int> col_expanded; // Columns which have the SIZE_EXPAND flag set.
RBSet<int> row_expanded; // Rows which have the SIZE_EXPAND flag set.
@ -261,8 +262,8 @@ void GridContainer::_bind_methods() {
}
Size2 GridContainer::get_minimum_size() const {
HashMap<int, int> col_minw;
HashMap<int, int> row_minh;
RBMap<int, int> col_minw;
RBMap<int, int> row_minh;
int hsep = get_theme_constant(SNAME("h_separation"));
int vsep = get_theme_constant(SNAME("v_separation"));

View file

@ -45,7 +45,7 @@ class Range : public Control {
bool exp_ratio = false;
bool allow_greater = false;
bool allow_lesser = false;
RBSet<Range *> owners;
HashSet<Range *> owners;
void emit_value_changed();
void emit_changed(const char *p_what = "");
};

View file

@ -1637,7 +1637,7 @@ Node *Node::find_common_parent_with(const Node *p_node) const {
return const_cast<Node *>(p_node);
}
RBSet<const Node *> visited;
HashSet<const Node *> visited;
const Node *n = this;
@ -1669,7 +1669,7 @@ NodePath Node::get_path_to(const Node *p_node) const {
return NodePath(".");
}
RBSet<const Node *> visited;
HashSet<const Node *> visited;
const Node *n = this;
@ -2042,7 +2042,7 @@ StringName Node::get_property_store_alias(const StringName &p_property) const {
}
#endif
void Node::get_storable_properties(RBSet<StringName> &r_storable_properties) const {
void Node::get_storable_properties(HashSet<StringName> &r_storable_properties) const {
List<PropertyInfo> pi;
get_property_list(&pi);
for (List<PropertyInfo>::Element *E = pi.front(); E; E = E->next()) {

View file

@ -378,7 +378,7 @@ public:
bool is_property_pinned(const StringName &p_property) const;
virtual StringName get_property_store_alias(const StringName &p_property) const;
#endif
void get_storable_properties(RBSet<StringName> &r_storable_properties) const;
void get_storable_properties(HashSet<StringName> &r_storable_properties) const;
virtual String to_string() override;
@ -522,6 +522,6 @@ public:
VARIANT_ENUM_CAST(Node::DuplicateFlags);
typedef RBSet<Node *, Node::Comparator> NodeSet;
typedef HashSet<Node *, Node::Comparator> NodeSet;
#endif

View file

@ -29,7 +29,7 @@
/*************************************************************************/
#include "resource_preloader.h"
#include "core/templates/rb_set.h"
void ResourcePreloader::_set_resources(const Array &p_data) {
resources.clear();

View file

@ -130,7 +130,7 @@ private:
// Safety for when a node is deleted while a group is being called.
int call_lock = 0;
RBSet<Node *> call_skip; // Skip erased nodes.
HashSet<Node *> call_skip; // Skip erased nodes.
List<ObjectID> delete_queue;

View file

@ -203,7 +203,7 @@ private:
AudioListener2D *audio_listener_2d = nullptr;
Camera2D *camera_2d = nullptr;
RBSet<CanvasLayer *> canvas_layers;
HashSet<CanvasLayer *> canvas_layers;
RID viewport;
RID current_canvas;
@ -301,7 +301,7 @@ private:
bool use_occlusion_culling = false;
Ref<ViewportTexture> default_texture;
RBSet<ViewportTexture *> viewport_textures;
HashSet<ViewportTexture *> viewport_textures;
SDFOversize sdf_oversize = SDF_OVERSIZE_120_PERCENT;
SDFScale sdf_scale = SDF_SCALE_50_PERCENT;
@ -615,7 +615,7 @@ public:
bool use_xr = false;
friend class AudioListener3D;
AudioListener3D *audio_listener_3d = nullptr;
RBSet<AudioListener3D *> audio_listener_3d_set;
HashSet<AudioListener3D *> audio_listener_3d_set;
bool is_audio_listener_3d_enabled = false;
RID internal_audio_listener_3d;
AudioListener3D *get_audio_listener_3d() const;
@ -650,7 +650,7 @@ public:
friend class Camera3D;
Camera3D *camera_3d = nullptr;
RBSet<Camera3D *> camera_3d_set;
HashSet<Camera3D *> camera_3d_set;
Camera3D *get_camera_3d() const;
void _camera_3d_transform_changed_notify();
void _camera_3d_set(Camera3D *p_camera);

View file

@ -131,7 +131,7 @@ private:
void _make_transient();
Window *transient_parent = nullptr;
Window *exclusive_child = nullptr;
RBSet<Window *> transient_children;
HashSet<Window *> transient_children;
friend class Control;
Ref<Theme> theme;

View file

@ -47,7 +47,7 @@ public:
private:
TypedArray<PackedScene> spawnable_scenes;
RBSet<ResourceUID::ID> spawnable_ids;
HashSet<ResourceUID::ID> spawnable_ids;
NodePath spawn_path;
struct SpawnInfo {

View file

@ -316,7 +316,7 @@ Error SceneReplicationInterface::on_despawn_receive(int p_from, const uint8_t *p
}
void SceneReplicationInterface::_send_sync(int p_peer, uint64_t p_msec) {
const RBSet<ObjectID> &known = rep_state->get_known_nodes(p_peer);
const HashSet<ObjectID> &known = rep_state->get_known_nodes(p_peer);
if (known.is_empty()) {
return;
}

View file

@ -93,8 +93,8 @@ bool SceneReplicationState::update_sync_time(const ObjectID &p_id, uint64_t p_ms
return false;
}
const RBSet<ObjectID> SceneReplicationState::get_known_nodes(int p_peer) {
ERR_FAIL_COND_V(!peers_info.has(p_peer), RBSet<ObjectID>());
const HashSet<ObjectID> SceneReplicationState::get_known_nodes(int p_peer) {
ERR_FAIL_COND_V(!peers_info.has(p_peer), HashSet<ObjectID>());
return peers_info[p_peer].known_nodes;
}

View file

@ -62,27 +62,27 @@ private:
};
struct PeerInfo {
RBSet<ObjectID> known_nodes;
HashSet<ObjectID> known_nodes;
HashMap<uint32_t, ObjectID> recv_nodes;
uint16_t last_sent_sync = 0;
uint16_t last_recv_sync = 0;
};
RBSet<int> known_peers;
HashSet<int> known_peers;
uint32_t last_net_id = 0;
HashMap<ObjectID, TrackedNode> tracked_nodes;
HashMap<int, PeerInfo> peers_info;
RBSet<ObjectID> spawned_nodes;
RBSet<ObjectID> path_only_nodes;
HashSet<ObjectID> spawned_nodes;
HashSet<ObjectID> path_only_nodes;
TrackedNode &_track(const ObjectID &p_id);
void _untrack(const ObjectID &p_id);
bool is_tracked(const ObjectID &p_id) const { return tracked_nodes.has(p_id); }
public:
const RBSet<int> get_peers() const { return known_peers; }
const RBSet<ObjectID> &get_spawned_nodes() const { return spawned_nodes; }
const RBSet<ObjectID> &get_path_only_nodes() const { return path_only_nodes; }
const HashSet<int> get_peers() const { return known_peers; }
const HashSet<ObjectID> &get_spawned_nodes() const { return spawned_nodes; }
const HashSet<ObjectID> &get_path_only_nodes() const { return path_only_nodes; }
MultiplayerSynchronizer *get_synchronizer(const ObjectID &p_id) { return tracked_nodes.has(p_id) ? tracked_nodes[p_id].get_synchronizer() : nullptr; }
MultiplayerSpawner *get_spawner(const ObjectID &p_id) { return tracked_nodes.has(p_id) ? tracked_nodes[p_id].get_spawner() : nullptr; }
@ -90,7 +90,7 @@ public:
bool update_last_node_sync(const ObjectID &p_id, uint16_t p_time);
bool update_sync_time(const ObjectID &p_id, uint64_t p_msec);
const RBSet<ObjectID> get_known_nodes(int p_peer);
const HashSet<ObjectID> get_known_nodes(int p_peer);
uint32_t get_net_id(const ObjectID &p_id) const;
void set_net_id(const ObjectID &p_id, uint32_t p_net_id);
uint32_t ensure_net_id(const ObjectID &p_id);

View file

@ -170,8 +170,8 @@ Vector<Vector2> BitMap::_march_square(const Rect2i &rect, const Point2i &start)
int curx = startx;
int cury = starty;
unsigned int count = 0;
RBSet<Point2i> case9s;
RBSet<Point2i> case6s;
HashSet<Point2i> case9s;
HashSet<Point2i> case6s;
Vector<Vector2> _points;
do {
int sv = 0;

View file

@ -33,7 +33,7 @@
#include "servers/physics_server_3d.h"
Vector<Vector3> ConcavePolygonShape3D::get_debug_mesh_lines() const {
RBSet<DrawEdge> edges;
HashSet<DrawEdge, DrawEdge> edges;
int index_count = faces.size();
ERR_FAIL_COND_V((index_count % 3) != 0, Vector<Vector3>());

View file

@ -42,12 +42,12 @@ class ConcavePolygonShape3D : public Shape3D {
struct DrawEdge {
Vector3 a;
Vector3 b;
bool operator<(const DrawEdge &p_edge) const {
if (a == p_edge.a) {
return b < p_edge.b;
} else {
return a < p_edge.a;
}
static uint32_t hash(const DrawEdge &p_edge) {
uint32_t h = hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.a));
return hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.b), h);
}
bool operator==(const DrawEdge &p_edge) const {
return (a == p_edge.a && b == p_edge.b);
}
DrawEdge(const Vector3 &p_a = Vector3(), const Vector3 &p_b = Vector3()) {

View file

@ -53,7 +53,7 @@ static Array _sanitize_node_pinned_properties(Node *p_node) {
if (pinned.is_empty()) {
return Array();
}
RBSet<StringName> storable_properties;
HashSet<StringName> storable_properties;
p_node->get_storable_properties(storable_properties);
int i = 0;
do {

View file

@ -289,7 +289,7 @@ Vector<Vector2> PolygonPathFinder::find_path(const Vector2 &p_from, const Vector
}
//solve graph
RBSet<int> open_list;
HashSet<int> open_list;
points.write[aidx].distance = 0;
points.write[aidx].prev = aidx;

View file

@ -38,21 +38,23 @@ class PolygonPathFinder : public Resource {
struct Point {
Vector2 pos;
RBSet<int> connections;
HashSet<int> connections;
float distance = 0.0;
float penalty = 0.0;
int prev = 0;
};
struct Edge {
int points[2] = {};
union Edge {
struct {
int32_t points[2];
};
uint64_t key = 0;
_FORCE_INLINE_ bool operator<(const Edge &p_edge) const {
if (points[0] == p_edge.points[0]) {
return points[1] < p_edge.points[1];
} else {
return points[0] < p_edge.points[0];
}
_FORCE_INLINE_ bool operator==(const Edge &p_edge) const {
return key == p_edge.key;
}
_FORCE_INLINE_ static uint32_t hash(const Edge &p_edge) {
return hash_one_uint64(p_edge.key);
}
Edge(int a = 0, int b = 0) {
@ -68,7 +70,7 @@ class PolygonPathFinder : public Resource {
Rect2 bounds;
Vector<Point> points;
RBSet<Edge> edges;
HashSet<Edge, Edge> edges;
bool _is_point_inside(const Vector2 &p_point) const;

View file

@ -1737,7 +1737,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path, const Ref<Reso
#ifdef TOOLS_ENABLED
// Keep order from cached ids.
RBSet<String> cached_ids_found;
HashSet<String> cached_ids_found;
for (KeyValue<Ref<Resource>, String> &E : external_resources) {
String cached_id = E.key->get_id_for_path(local_path);
if (cached_id.is_empty() || cached_ids_found.has(cached_id)) {
@ -1809,7 +1809,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path, const Ref<Reso
f->store_line(String()); // Separate.
}
RBSet<String> used_unique_ids;
HashSet<String> used_unique_ids;
for (List<Ref<Resource>>::Element *E = saved_resources.front(); E; E = E->next()) {
Ref<Resource> res = E->get();

View file

@ -165,7 +165,7 @@ class ResourceFormatSaverTextInstance {
RBMap<NonPersistentKey, Ref<Resource>> non_persistent_map;
RBSet<Ref<Resource>> resource_set;
HashSet<Ref<Resource>> resource_set;
List<Ref<Resource>> saved_resources;
HashMap<Ref<Resource>, String> external_resources;
HashMap<Ref<Resource>, String> internal_resources;

View file

@ -1275,7 +1275,7 @@ void Theme::get_type_list(List<StringName> *p_list) const {
// This Set guarantees uniqueness.
// Because each map can have the same type defined, but for this method
// we only want one occurrence of each type.
RBSet<StringName> types;
HashSet<StringName> types;
// Icons.
for (const KeyValue<StringName, ThemeIconMap> &E : icon_map) {

View file

@ -34,7 +34,7 @@
#include "core/io/marshalls.h"
#include "core/math/geometry_2d.h"
#include "core/templates/local_vector.h"
#include "core/templates/rb_set.h"
#include "scene/2d/navigation_region_2d.h"
#include "scene/gui/control.h"
#include "scene/resources/convex_polygon_shape_2d.h"

View file

@ -34,6 +34,7 @@
#include "core/io/resource.h"
#include "core/object/object.h"
#include "core/templates/local_vector.h"
#include "core/templates/rb_set.h"
#include "scene/2d/light_occluder_2d.h"
#include "scene/2d/navigation_region_2d.h"
#include "scene/main/canvas_item.h"

View file

@ -1180,7 +1180,7 @@ String VisualShader::generate_preview_shader(Type p_type, int p_node, int p_port
StringBuilder global_code_per_node;
HashMap<Type, StringBuilder> global_code_per_func;
StringBuilder code;
RBSet<StringName> classes;
HashSet<StringName> classes;
global_code += String() + "shader_type canvas_item;\n";
@ -1222,7 +1222,7 @@ String VisualShader::generate_preview_shader(Type p_type, int p_node, int p_port
code += "\nvoid fragment() {\n";
RBSet<int> processed;
HashSet<int> processed;
Error err = _write_node(p_type, &global_code, &global_code_per_node, &global_code_per_func, code, default_tex_params, input_connections, output_connections, p_node, processed, true, classes);
ERR_FAIL_COND_V(err != OK, String());
@ -1551,7 +1551,7 @@ void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const {
//render modes
HashMap<String, String> blend_mode_enums;
RBSet<String> toggles;
HashSet<String> toggles;
const Vector<ShaderLanguage::ModeInfo> &rmodes = ShaderTypes::get_singleton()->get_modes(RenderingServer::ShaderMode(shader_mode));
@ -1611,7 +1611,7 @@ void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const {
}
}
Error VisualShader::_write_node(Type type, StringBuilder *global_code, StringBuilder *global_code_per_node, HashMap<Type, StringBuilder> *global_code_per_func, StringBuilder &code, Vector<VisualShader::DefaultTextureParam> &def_tex_params, const VMap<ConnectionKey, const List<Connection>::Element *> &input_connections, const VMap<ConnectionKey, const List<Connection>::Element *> &output_connections, int node, RBSet<int> &processed, bool for_preview, RBSet<StringName> &r_classes) const {
Error VisualShader::_write_node(Type type, StringBuilder *global_code, StringBuilder *global_code_per_node, HashMap<Type, StringBuilder> *global_code_per_func, StringBuilder &code, Vector<VisualShader::DefaultTextureParam> &def_tex_params, const VMap<ConnectionKey, const List<Connection>::Element *> &input_connections, const VMap<ConnectionKey, const List<Connection>::Element *> &output_connections, int node, HashSet<int> &processed, bool for_preview, HashSet<StringName> &r_classes) const {
const Ref<VisualShaderNode> vsnode = graph[type].nodes[node].node;
if (vsnode->is_disabled()) {
@ -2136,7 +2136,7 @@ void VisualShader::_update_shader() const {
HashMap<Type, StringBuilder> global_code_per_func;
StringBuilder code;
Vector<VisualShader::DefaultTextureParam> default_tex_params;
RBSet<StringName> classes;
HashSet<StringName> classes;
HashMap<int, int> insertion_pos;
static const char *shader_mode_str[Shader::MODE_MAX] = { "spatial", "canvas_item", "particles", "sky", "fog" };
@ -2181,7 +2181,7 @@ void VisualShader::_update_shader() const {
static const char *func_name[TYPE_MAX] = { "vertex", "fragment", "light", "start", "process", "collide", "start_custom", "process_custom", "sky", "fog" };
String global_expressions;
RBSet<String> used_uniform_names;
HashSet<String> used_uniform_names;
List<VisualShaderNodeUniform *> uniforms;
HashMap<int, List<int>> emitters;
HashMap<int, List<int>> varying_setters;
@ -2270,7 +2270,7 @@ void VisualShader::_update_shader() const {
}
HashMap<int, String> code_map;
RBSet<int> empty_funcs;
HashSet<int> empty_funcs;
for (int i = 0; i < TYPE_MAX; i++) {
if (!has_func_name(RenderingServer::ShaderMode(shader_mode), func_name[i])) {
@ -2282,7 +2282,7 @@ void VisualShader::_update_shader() const {
VMap<ConnectionKey, const List<Connection>::Element *> output_connections;
StringBuilder func_code;
RBSet<int> processed;
HashSet<int> processed;
bool is_empty_func = false;
if (shader_mode != Shader::MODE_PARTICLES && shader_mode != Shader::MODE_SKY && shader_mode != Shader::MODE_FOG) {

View file

@ -139,7 +139,7 @@ private:
Vector2 graph_offset;
HashMap<String, int> modes;
RBSet<StringName> flags;
HashSet<StringName> flags;
HashMap<String, Varying> varyings;
List<Varying> varyings_list;
@ -158,7 +158,7 @@ private:
}
};
Error _write_node(Type p_type, StringBuilder *global_code, StringBuilder *global_code_per_node, HashMap<Type, StringBuilder> *global_code_per_func, StringBuilder &code, Vector<DefaultTextureParam> &def_tex_params, const VMap<ConnectionKey, const List<Connection>::Element *> &input_connections, const VMap<ConnectionKey, const List<Connection>::Element *> &output_connections, int node, RBSet<int> &processed, bool for_preview, RBSet<StringName> &r_classes) const;
Error _write_node(Type p_type, StringBuilder *global_code, StringBuilder *global_code_per_node, HashMap<Type, StringBuilder> *global_code_per_func, StringBuilder &code, Vector<DefaultTextureParam> &def_tex_params, const VMap<ConnectionKey, const List<Connection>::Element *> &input_connections, const VMap<ConnectionKey, const List<Connection>::Element *> &output_connections, int node, HashSet<int> &processed, bool for_preview, HashSet<StringName> &r_classes) const;
void _input_type_changed(Type p_type, int p_id);
bool has_func_name(RenderingServer::ShaderMode p_mode, const String &p_func_name) const;

View file

@ -46,7 +46,7 @@ class World2D : public Resource {
RID space;
RID navigation_map;
RBSet<Viewport *> viewports;
HashSet<Viewport *> viewports;
protected:
static void _bind_methods();
@ -62,7 +62,7 @@ public:
PhysicsDirectSpaceState2D *get_direct_space_state();
_FORCE_INLINE_ const RBSet<Viewport *> &get_viewports() { return viewports; }
_FORCE_INLINE_ const HashSet<Viewport *> &get_viewports() { return viewports; }
World2D();
~World2D();

View file

@ -53,7 +53,7 @@ private:
Ref<Environment> fallback_environment;
Ref<CameraEffects> camera_effects;
RBSet<Camera3D *> cameras;
HashSet<Camera3D *> cameras;
protected:
static void _bind_methods();
@ -77,7 +77,7 @@ public:
void set_camera_effects(const Ref<CameraEffects> &p_camera_effects);
Ref<CameraEffects> get_camera_effects() const;
_FORCE_INLINE_ const RBSet<Camera3D *> &get_cameras() const { return cameras; }
_FORCE_INLINE_ const HashSet<Camera3D *> &get_cameras() const { return cameras; }
PhysicsDirectSpaceState3D *get_direct_space_state();