// $Source: /usr/local/SimSoft/Sfx3D/src/gsl/arbplan.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: arbplan.h,v $
// Revision 1.2  2001/11/29 15:18:09  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//

#ifndef _ARBPLAN_H
#define _ARBPLAN_H  1

#include "Messung.h"

#include "Token.h"
#include "Strings.h"
#include "DynArray.h"
#include "List.h"

#include "transp.h"

#ifdef _ARBPLAN_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

//---------------------------------------------------------
// class typStlElement
//---------------------------------------------------------

class _impexp typStlElement {
  public:
    typStlElement  ();
    typStlElement  (const typStlElement& stlEl);
    ~typStlElement ();

    const SimTime&  Zeit       () const;
    const unsigned& Variante   () const;

    const unsigned& Anzahl     () const;
    const unsigned& incAnzahl  ();
    const unsigned& decAnzahl  ();
    const unsigned& setAnzahl  (const unsigned& izahl);

    const unsigned& Artikel    () const;
    const unsigned& setArtikel (const unsigned& artNr);

    const double&   Menge      () const;
    const double&   incMenge   (const double& deltaM);
    const double&   decMenge   (const double& deltaM);
    const double&   setMenge   (const double& newMenge);

    void     lesen     (InputFile& file);
    ostream& schreiben (ostream& ostrm) const;

  private:
    unsigned ObjAnzahl;
    unsigned ObjArtikel;
    unsigned ObjVariante;
    double   ObjMenge;
    SimTime  ObjZeit;
};

//---------------------------------------------------------
// class typVorgang
//---------------------------------------------------------

class _impexp typVorgang {
  public :
    typVorgang ();
    virtual ~typVorgang ();

    unsigned       Nummer       () const;
    const int&     ProgNr       () const;
    const SimTime& Dauer        () const;
    void           setDauer     (const SimTime& zeit);
    typBaustein*   ZielBaustein () const;

    void     lesen     (InputFile& file);
    ostream& schreiben (ostream& ostrm) const;

  private:
    unsigned ObjNummer;
    int ObjProgNr;

    typBaustein* ObjZielBst;

    SimTime ObjDauer;
    Ustring ObjName;
};

//---------------------------------------------------------
// class typArbeitsplan
//---------------------------------------------------------

class _impexp typArbeitsplan {
  public :
    typArbeitsplan (unsigned n);
    virtual ~typArbeitsplan ();

    unsigned Nummer           () const;
    unsigned Palettenvariante () const;
    unsigned TempEin          () const;
    unsigned TempAus          () const;

    const SimTime& Wechselzeit  () const;
    const Vec3D&   TransportPos () const;

    Geschichte* BestandGeschichte () const;
    void        setBestandGeschichte (Geschichte *newGeschichte);
    Register* DlzRegister      () const;
    void      setDlzRegister   (Register *newReg);
    SimTime   SummeVorgangszeit () const;

    const List<typVorgang>&        Vorgaenge     () const;
    typVorgang*                    findeVorgang  (const unsigned vorgNr) const;
    const DynArray<typStlElement>& EingangsListe () const;
    const DynArray<typStlElement>& BestandsListe () const;

    void startBDE ();
    void stopBDE  (typTransportEinheit *zTE);

    void     lesen             (InputFile& file);
    ostream& schreiben         (ostream& ostrm) const;
    ostream& schreibeProtokoll (ostream& ostrm) const;

  private:
    unsigned ObjNummer;
    unsigned ObjAnzahl;
    unsigned ObjPalvariante;
    unsigned ObjTempEin;
    unsigned ObjTempAus;

    Vec3D ObjTransportPos;

    Ustring ObjName;

    Geschichte* ObjBestandGeschichte;
    Register* ObjDlzRegister;
    SimTime   ObjWechselzeit;

    DynArray<typStlElement> ObjEingangsListe;
    DynArray<typStlElement> ObjBestandsListe;
    List<typVorgang>        ObjVorgaenge;

    void     liesVariante    (InputFile& file);
    ostream& schreibeZustand (ostream& ostrm) const;
}; // typArbeitsplan

#endif
