Add a new HashMap implementation
Adds a new, cleaned up, HashMap implementation. * Uses Robin Hood Hashing (https://en.wikipedia.org/wiki/Hash_table#Robin_Hood_hashing). * Keeps elements in a double linked list for simpler, ordered, iteration. * Allows keeping iterators for later use in removal (Unlike Map<>, it does not do much for performance vs keeping the key, but helps replace old code). * Uses a more modern C++ iterator API, deprecates the old one. * Supports custom allocator (in case there is a wish to use a paged one). This class aims to unify all the associative template usage and replace it by this one: * Map<> (whereas key order does not matter, which is 99% of cases) * HashMap<> * OrderedHashMap<> * OAHashMap<>
This commit is contained in:
@ -454,10 +454,9 @@ bool RaycastOcclusionCull::Scenario::update(ThreadWorkPool &p_thread_pool) {
|
||||
next_scene = rtcNewScene(raycast_singleton->ebr_device);
|
||||
rtcSetSceneBuildQuality(next_scene, RTCBuildQuality(raycast_singleton->build_quality));
|
||||
|
||||
const RID *inst_rid = nullptr;
|
||||
while ((inst_rid = instances.next(inst_rid))) {
|
||||
OccluderInstance *occ_inst = instances.getptr(*inst_rid);
|
||||
Occluder *occ = raycast_singleton->occluder_owner.get_or_null(occ_inst->occluder);
|
||||
for (const KeyValue<RID, OccluderInstance> &E : instances) {
|
||||
const OccluderInstance *occ_inst = &E.value;
|
||||
const Occluder *occ = raycast_singleton->occluder_owner.get_or_null(occ_inst->occluder);
|
||||
|
||||
if (!occ || !occ_inst->enabled) {
|
||||
continue;
|
||||
@ -573,9 +572,8 @@ void RaycastOcclusionCull::set_build_quality(RS::ViewportOcclusionCullingBuildQu
|
||||
|
||||
build_quality = p_quality;
|
||||
|
||||
const RID *scenario_rid = nullptr;
|
||||
while ((scenario_rid = scenarios.next(scenario_rid))) {
|
||||
scenarios[*scenario_rid].dirty = true;
|
||||
for (KeyValue<RID, Scenario> &K : scenarios) {
|
||||
K.value.dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -596,9 +594,8 @@ RaycastOcclusionCull::RaycastOcclusionCull() {
|
||||
}
|
||||
|
||||
RaycastOcclusionCull::~RaycastOcclusionCull() {
|
||||
const RID *scenario_rid = nullptr;
|
||||
while ((scenario_rid = scenarios.next(scenario_rid))) {
|
||||
Scenario &scenario = scenarios[*scenario_rid];
|
||||
for (KeyValue<RID, Scenario> &K : scenarios) {
|
||||
Scenario &scenario = K.value;
|
||||
if (scenario.commit_thread) {
|
||||
scenario.commit_thread->wait_to_finish();
|
||||
memdelete(scenario.commit_thread);
|
||||
|
||||
Reference in New Issue
Block a user