#ifndef INCLUDED_TWO_STAGE_LINEAR_ENVELOPE_H
#define INCLUDED_TWO_STAGE_LINEAR_ENVELOPE_H

#include <string>

#include "ctrl-source.h"

/**
 * Two-stage linear envelope
 */
class TWO_STAGE_LINEAR_ENVELOPE : public CONTROLLER_SOURCE {

 public:

  std::string name(void) const { return("Two-stage linear envelope"); }
  virtual parameter_t value(void);
  virtual void set_initial_value(parameter_t arg) {}
  virtual void init(void);

  std::string parameter_names(void) const { return("1st-stage-sec,2nd-stage-sec"); }
  void set_parameter(int param, parameter_t value);
  parameter_t get_parameter(int param) const;

  TWO_STAGE_LINEAR_ENVELOPE(void); 
  TWO_STAGE_LINEAR_ENVELOPE* clone(void) const { return new TWO_STAGE_LINEAR_ENVELOPE(*this); }
  TWO_STAGE_LINEAR_ENVELOPE* new_expr(void) const { return new TWO_STAGE_LINEAR_ENVELOPE(); }

  private:

  parameter_t first_stage_length_rep, second_stage_length_rep;
  parameter_t curval;
};

#endif
