@@ -75,18 +75,21 @@ class IOutputCap {
7575protected:
7676 template <typename InstanceType, typename ...Args>
7777 InstanceType* addOutput (Args&&... args) {
78- auto p = createOutput<InstanceType>(getAllocatorSize () , std::forward<Args>(args)...);
79- addOutputInternal (p );
78+ auto p = createOutput<InstanceType>(allocatorSize , std::forward<Args>(args)...);
79+ outputs. push_back ( uptr (p) );
8080 return safe_cast<InstanceType>(p);
8181 }
8282
83- virtual size_t getAllocatorSize () const = 0;
84- virtual void addOutputInternal (IOutput *p) = 0;
83+ /* FIXME: we need to have factories to move these back to the implementation - otherwise pins created from the constructor may crash*/
84+ std::vector<std::unique_ptr<IOutput>> outputs;
85+ /* const*/ size_t allocatorSize;
8586};
8687
8788class OutputCap : public virtual IOutputCap {
8889 public:
89- OutputCap (size_t allocatorSize) : allocatorSize(allocatorSize) {}
90+ OutputCap (size_t allocatorSize) {
91+ this ->allocatorSize = allocatorSize;
92+ }
9093 virtual ~OutputCap () noexcept (false ) {}
9194
9295 virtual size_t getNumOutputs () const override {
@@ -95,19 +98,6 @@ class OutputCap : public virtual IOutputCap {
9598 virtual IOutput* getOutput (size_t i) const override {
9699 return outputs[i].get ();
97100 }
98-
99- protected:
100- virtual size_t getAllocatorSize () const override {
101- assert (allocatorSize > 0 );
102- return allocatorSize;
103- }
104- virtual void addOutputInternal (IOutput *p) override {
105- outputs.push_back (uptr (p));
106- }
107-
108- private:
109- std::vector<std::unique_ptr<IOutput>> outputs;
110- const size_t allocatorSize;
111101};
112102
113103}
0 commit comments