#ifndef _BIP_Engine_InteractionValue_HPP_
#define _BIP_Engine_InteractionValue_HPP_

// inherited classes
#include <InteractionValueItf.hpp>
#include "Interaction.hpp"

class BipError;

class InteractionValue : public virtual InteractionItf, public virtual Interaction, public InteractionValueItf {
 public:
  // constructors
  InteractionValue(const Connector &connector);

  // destructor
  virtual ~InteractionValue();

  // operations
  virtual void recycle() {}

  // specific
  BipError &execute();
  bool isAllDefined() const;
  bool isEnabled() const;
  bool isDominated() const;
  bool isDominatedLocally() const;

  bool operator<=(const InteractionValue &interaction) const;
  bool operator==(const InteractionValue &interaction) const;
  bool operator!=(const InteractionValue &interaction) const { return ! (*this == interaction); }
  bool operator< (const InteractionValue &interaction) const;

  friend ostream& operator<<(ostream &, const InteractionValue&);
  friend ostream& operator<<(ostream &, const InteractionValue*);
};

#endif // _BIP_Engine_InteractionValue_HPP_
