Commit: 54b8d6ba0b054e4176eb3c6cdca598eec0f2ac8f
Author: Jacques Lucke
Date:   Wed Jan 23 15:13:19 2019 +0100
Branches: functions
https://developer.blender.org/rB54b8d6ba0b054e4176eb3c6cdca598eec0f2ac8f

more const

===================================================================

M       source/blender/functions/FN_functions.hpp
M       source/blender/functions/intern/c_wrapper.cpp
M       source/blender/functions/intern/function.cpp

===================================================================

diff --git a/source/blender/functions/FN_functions.hpp 
b/source/blender/functions/FN_functions.hpp
index 2e0506f9ce6..2ba0fed987b 100644
--- a/source/blender/functions/FN_functions.hpp
+++ b/source/blender/functions/FN_functions.hpp
@@ -30,7 +30,7 @@ namespace FN {
        class ValueArray {
        public:
                ValueArray() {};
-               ValueArray(SmallTypeVector types);
+               ValueArray(const SmallTypeVector &types);
                void set(uint index, void *src);
                void get(uint index, void *dst) const;
 
@@ -42,7 +42,7 @@ namespace FN {
 
        class Inputs {
        public:
-               Inputs(Function &fn);
+               Inputs(const Function &fn);
 
                inline void set(uint index, void *src)
                { this->values.set(index, src); }
@@ -50,13 +50,13 @@ namespace FN {
                { this->values.get(index, dst); }
 
        private:
-               Function &fn;
+               const Function &fn;
                ValueArray values;
        };
 
        class Outputs {
        public:
-               Outputs(Function &fn);
+               Outputs(const Function &fn);
 
                inline void set(uint index, void *src)
                { this->values.set(index, src); }
@@ -64,7 +64,7 @@ namespace FN {
                { this->values.get(index, dst); }
 
        private:
-               Function &fn;
+               const Function &fn;
                ValueArray values;
        };
 
@@ -73,7 +73,7 @@ namespace FN {
                Signature()
                        : m_inputs({}), m_outputs({}) {}
 
-               Signature(SmallTypeVector inputs, SmallTypeVector outputs)
+               Signature(const SmallTypeVector &inputs, const SmallTypeVector 
&outputs)
                        : m_inputs(inputs), m_outputs(outputs) {}
 
                ~Signature() {}
@@ -90,17 +90,17 @@ namespace FN {
 
        class Function {
        public:
-               Function(Signature signature)
+               Function(const Signature &signature)
                        : m_signature(signature) {}
 
-               virtual bool call(Inputs &fn_in, Outputs &fn_out) = 0;
+               virtual ~Function();
 
-               inline const Signature &signature() const
-               { return this->m_signature; }
+               virtual bool call(const Inputs &fn_in, Outputs &fn_out) = 0;
 
-       private:
+               const Signature &signature() const;
 
-       protected:
-               Signature m_signature;
+       private:
+               const Signature m_signature;
        };
+
 } /* namespace FN */
diff --git a/source/blender/functions/intern/c_wrapper.cpp 
b/source/blender/functions/intern/c_wrapper.cpp
index f6bd3c1313d..bc0f669747b 100644
--- a/source/blender/functions/intern/c_wrapper.cpp
+++ b/source/blender/functions/intern/c_wrapper.cpp
@@ -44,12 +44,18 @@ FnTypeRef FN_type_get_float_vector_3d()
 
 
 class AddConstFunction : public FN::Function {
+private:
+       AddConstFunction(FN::Signature sig, int value)
+               : Function(sig), value(value) {}
+
 public:
-       AddConstFunction(int value)
-               : FN::Function(FN::Signature({FN::Types::int32_ty}, 
{FN::Types::int32_ty})), value(value)
-       { }
+       static AddConstFunction *Create(int value)
+       {
+               FN::Signature sig({FN::Types::int32_ty}, {FN::Types::int32_ty});
+               return new AddConstFunction(sig, value);
+       }
 
-       bool call(FN::Inputs &fn_in, FN::Outputs &fn_out)
+       bool call(const FN::Inputs &fn_in, FN::Outputs &fn_out) override
        {
                int a;
                fn_in.get(0, &a);
@@ -64,5 +70,5 @@ private:
 
 FunctionRef FN_get_add_const_function(int value)
 {
-       return (FunctionRef)new AddConstFunction(value);
-}
\ No newline at end of file
+       return (FunctionRef)AddConstFunction::Create(value);
+}
diff --git a/source/blender/functions/intern/function.cpp 
b/source/blender/functions/intern/function.cpp
index c7b2cd875ae..a985b132606 100644
--- a/source/blender/functions/intern/function.cpp
+++ b/source/blender/functions/intern/function.cpp
@@ -12,13 +12,17 @@ const uint Type::size() const
        return this->m_size;
 }
 
-Inputs::Inputs(Function &fn)
-       : fn(fn), values(ValueArray(fn.signature().inputs())) { }
 
-Outputs::Outputs(Function &fn)
-       : fn(fn), values(ValueArray(fn.signature().outputs())) { }
 
-ValueArray::ValueArray(SmallTypeVector types)
+Inputs::Inputs(const Function &fn)
+       : fn(fn), values(fn.signature().inputs()) { }
+
+Outputs::Outputs(const Function &fn)
+       : fn(fn), values(fn.signature().outputs()) { }
+
+
+
+ValueArray::ValueArray(const SmallTypeVector &types)
        : types(types)
 {
        int total_size = 0;
@@ -26,16 +30,15 @@ ValueArray::ValueArray(SmallTypeVector types)
                this->offsets.append(total_size);
                total_size += type->size();
        }
+       this->offsets.append(total_size);
        this->storage = SmallBuffer<>(total_size);
 }
 
 void ValueArray::set(uint index, void *src)
 {
-       BLI_assert(index < this->offsets.size());
-       this->storage.copy_in(
-               this->offsets[index],
-               src,
-               this->types[index]->size());
+       BLI_assert(index < this->types.size());
+       uint size = this->offsets[index + 1] - this->offsets[index];
+       this->storage.copy_in(this->offsets[index], src, size);
 }
 
 void ValueArray::get(uint index, void *dst) const
@@ -45,4 +48,14 @@ void ValueArray::get(uint index, void *dst) const
                dst,
                this->offsets[index],
                this->types[index]->size());
+}
+
+
+Function::~Function()
+{
+}
+
+const Signature &Function::signature() const
+{
+       return this->m_signature;
 }
\ No newline at end of file

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to