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

#ifndef _GTSTBV_H
#define _GTSTBV_H     1

#include "List.h"

extern class typBaustein *tbv1dummy;
class typBstZeiger {
  public:
    typBaustein* zBst;
    typBstZeiger ()                  : zBst (NULL) { };
    typBstZeiger (typBaustein* zbst) : zBst (zbst) { };
    typBstZeiger (const typBstZeiger& copy) { zBst = copy.zBst; };
    void operator = (const typBstZeiger& copy) { zBst = copy.zBst; };
   ~typBstZeiger () { zBst = NULL; }
}; // typBstZeiger

class typBstVerkettung : public typBstZeiger
{
  protected:
    int vonPlatz;
    int mitPlatz;
    int unterWinkel;
  public:
    typBstVerkettung (typBaustein* zbst, int vonplatz, 
                     int mitplatz, int unterwinkel) : typBstZeiger(zbst),
                     vonPlatz(vonplatz), 
                     mitPlatz(mitplatz), unterWinkel(unterwinkel) { };
    int i_vonPlatz()    { return vonPlatz; }                 
    int i_mitPlatz()    { return mitPlatz; }                 
    int i_unterWinkel() { return unterWinkel; }
    
   ~typBstVerkettung () { }
}; // typBstVerkettung

class typVerkettung {
  protected:
    List<typBstVerkettung> EingangsListe;
    List<typBstVerkettung> AusgangsListe;
    bool     imFahrkurs;
    
  private:
    bool EndeFahrkurs (const typBaustein* zende);
    static bool PruefeEndeFahrkurs (int btyp);
    
 public:
    typVerkettung ();
    bool i_imFahrkurs  ()             { return imFahrkurs; };
    void s_imFahrkurs  (bool imFK)    { imFahrkurs = imFK; };
    bool BildeFahrkurs (typBaustein* zfkende);
    void InfoVerkettung();
    void LoeseEingangsVerkettung (typBaustein* zbst);
    void LoeseAusgangsVerkettung (typBaustein* zbst);
    void BstLoeseVerkettung      (typBaustein* zvonbst);
    void BstVerketten (int vonplatz, typBaustein* zmit, 
                       int mitplatz, int unterwinkel);
    void EingangVerketten (typBaustein* zvonbst, 
                           int vonplatz, int mitplatz, int unterwinkel);
    void AusgangVerketten (typBaustein* zmitbst, 
                           int vonplatz, int mitplatz, int unterwinkel);
    typBstVerkettung* SucheBstInEingangsListe (typBaustein* zbstein); 
    typBstVerkettung* SucheBstInAusgangsListe (typBaustein* zbstein); 
    void TBVSchreiben (ostream& ostrm, typBaustein* zbstein, int& satznr);
    ~typVerkettung ();
}; // typVerkettung

#endif /* _GTSTBV */
