#ifndef LEARN_CONNT____LEARN____RENDEZVOUS_HPP_
#define LEARN_CONNT____LEARN____RENDEZVOUS_HPP_

// /home/siemens/bip/examples/sync_lec/learn.bip:17:1
// include package "master" header
#include <learn.hpp>

#include <Connector.hpp>
#include <Interaction.hpp>
#include <PortValue.hpp>

#if __cplusplus >= 201103L
#include <atomic>
#endif

// User include given in @cpp annotation
#include <utilities.hpp>

#include <learn/QPR__learn__intPort.hpp>
#include <learn/QPR__learn__silent.hpp>
#include <learn/InterV__learn__rendezVous.hpp>

class ConnT__learn__rendezVous : public Connector {
public:
    ConnT__learn__rendezVous(const string &name, QPR__learn__intPort &p1, QPR__learn__intPort &p2, QPR__learn__silent &p3);
    virtual ~ConnT__learn__rendezVous();

    virtual PortValue &up(const InteractionValue &interactionValue) const;
    virtual void down(InteractionValue &interactionValue) const;
    virtual void down(InteractionValue &interactionValue, PortValue &portValue) const;

    virtual Interaction &createInteraction() const;
    virtual Interaction &createInteraction(const vector<Port *> &ports) const;
    virtual void releaseInteraction(Interaction &interaction) const;

    virtual InteractionValue &createInteractionValue(const Interaction &interactionValue, const vector<PortValue *> &values) const;
    virtual void releaseInteractionValue(InteractionValue &interactionValue) const;

    virtual bool guard(const InteractionValue &interactionValue) const;
    virtual const vector<Interaction *> &interactions() const;
    virtual bool canUpOnlyMaximalInteractions() const {
        return false;
    }

private:
    QPR__learn__intPort &p1;
    QPR__learn__intPort &p2;
    QPR__learn__silent &p3;


    // Interactions
    // build for p1,p2,p3
    Inter__learn__rendezVous *_i__p1_p2_p3;



    mutable vector<Interaction *> definedInteractions;
};
#endif // LEARN_CONNT____LEARN____RENDEZVOUS_HPP_
