[Bf-blender-cvs] [eada8320406] functions-experimental-refactor: make AttributesInfo non copy and non movable
Jacques Lucke
noreply at git.blender.org
Thu Nov 7 15:06:25 CET 2019
Commit: eada8320406ab2a9923bef10f2af85a7e237ceba
Author: Jacques Lucke
Date: Thu Nov 7 13:59:47 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rBeada8320406ab2a9923bef10f2af85a7e237ceba
make AttributesInfo non copy and non movable
===================================================================
M source/blender/functions/FN_attributes_block_container.h
M source/blender/functions/FN_attributes_ref.h
M source/blender/functions/intern/attributes_block_container.cc
M source/blender/simulations/bparticles/integrator.cpp
M source/blender/simulations/bparticles/integrator.hpp
M source/blender/simulations/bparticles/integrator_interface.hpp
M source/blender/simulations/bparticles/node_frontend.cpp
M source/blender/simulations/bparticles/simulate.cpp
===================================================================
diff --git a/source/blender/functions/FN_attributes_block_container.h b/source/blender/functions/FN_attributes_block_container.h
index 81cf57517a5..4ed699c1609 100644
--- a/source/blender/functions/FN_attributes_block_container.h
+++ b/source/blender/functions/FN_attributes_block_container.h
@@ -11,18 +11,18 @@ class AttributesBlock;
class AttributesBlockContainer : BLI::NonCopyable, BLI::NonMovable {
private:
- AttributesInfo m_info;
+ std::unique_ptr<AttributesInfo> m_info;
uint m_block_size;
VectorSet<AttributesBlock *> m_active_blocks;
std::mutex m_blocks_mutex;
public:
- AttributesBlockContainer(AttributesInfo info, uint block_size);
+ AttributesBlockContainer(std::unique_ptr<AttributesInfo> info, uint block_size);
~AttributesBlockContainer();
const AttributesInfo &info() const
{
- return m_info;
+ return *m_info;
}
uint block_size() const
@@ -40,7 +40,8 @@ class AttributesBlockContainer : BLI::NonCopyable, BLI::NonMovable {
template<typename T> Vector<T> flatten_attribute(StringRef name) const;
void flatten_attribute(StringRef name, GenericMutableArrayRef dst) const;
- void update_attributes(AttributesInfo new_info, const AttributesDefaults &defaults);
+ void update_attributes(std::unique_ptr<AttributesInfo> new_info,
+ const AttributesDefaults &defaults);
AttributesBlock &new_block();
void release_block(AttributesBlock &block);
diff --git a/source/blender/functions/FN_attributes_ref.h b/source/blender/functions/FN_attributes_ref.h
index 4a3530badd2..9ae1b077eea 100644
--- a/source/blender/functions/FN_attributes_ref.h
+++ b/source/blender/functions/FN_attributes_ref.h
@@ -67,7 +67,7 @@ class AttributesInfoBuilder {
void add(const AttributesInfo &other);
};
-class AttributesInfo {
+class AttributesInfo : BLI::NonCopyable, BLI::NonMovable {
private:
StringMap<int> m_index_by_name;
Vector<std::string> m_name_by_index;
diff --git a/source/blender/functions/intern/attributes_block_container.cc b/source/blender/functions/intern/attributes_block_container.cc
index dd4b7bc3bba..d1524f9b1df 100644
--- a/source/blender/functions/intern/attributes_block_container.cc
+++ b/source/blender/functions/intern/attributes_block_container.cc
@@ -2,7 +2,8 @@
namespace FN {
-AttributesBlockContainer::AttributesBlockContainer(AttributesInfo info, uint block_size)
+AttributesBlockContainer::AttributesBlockContainer(std::unique_ptr<AttributesInfo> info,
+ uint block_size)
: m_info(std::move(info)), m_block_size(block_size)
{
}
@@ -26,7 +27,7 @@ uint AttributesBlockContainer::count_active() const
void AttributesBlockContainer::flatten_attribute(StringRef name, GenericMutableArrayRef dst) const
{
BLI_assert(dst.size() == this->count_active());
- BLI_assert(dst.type() == m_info.type_of(name));
+ BLI_assert(dst.type() == m_info->type_of(name));
uint offset = 0;
for (AttributesBlock *block : m_active_blocks) {
@@ -40,10 +41,10 @@ void AttributesBlockContainer::flatten_attribute(StringRef name, GenericMutableA
}
}
-void AttributesBlockContainer::update_attributes(AttributesInfo new_info,
+void AttributesBlockContainer::update_attributes(std::unique_ptr<AttributesInfo> new_info,
const AttributesDefaults &defaults)
{
- AttributesInfoDiff diff{m_info, new_info, defaults};
+ AttributesInfoDiff diff{*m_info, *new_info, defaults};
for (AttributesBlock *block : m_active_blocks) {
Vector<void *> new_buffers{diff.new_buffer_amount()};
diff.update(m_block_size, block->m_used_size, block->m_buffers, new_buffers);
diff --git a/source/blender/simulations/bparticles/integrator.cpp b/source/blender/simulations/bparticles/integrator.cpp
index f2278ad48ab..125d44bb0be 100644
--- a/source/blender/simulations/bparticles/integrator.cpp
+++ b/source/blender/simulations/bparticles/integrator.cpp
@@ -8,12 +8,12 @@ ConstantVelocityIntegrator::ConstantVelocityIntegrator()
{
FN::AttributesInfoBuilder builder;
builder.add<float3>("Position");
- m_offset_attributes_info = AttributesInfo(builder);
+ m_offset_attributes_info = BLI::make_unique<AttributesInfo>(builder);
}
-AttributesInfo &ConstantVelocityIntegrator::offset_attributes_info()
+const AttributesInfo &ConstantVelocityIntegrator::offset_attributes_info()
{
- return m_offset_attributes_info;
+ return *m_offset_attributes_info;
}
void ConstantVelocityIntegrator::integrate(IntegratorInterface &interface)
@@ -32,7 +32,7 @@ EulerIntegrator::EulerIntegrator(ArrayRef<Force *> forces) : m_forces(forces)
FN::AttributesInfoBuilder builder;
builder.add<float3>("Position");
builder.add<float3>("Velocity");
- m_offset_attributes_info = AttributesInfo(builder);
+ m_offset_attributes_info = BLI::make_unique<AttributesInfo>(builder);
}
EulerIntegrator::~EulerIntegrator()
@@ -42,9 +42,9 @@ EulerIntegrator::~EulerIntegrator()
}
}
-AttributesInfo &EulerIntegrator::offset_attributes_info()
+const AttributesInfo &EulerIntegrator::offset_attributes_info()
{
- return m_offset_attributes_info;
+ return *m_offset_attributes_info;
}
void EulerIntegrator::integrate(IntegratorInterface &interface)
diff --git a/source/blender/simulations/bparticles/integrator.hpp b/source/blender/simulations/bparticles/integrator.hpp
index 339eb38fcb7..2b297c8589c 100644
--- a/source/blender/simulations/bparticles/integrator.hpp
+++ b/source/blender/simulations/bparticles/integrator.hpp
@@ -6,25 +6,25 @@
namespace BParticles {
class ConstantVelocityIntegrator : public Integrator {
- AttributesInfo m_offset_attributes_info;
+ std::unique_ptr<AttributesInfo> m_offset_attributes_info;
public:
ConstantVelocityIntegrator();
- AttributesInfo &offset_attributes_info() override;
+ const AttributesInfo &offset_attributes_info() override;
void integrate(IntegratorInterface &interface) override;
};
class EulerIntegrator : public Integrator {
private:
- AttributesInfo m_offset_attributes_info;
+ std::unique_ptr<AttributesInfo> m_offset_attributes_info;
Vector<Force *> m_forces;
public:
EulerIntegrator(ArrayRef<Force *> forces);
~EulerIntegrator();
- AttributesInfo &offset_attributes_info() override;
+ const AttributesInfo &offset_attributes_info() override;
void integrate(IntegratorInterface &interface) override;
private:
diff --git a/source/blender/simulations/bparticles/integrator_interface.hpp b/source/blender/simulations/bparticles/integrator_interface.hpp
index 3cbcb24295f..bd5cb635924 100644
--- a/source/blender/simulations/bparticles/integrator_interface.hpp
+++ b/source/blender/simulations/bparticles/integrator_interface.hpp
@@ -36,7 +36,7 @@ class Integrator {
/**
* Specify which attributes are integrated (usually Position and Velocity).
*/
- virtual AttributesInfo &offset_attributes_info() = 0;
+ virtual const AttributesInfo &offset_attributes_info() = 0;
/**
* Compute the offsets for all integrated attributes. Those are not applied immediately, because
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index 48e56960a14..b35ffe20a28 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -937,7 +937,7 @@ class NodeTreeStepSimulator : public StepSimulator {
}
this->ensure_particle_container_exist_and_has_attributes(
- particles_state, name, AttributesInfo(system_attributes), defaults);
+ particles_state, name, system_attributes, defaults);
ParticleSystemInfo type_info = {
&defaults,
@@ -966,9 +966,11 @@ class NodeTreeStepSimulator : public StepSimulator {
void ensure_particle_container_exist_and_has_attributes(
ParticlesState &particles_state,
StringRef name,
- AttributesInfo attributes_info,
+ AttributesInfoBuilder &attributes_info_builder,
const AttributesDefaults &attributes_defaults)
{
+ auto attributes_info = BLI::make_unique<AttributesInfo>(attributes_info_builder);
+
auto &containers = particles_state.particle_containers();
AttributesBlockContainer *container = containers.lookup_default(name, nullptr);
if (container == nullptr) {
diff --git a/source/blender/simulations/bparticles/simulate.cpp b/source/blender/simulations/bparticles/simulate.cpp
index 08cc7f3b4ba..8c313f642a5 100644
--- a/source/blender/simulations/bparticles/simulate.cpp
+++ b/source/blender/simulations/bparticles/simulate.cpp
@@ -319,7 +319,7 @@ BLI_NOINLINE static void simulate_block(SimulationState &simulation_state,
BLI_assert(amount == remaining_durations.size());
Integrator &integrator = *system_info.integrator;
- AttributesInfo &offsets_info = integrator.offset_attributes_info();
+ const AttributesInfo &offsets_info = integrator.offset_attributes_info();
Vector<void *> offset_buffers;
for (const CPPType *type : offsets_info.types()) {
void *ptr = BLI_temporary_allocate(type->size() * amount);
More information about the Bf-blender-cvs
mailing list