// $Source: /usr/local/SimSoft/Sfx3D/src/gsl/poolver.h,v $
// $Revision: 1.2 $
// $Author: baum $
// $Date: 2001/11/29 15:18:09 $
//
// Login name of the user who locked the revision
// $Locker:  $
// Tag name used to checkout the file
// $Name:  $
// State assigned to revision
// $State: Exp $
//
//
// $Log: poolver.h,v $
// Revision 1.2  2001/11/29 15:18:09  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//

#ifndef _POOLVER_H
#define _POOLVER_H  1

#include "Token.h"
#include "DynArray.h"

#include "baustein.h"
#include "regalver.h"

#ifdef _POOLVER_CPP
#  undef _impexp
#  define _impexp __declspec(dllexport)
#elif defined BUILD_MAIN_DLL
#  undef _impexp
#  define _impexp 
#else
#  undef _impexp
#  define _impexp __declspec(dllimport)
#endif

#if defined __GNUC__ || defined __hpux
#  undef _impexp
#  define _impexp
#endif

//---------------------------------------------------------
// Klasse typAvis
//---------------------------------------------------------

class _impexp typNcPoolverwalter : public typBaustein {
  public:
    typNcPoolverwalter (unsigned n, unsigned b);
    virtual ~typNcPoolverwalter ();

    virtual void typTPVlesen (InputFile& file);

    virtual void a_meldewarten ();
    
    virtual bool     hasKapazitaet (typTransportEinheit*) const;
    virtual unsigned Kapazitaet    () const;
    virtual unsigned setKapazitaet (unsigned wert);

    virtual typBaustein* setZielBaustein (typTransportEinheit *zTE);

    void Meldung_Arbeitsende   ();

    virtual typBaustein* setVerwalter (typBaustein* newVerwalter);
    virtual typRegalverwalter* setBetreuer  (typRegalverwalter* newBetreuer);
    typBaustein* PoolBaustein (unsigned bstNr) const;

    virtual void ArbZuweisen  (unsigned was, unsigned wohin,
                               unsigned istVorg, unsigned sollVorg,
                               unsigned wieoft);
    virtual void ArtZuweisen  (unsigned was, unsigned wohin,
                               unsigned istVorg, unsigned sollVorg,
                               unsigned wieoft);

  private:
    virtual void individuellAktivieren (typBaustein* vonWem);

    typBaustein* ZuweisungAusfuehren           (typTransportEinheit *zTE);
    typBaustein* Ziel_zuweisen                 (typTransportEinheit *zTE);
    typBaustein* zuweisen_FIFO                 ();
    typBaustein* zuweisen_Leuchtturm           ();
    typBaustein* zuweisen_Auslastung           ();
    typBaustein* zuweisen_AvisVergleich        ();
    typBaustein* zuweisen_Vorgabe              ();

    typRegalverwalter*  ObjBetreuer;
    typNcPoolverwalter* ObjVerwalter;

    class typMaschine* ObjLetzterLeuchtturm;
    DynArray<typMaschine> ObjMaschinen;
    List<Zuweisung> ObjZuweisungen;

  // friends
  friend class typMaschine;
};

#endif
