<commit_before>#include "Parameter.h"

namespace ofxPreset
{
#pragma mark Parameter::Data
    //--------------------------------------------------------------
    template<typename ParameterType>
    Parameter<ParameterType>::Data::Data(bool autoUpdate)
        : autoUpdating(false)
    {
        this->setAutoUpdating(autoUpdate);
		this->onValueChangedListener = this->parameter.newListener([this](ParameterType & v)
		{
			this->mutableValue = v;
		});
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    Parameter<ParameterType>::Data::Data(const ofParameter<ParameterType> & v, bool autoUpdate)
        : parameter(v)
        , mutableValue(v)
        , autoUpdating(false)
    {
        this->setAutoUpdating(autoUpdate);
		this->onValueChangedListener = this->parameter.newListener([this](ParameterType & v)
		{
			this->mutableValue = v;
		});
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    void Parameter<ParameterType>::Data::update()
    {
        if (this->parameter.get() != this->mutableValue)
        {
            this->parameter.set(this->mutableValue);
        }
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    void Parameter<ParameterType>::Data::setAutoUpdating(bool autoUpdating)
    {
        if (this->autoUpdating == autoUpdating) return;

		if (autoUpdating)
        {
			this->onUpdateListener = ofEvents().update.newListener([this](ofEventArgs & args)
			{
				this->update();
			});
        }
        else
        {
			this->onUpdateListener.unsubscribe();
		}

        this->autoUpdating = autoUpdating;
    }
    
#pragma mark Parameter
    //--------------------------------------------------------------
	template<typename ParameterType>
    Parameter<ParameterType>::Parameter(bool autoUpdating)
        : data(make_shared<Data>(autoUpdating))
    {}
	
	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(const ofParameter<ParameterType> & v, bool autoUpdating)
        : data(make_shared<Data>(ofParameter<ParameterType>(v), autoUpdating))
    {}
	
	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(const ParameterType & v, bool autoUpdating)
        : data(make_shared<Data>(ofParameter<ParameterType>(v), autoUpdating))
    {}
	
	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(const string & name, const ParameterType & v, bool autoUpdating)
        : data(make_shared<Data>(ofParameter<ParameterType>(name, v), autoUpdating))
    {}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(const string & name, const ParameterType & v, const ParameterType & min, const ParameterType & max, bool autoUpdating)
        : data(make_shared<Data>(ofParameter<ParameterType>(name, v, min, max), autoUpdating))
    {}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(shared_ptr<Data> data)
        : data(data)
    {}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::update()
	{
        this->data->update();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::setAutoUpdating(bool autoUpdating)
	{
        this->data->setAutoUpdating(autoUpdating);
	}
	
	//--------------------------------------------------------------
	template<typename ParameterType>
	bool Parameter<ParameterType>::isAutoUpdating() const
	{
		return this->data->autoUpdating;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType * Parameter<ParameterType>::getRef()
	{
		return &this->data->mutableValue;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	shared_ptr<ofParameter<ParameterType>> Parameter<ParameterType>::getInternal()
	{
		return dynamic_pointer_cast<ofParameter<ParameterType>>(this->data->parameter.newReference());
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	const ParameterType & Parameter<ParameterType>::get() const
    {
		return this->data->parameter.get();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	const ParameterType * Parameter<ParameterType>::operator->() const
    {
		return this->data->parameter.operator->();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::operator const ParameterType & () const
    {
		return (ParameterType &)this->data->parameter.get();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::setName(const string & name)
    {
		this->data->parameter.setName(name);
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	string Parameter<ParameterType>::getName() const
    {
		return this->data->parameter.getName();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType Parameter<ParameterType>::getMin() const
    {
		return this->data->parameter.getMin();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType Parameter<ParameterType>::getMax() const
    {
		return this->data->parameter.getMax();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	string Parameter<ParameterType>::toString() const
    {
		return this->data->parameter.toString();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::fromString(const string & name)
    {
		return this->data->parameter.fromString(name);
	}

    //--------------------------------------------------------------
    template<typename ParameterType>
    template<class ListenerClass, typename ListenerMethod>
    void Parameter<ParameterType>::addListener(ListenerClass * listener, ListenerMethod method, int prio) 
    {
        this->data->parameter.addListener(listener, method, prio);
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    template<class ListenerClass, typename ListenerMethod>
    void Parameter<ParameterType>::removeListener(ListenerClass * listener, ListenerMethod method, int prio) 
    {
        this->data->parameter.addListener(listener, method, prio);
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    template<typename... Args>
    ofEventListener Parameter<ParameterType>::newListener(Args...args) 
    {
        return this->data->parameter.newListener(args...);
    }

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::enableEvents()
    {
		this->data->parameter->enableEvents();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::disableEvents()
    {
		this->data->parameter->disableEvents();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	bool Parameter<ParameterType>::isSerializable() const
    {
		return this->data->parameter.isSerializable();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	bool Parameter<ParameterType>::isReadOnly() const
    {
		return this->data->parameter.isReadOnly();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::makeReferenceTo(Parameter<ParameterType> & mom)
    {
		this->data->parameter.makeReferenceTo(mom.parameter);
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::makeReferenceTo(ofParameter<ParameterType> & mom)
    {
		this->data->parameter.makeReferenceTo(mom);
    }

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator=(const Parameter<ParameterType> & v)
    {
		this->data->parameter = v.data->parameter;
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	const ParameterType & Parameter<ParameterType>::operator=(const ParameterType & v)
    {
		this->data->parameter = v;
		return this->get();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType Parameter<ParameterType>::operator++(int v)
    {
		return this->data->parameter.operator++(v);
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator++()
    {
		this->data->parameter.operator++();
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType Parameter<ParameterType>::operator--(int v)
    {
		return this->data->parameter.operator--(v);
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator--()
    {
		this->data->parameter.operator--();
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	template<typename OtherType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator+=(const OtherType & v)
    {
		this->data->parameter.operator+(v);
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	template<typename OtherType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator-=(const OtherType & v)
    {
		this->data->parameter.operator-=(v);
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	template<typename OtherType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator*=(const OtherType & v){
		this->data->parameter.operator*=(v);
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	template<typename OtherType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator/=(const OtherType & v)
    {
		this->data->parameter.operator/=(v);
		return *this;
	}
<commit_msg>Fixed typo in += operator.<commit_after>#include "Parameter.h"

namespace ofxPreset
{
#pragma mark Parameter::Data
    //--------------------------------------------------------------
    template<typename ParameterType>
    Parameter<ParameterType>::Data::Data(bool autoUpdate)
        : autoUpdating(false)
    {
        this->setAutoUpdating(autoUpdate);
		this->onValueChangedListener = this->parameter.newListener([this](ParameterType & v)
		{
			this->mutableValue = v;
		});
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    Parameter<ParameterType>::Data::Data(const ofParameter<ParameterType> & v, bool autoUpdate)
        : parameter(v)
        , mutableValue(v)
        , autoUpdating(false)
    {
        this->setAutoUpdating(autoUpdate);
		this->onValueChangedListener = this->parameter.newListener([this](ParameterType & v)
		{
			this->mutableValue = v;
		});
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    void Parameter<ParameterType>::Data::update()
    {
        if (this->parameter.get() != this->mutableValue)
        {
            this->parameter.set(this->mutableValue);
        }
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    void Parameter<ParameterType>::Data::setAutoUpdating(bool autoUpdating)
    {
        if (this->autoUpdating == autoUpdating) return;

		if (autoUpdating)
        {
			this->onUpdateListener = ofEvents().update.newListener([this](ofEventArgs & args)
			{
				this->update();
			});
        }
        else
        {
			this->onUpdateListener.unsubscribe();
		}

        this->autoUpdating = autoUpdating;
    }
    
#pragma mark Parameter
    //--------------------------------------------------------------
	template<typename ParameterType>
    Parameter<ParameterType>::Parameter(bool autoUpdating)
        : data(make_shared<Data>(autoUpdating))
    {}
	
	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(const ofParameter<ParameterType> & v, bool autoUpdating)
        : data(make_shared<Data>(ofParameter<ParameterType>(v), autoUpdating))
    {}
	
	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(const ParameterType & v, bool autoUpdating)
        : data(make_shared<Data>(ofParameter<ParameterType>(v), autoUpdating))
    {}
	
	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(const string & name, const ParameterType & v, bool autoUpdating)
        : data(make_shared<Data>(ofParameter<ParameterType>(name, v), autoUpdating))
    {}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(const string & name, const ParameterType & v, const ParameterType & min, const ParameterType & max, bool autoUpdating)
        : data(make_shared<Data>(ofParameter<ParameterType>(name, v, min, max), autoUpdating))
    {}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::Parameter(shared_ptr<Data> data)
        : data(data)
    {}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::update()
	{
        this->data->update();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::setAutoUpdating(bool autoUpdating)
	{
        this->data->setAutoUpdating(autoUpdating);
	}
	
	//--------------------------------------------------------------
	template<typename ParameterType>
	bool Parameter<ParameterType>::isAutoUpdating() const
	{
		return this->data->autoUpdating;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType * Parameter<ParameterType>::getRef()
	{
		return &this->data->mutableValue;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	shared_ptr<ofParameter<ParameterType>> Parameter<ParameterType>::getInternal()
	{
		return dynamic_pointer_cast<ofParameter<ParameterType>>(this->data->parameter.newReference());
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	const ParameterType & Parameter<ParameterType>::get() const
    {
		return this->data->parameter.get();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	const ParameterType * Parameter<ParameterType>::operator->() const
    {
		return this->data->parameter.operator->();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType>::operator const ParameterType & () const
    {
		return (ParameterType &)this->data->parameter.get();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::setName(const string & name)
    {
		this->data->parameter.setName(name);
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	string Parameter<ParameterType>::getName() const
    {
		return this->data->parameter.getName();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType Parameter<ParameterType>::getMin() const
    {
		return this->data->parameter.getMin();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType Parameter<ParameterType>::getMax() const
    {
		return this->data->parameter.getMax();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	string Parameter<ParameterType>::toString() const
    {
		return this->data->parameter.toString();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::fromString(const string & name)
    {
		return this->data->parameter.fromString(name);
	}

    //--------------------------------------------------------------
    template<typename ParameterType>
    template<class ListenerClass, typename ListenerMethod>
    void Parameter<ParameterType>::addListener(ListenerClass * listener, ListenerMethod method, int prio) 
    {
        this->data->parameter.addListener(listener, method, prio);
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    template<class ListenerClass, typename ListenerMethod>
    void Parameter<ParameterType>::removeListener(ListenerClass * listener, ListenerMethod method, int prio) 
    {
        this->data->parameter.addListener(listener, method, prio);
    }

    //--------------------------------------------------------------
    template<typename ParameterType>
    template<typename... Args>
    ofEventListener Parameter<ParameterType>::newListener(Args...args) 
    {
        return this->data->parameter.newListener(args...);
    }

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::enableEvents()
    {
		this->data->parameter->enableEvents();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::disableEvents()
    {
		this->data->parameter->disableEvents();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	bool Parameter<ParameterType>::isSerializable() const
    {
		return this->data->parameter.isSerializable();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	bool Parameter<ParameterType>::isReadOnly() const
    {
		return this->data->parameter.isReadOnly();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::makeReferenceTo(Parameter<ParameterType> & mom)
    {
		this->data->parameter.makeReferenceTo(mom.parameter);
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	void Parameter<ParameterType>::makeReferenceTo(ofParameter<ParameterType> & mom)
    {
		this->data->parameter.makeReferenceTo(mom);
    }

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator=(const Parameter<ParameterType> & v)
    {
		this->data->parameter = v.data->parameter;
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	const ParameterType & Parameter<ParameterType>::operator=(const ParameterType & v)
    {
		this->data->parameter = v;
		return this->get();
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType Parameter<ParameterType>::operator++(int v)
    {
		return this->data->parameter.operator++(v);
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator++()
    {
		this->data->parameter.operator++();
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	ParameterType Parameter<ParameterType>::operator--(int v)
    {
		return this->data->parameter.operator--(v);
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator--()
    {
		this->data->parameter.operator--();
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	template<typename OtherType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator+=(const OtherType & v)
    {
		this->data->parameter.operator+=(v);
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	template<typename OtherType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator-=(const OtherType & v)
    {
		this->data->parameter.operator-=(v);
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	template<typename OtherType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator*=(const OtherType & v){
		this->data->parameter.operator*=(v);
		return *this;
	}

	//--------------------------------------------------------------
	template<typename ParameterType>
	template<typename OtherType>
	Parameter<ParameterType> & Parameter<ParameterType>::operator/=(const OtherType & v)
    {
		this->data->parameter.operator/=(v);
		return *this;
	}

{'fraction_non_alphanumeric': 0.34076120866387377, 'fraction_numerical': 0.0, 'mean_word_length': 1.609792975110491, 'pattern_counts': {'":': 0, '<': 241, '<?xml version=': 0, '>': 419, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '787261', 'n_tokens_mistral': 5205, 'n_tokens_neox': 4994, 'n_words': 789}