Don't assume compiler can avoid copy to const ref.
[ardour.git] / libs / ardour / automation_list.cc
index 00d9f624ed184f36d0493f6ad38e9d7474ffb98f..cf41c4183943c0dee50952c7cd1c0d89a5c900f3 100644 (file)
@@ -25,6 +25,7 @@
 #include <algorithm>
 #include "ardour/automation_list.h"
 #include "ardour/event_type_map.h"
+#include "ardour/parameter_descriptor.h"
 #include "evoral/Curve.hpp"
 #include "pbd/stacktrace.h"
 #include "pbd/enumwriter.h"
@@ -47,8 +48,21 @@ static void dumpit (const AutomationList& al, string prefix = "")
        cerr << "\n";
 }
 #endif
-AutomationList::AutomationList (Evoral::Parameter id)
-       : ControlList(id)
+AutomationList::AutomationList (const Evoral::Parameter& id, const Evoral::ParameterDescriptor& desc)
+       : ControlList(id, desc)
+{
+       _state = Off;
+       _style = Absolute;
+       g_atomic_int_set (&_touching, 0);
+
+       create_curve_if_necessary();
+
+       assert(_parameter.type() != NullAutomation);
+       AutomationListCreated(this);
+}
+
+AutomationList::AutomationList (const Evoral::Parameter& id)
+       : ControlList(id, ARDOUR::ParameterDescriptor(id))
 {
        _state = Off;
        _style = Absolute;
@@ -91,7 +105,7 @@ AutomationList::AutomationList (const AutomationList& other, double start, doubl
  * in or below the AutomationList node.  It is used if @param id is non-null.
  */
 AutomationList::AutomationList (const XMLNode& node, Evoral::Parameter id)
-       : ControlList(id)
+       : ControlList(id, ARDOUR::ParameterDescriptor(id))
 {
        g_atomic_int_set (&_touching, 0);
        _state = Off;
@@ -114,9 +128,10 @@ AutomationList::~AutomationList()
 }
 
 boost::shared_ptr<Evoral::ControlList>
-AutomationList::create(Evoral::Parameter id)
+AutomationList::create(const Evoral::Parameter&           id,
+                       const Evoral::ParameterDescriptor& desc)
 {
-       return boost::shared_ptr<Evoral::ControlList>(new AutomationList(id));
+       return boost::shared_ptr<Evoral::ControlList>(new AutomationList(id, desc));
 }
 
 void
@@ -137,26 +152,16 @@ AutomationList::create_curve_if_necessary()
        }
 }
 
-bool
-AutomationList::operator== (const AutomationList& other)
-{
-       return _events == other._events;
-}
-
 AutomationList&
 AutomationList::operator= (const AutomationList& other)
 {
        if (this != &other) {
 
-               _events.clear ();
 
-               for (const_iterator i = other._events.begin(); i != other._events.end(); ++i) {
-                       _events.push_back (new Evoral::ControlEvent (**i));
-               }
-
-               _min_yval = other._min_yval;
-               _max_yval = other._max_yval;
-               _default_value = other._default_value;
+               ControlList::operator= (other);
+               _state = other._state;
+               _style = other._style;
+               _touching = other._touching;
 
                mark_dirty ();
                maybe_signal_changed ();
@@ -204,7 +209,7 @@ AutomationList::start_touch (double when)
 }
 
 void
-AutomationList::stop_touch (bool mark, double when)
+AutomationList::stop_touch (bool mark, double)
 {
        if (g_atomic_int_get (&_touching) == 0) {
                /* this touch has already been stopped (probably by Automatable::transport_stopped),
@@ -346,8 +351,6 @@ AutomationList::deserialize_events (const XMLNode& node)
                fast_simple_add (x, y);
        }
 
-       thin ();
-
        if (!ok) {
                clear ();
                error << _("automation list: cannot load coordinates from XML, all points ignored") << endmsg;
@@ -410,9 +413,7 @@ AutomationList::set_state (const XMLNode& node, int version)
                        fast_simple_add (x, y);
                }
 
-               thin ();
-
-                thaw ();
+               thaw ();
 
                return 0;
        }
@@ -428,7 +429,7 @@ AutomationList::set_state (const XMLNode& node, int version)
        }
 
        if ((prop = node.property (X_("automation-id"))) != 0){
-               _parameter = EventTypeMap::instance().new_parameter(prop->value());
+               _parameter = EventTypeMap::instance().from_symbol(prop->value());
        } else {
                warning << "Legacy session: automation list has no automation-id property." << endmsg;
        }